Find a file
Carl Worth 681afbc855 Perform macro by replacing tokens in original list.
We take the results of macro expansion and splice them into the
original token list over which we are iterating. This makes it easy
for function-like macro invocations to find their arguments since they
are simply subsequent tokens on the list.

This fixes the recently-introduced regressions (tests 55 and 56) and
also passes new tests 60 and 61 introduced to strees this feature,
(with macro-argument parentheses split between a macro value and the
textual input).
2010-05-28 15:10:27 -07:00
main Add hash table implementation from glsl2 project. 2010-05-10 13:36:26 -07:00
tests Perform macro by replacing tokens in original list. 2010-05-28 15:10:27 -07:00
.gitignore Remove blank lines from output files before comparing. 2010-05-27 14:53:51 -07:00
glcpp-lex.l Implement token pasting of integers. 2010-05-27 14:38:20 -07:00
glcpp-parse.y Perform macro by replacing tokens in original list. 2010-05-28 15:10:27 -07:00
glcpp.c Fix defines involving both literals and other defined macros. 2010-05-12 12:25:34 -07:00
glcpp.h Treat newlines as space when invoking a function-like macro invocation. 2010-05-26 16:04:31 -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 Implement token pasting of integers. 2010-05-27 14:38:20 -07:00
README Treat newlines as space when invoking a function-like macro invocation. 2010-05-26 16:04:31 -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.

A file that ends with a function-like macro name as the last
non-whitespace token will result in a parse error, (where it should be
passed through as is).