Find a file
Carl Worth 8f38aff9b5 Add a wrapper function around the lexer.
We rename the generated lexer from yylex to glcpp_lex. Then we
implement our own yylex function in glcpp-parse.y that calls
glcpp_lex. This doesn't change the behavior at all yet, but gives us a
place where we can do implement alternate lexing in the future.

(We want this because instead of re-lexing from strings for macro
expansion, we want to lex from pre-parsed token lists. We need this so
that when we terminate recursion due to an already active macro
expansion, we can ensure that that symbol never gets expanded again
later.)
2010-05-19 10:01:29 -07:00
main Add hash table implementation from glsl2 project. 2010-05-10 13:36:26 -07:00
tests Like previous fix, but for object-like macros (and add a test). 2010-05-19 07:57:03 -07:00
.gitignore Add a very simple test for the pre-processor. 2010-05-10 16:21:10 -07:00
glcpp-lex.l Rewrite macro handling to support function-like macro invocation in macro values 2010-05-18 22:10:04 -07:00
glcpp-parse.y Add a wrapper function around the lexer. 2010-05-19 10:01:29 -07:00
glcpp.c Fix defines involving both literals and other defined macros. 2010-05-12 12:25:34 -07:00
glcpp.h Add a wrapper function around the lexer. 2010-05-19 10:01:29 -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 Add README file describing glcpp. 2010-05-11 12:20:15 -07:00
xtalloc.c Rewrite macro handling to support function-like macro invocation in macro values 2010-05-18 22:10:04 -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