Find a file
Carl Worth 8e82fcb070 Implement (and test) support for macro expansion within conditional expressions.
To do this we have split the existing "HASH_IF expression" into two
productions:

First is HASH_IF pp_tokens which simply constructs a list of tokens.

Then, with that resulting token list, we first evaluate all DEFINED
operator tokens, then expand all macros, and finally start lexing from
the resulting token list. This brings us to the second production,
IF_EXPANDED expression

This final production works just like our previous "HASH_IF
expression", evaluating a constant integer expression.

The new test (54) added for this case now passes.
2010-05-26 11:15:21 -07:00
main Add hash table implementation from glsl2 project. 2010-05-10 13:36:26 -07:00
tests Implement (and test) support for macro expansion within conditional expressions. 2010-05-26 11:15:21 -07:00
.gitignore Add a very simple test for the pre-processor. 2010-05-10 16:21:10 -07:00
glcpp-lex.l Fix lexing of "defined" as an operator, not an identifier. 2010-05-26 09:37:14 -07:00
glcpp-parse.y Implement (and test) support for macro expansion within conditional expressions. 2010-05-26 11:15:21 -07:00
glcpp.c Fix defines involving both literals and other defined macros. 2010-05-12 12:25:34 -07:00
glcpp.h Implement (and test) support for macro expansion within conditional expressions. 2010-05-26 11:15:21 -07:00
hash_table.c Add hash table implementation from glsl2 project. 2010-05-10 13:36:26 -07:00
hash_table.h Add hash table implementation from glsl2 project. 2010-05-10 13:36:26 -07:00
Makefile Add a wrapper function around the lexer. 2010-05-19 10:01:29 -07:00
README README: Document some known limitations. 2010-05-26 08:11:08 -07:00
xtalloc.c Add xtalloc_reference. 2010-05-25 14:40:47 -07:00

glcpp -- GLSL "C" preprocessor

This is a simple preprocessor designed to provide the preprocessing
needs of the GLSL language. The requirements for this preprocessor are
specified in the GLSL 1.30 specification availble from:

http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.08.pdf

This specification is not precise on some semantics, (for example,
#define and #if), defining these merely "as is standard for C++
preprocessors". To fill in these details, I've been using the C99
standard (for which I had a convenient copy) as available from:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

Known limitations
-----------------
Macro invocations cannot include embedded newlines.

The __LINE__, __FILE__, and __VERSION__ macros are not yet supported.

The argument of the 'defined' operator cannot yet include enclosing
parentheses.

The #error, #pragma, #extension, #version, and #line macros are not
yet supported.