summaryrefslogtreecommitdiff
path: root/src/glsl/glcpp/glcpp-parse.y
AgeCommit message (Collapse)Author
2011-01-31Convert everything from the talloc API to the ralloc API.Kenneth Graunke
2011-01-29Revert "glcpp: Demote "macro redefined" from an error to a warning"Carl Worth
This reverts commit d3df641f0aba99b0b65ecd4d9b06798bca090a29. The original commit had sat unpushed on my machine for months. By the time I found it again, I had forgotten that we had decided not to use this change after all, (the relevant test was removed long ago).
2011-01-28glcpp: Demote "macro redefined" from an error to a warningCarl Worth
The GLSL specification is vague here, (just says "as is standard for C++"), though the C specifications seem quite clear that this should be an error. However, an existing piglit test (CorrectPreprocess11.frag) expects this to be a warning, not an error, so we change this, and document in README the deviation from the specification.
2011-01-26glcpp: Conditionally define macro GL_AMD_conservative_depthChad Versace
Define macro GL_AMD_conservative_depth to 1 when its extension is enabled.
2011-01-21glcpp: Remove use of talloc reference counting.Kenneth Graunke
We almost always want to simply steal; we only need to copy when copying a token list (in which case we're already cloning stuff anyway).
2011-01-10glcpp: Generate an error for division by zeroIan Romanick
When GCC encounters a division by zero in a preprocessor directive, it generates an error. Since the GLSL spec says that the GLSL preprocessor behaves like the C preprocessor, we should generate that same error. It's worth noting that I cannot find any text in the C99 spec that says this should be an error. The only text that I can find is line 5 on page 82 (section 6.5.5 Multiplicative Opertors), which says, "The result of the / operator is the quotient from the division of the first operand by the second; the result of the % operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined." Fixes 093-divide-by-zero.c test and bugzilla #32831. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-10glcpp: Fix segfault when validating macro redefinitionsChad Versace
In _token_list_equal_ignoring_space(token_list_t*, token_list_t*), add a guard that prevents dereferncing a null token list. This fixes test src/glsl/glcpp/tests/092-redefine-macro-error-2.c and Bugzilla #32695.
2010-12-07glcpp: Don't emit SPACE tokens in conditional_tokens production.Kenneth Graunke
Fixes glslparsertest defined-01.vert. Reported-by: José Fonseca <jfonseca@vmware.com> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Acked-by: Carl Worth <cworth@cworth.org>
2010-11-17glsl: Unconditionally define GL_FRAGMENT_PRECISION_HIGH in ES2 shaders.Kenneth Graunke
This is really supposed to be defined only if the driver supports highp in the fragment shader - but all of our current ES2 implementations do. So, just define it. In the future, we'll need to add a flag to gl_context and only define the macro if the flag is set. "Fixes" freedesktop.org bug #31673.
2010-11-16glcpp: Define GL_FRAGMENT_PRECISION_HIGH if GLSL version >= 1.30.Kenneth Graunke
Per section 4.5.4 of the GLSL 1.30 specification.
2010-10-08glcpp: Add the define for ARB_explicit_attrib_location when presentIan Romanick
2010-09-07glcpp: Fix build on non-GCC compilers.Kenneth Graunke
2010-09-07glsl: Define GL_ES preprocessor macro if API is OpenGL ES 2.0.Kenneth Graunke
Also define it if #version 100 is encountered.
2010-08-24glsl: Include main/core.h.Chia-I Wu
Make glsl include only main/core.h from core mesa.
2010-08-17glcpp: Add support for "redefined macro" error.Carl Worth
Carefully avoiding printing any error when the new definition matches the existing definition. This fixes the recently-added 088-redefine-macro-legitimate.c and 089-redefine-macro-error.c tests as well as glsparsertest/preprocess1 in piglit.
2010-08-16glcpp: Remove spurious newline generated by #version handling.Kenneth Graunke
This was causing line numbering to be off by one. The newline comes from the NEWLINE token at the end of the line; there's no need to insert one.
2010-08-14Revert "glsl2: Use stdint.h instead of inttypes.h"José Fonseca
This reverts commit a77a6bc008b3146c56431fa520a00e1f8dfa3938.
2010-08-13Fix an MSVC build error (bugzilla 29570).Vinson Lee
2010-08-13glsl2: Use stdint.h instead of inttypes.hIan Romanick
2010-08-12glsl2: Commit generated file changed by previous commitIan Romanick
2010-08-11glcpp: Fix "unterminated if" diagnostic.Carl Worth
This was previously being appended to the output string *after* a copy of the supposedly final string was made and handed to the caller. So the diagnostic was never actually visible to the user. We fix this by moving the check for an unterminated #if from glcpp_parser_destroy to the calling function, preprocess. This fixes the test case 083-unterminated-if.c.
2010-08-11glcpp: Add an explicit diagnostic for #if with no expression.Carl Worth
This is more clear than the previously-generated diagnostic which was something confusing like "enexpected newline". This change makse test 080-if-witout-expression.c now pass.
2010-08-11glcpp: Reword diagnostic for #elif with no expressionCarl Worth
Rather than telling the user what to fix, the standard convention is to describe what the detected problem is. With this change, test 081-elif-without-expression now passes.
2010-08-11glcpp: Additional fixes for not evaluating skipped #if/#elif expressions.Carl Worth
This adds a couple of test cases to expand our coverage of invalid #if and being skipped, (either by being nested inside an #if/#elif that evaluates to zero or by being after an #if/#elif that evaluates to non-zero).
2010-08-10glcpp: Initialize location structure at beginning of parse.Carl Worth
Since we have a custom structure for YYLTYPE locations, we need to use an %initial-action directive to avoid triggering use of uninitialized memory when, for example, printing error messages. We apparently don't yet have a test case that allowed valgrind to find this bug for us, but valgrind found a similar problem in the other parser, so we fix this one as well.
2010-08-04glcpp: Ignore #if and #elif expressions when skipping.Kenneth Graunke
Fixes glcpp test cases 073 and 074, as well as piglit test xonotic-vs-generic-diffuse.vert.
2010-08-04glcpp: Refactor HASH_IF and HASH_ELIF expansion to reuse code.Kenneth Graunke
2010-08-04glcpp: Remove xtalloc wrappers in favor of plain talloc.Kenneth Graunke
Calling exit() on a memory failure probably made sense for the standalone preprocessor, but doesn't seem too appealing as part of the GL library. Also, we don't use it in the main compiler.
2010-07-28glsl2: Actually fix glsl-version-define.Eric Anholt
2010-07-28glcpp: Add __VERSION__ define to the current language version.Eric Anholt
Fixes: glsl-version-define glsl-version-define-110 glsl-version-define-120
2010-07-28glcpp: Print integer tokens as decimal, not hex.Eric Anholt
2010-07-28glsl2: Add the define for ARB_fragment_coord_conventions when present.Eric Anholt
Fixes: glsl-arb-fragment-coord-conventions-define
2010-07-28glcpp: Explicitly expect 0 shift/reduce conflicts.Carl Worth
The "%expect 0" construct will make bison emit an error if any future changes to the grammar introduce shift/reduce conflicts, (without also increasing the number after "%expect").
2010-07-28glcpp: Remove 2 shift/reduce conflicts from the grammar.Carl Worth
Since we have productions to turn "defined FOO" and "defined ( FOO )" into a conditional_token we don't need to list DEFINED as an operator as well. Doing so just introduces the shift/reduce ambiguity with no benefit.
2010-07-22glcpp: Fix function-like macros with an argument used multiple times.Carl Worth
It's really hard to believe that this case has been broken, but apparently no test previously exercised it. So this commit adds such a test and fixes it by making a copy of the argument token-list before expanding it. This fix causes the following glean tests to now pass: glsl1-Preprocessor test 6 (#if 0, #define macro) glsl1-Preprocessor test 7 (multi-line #define)
2010-07-20glcpp: Avoid accidental token pasting in preprocessed result.Carl Worth
Consider this test case: #define EMPTY int foo = 1+EMPTY+4; The expression should compile as the sequence of tokens 1, PLUS, UNARY_POSITIVE, 4. But glcpp has been failing for this case since it results in the string "1++4" which a compiler correctly sees as a syntax error, (1, POST_INCREMENT, 4). We fix this by changing any macro with an empty definition to result in a single SPACE token rather than nothing. This then gives "1+ +4" which compiles correctly. This commit does touch up the two existing test cases which already have empty macros, (to add the space to the expected result). It also adds a new test case to exercise the above scenario.
2010-07-20glcpp: Add static keyword to several functions in the parser.Carl Worth
This quiets warnings about missing declarations otherwise.
2010-07-20glcpp: Fix use-after-free error from #undef directive.Carl Worth
By taking advantage of the recently-added hash_table_remove function. With this change, all existing tests are now valgrind-clean.
2010-07-01glsl2: Conditionally define preprocessor tokens for optional extensionsIan Romanick
The only optional extension currently supported by the compiler is GL_EXT_texture_array.
2010-07-01glsl2: Define preprocessor tokens for extensionsIan Romanick
Currently only GL_ARB_draw_buffers and GL_ARB_texture_rectangle are defined because those extensions are always enabled. This make tex_rect-03.frag pass.
2010-06-24glsl2: Move the compiler to the subdirectory it will live in in Mesa.Eric Anholt