mesa/src/glsl/glcpp
Carl Worth cb5ea0c79b glcpp: Add several tests for diagnostics.
Which are proving to be useful since some of these tests are not yet
acting as desired, (in particular, the unterminated if test is not
generating any diagnostic).
2010-08-11 14:38:03 -07:00
..
tests glcpp: Add several tests for diagnostics. 2010-08-11 14:38:03 -07:00
.gitignore glcpp: Add generated source files. 2010-07-28 13:48:32 -07:00
glcpp-lex.c glcpp: Regenerate glcpp-lex.c 2010-08-11 14:38:03 -07:00
glcpp-lex.l glcpp: Initialize line and column numbers to 1, not 0. 2010-08-11 14:38:03 -07:00
glcpp-parse.c glcpp: Regenerate glcpp-parse.c 2010-08-11 12:45:55 -07:00
glcpp-parse.h glcpp: Regnerate glcpp-parse.c and glcpp-parse.h 2010-08-10 16:59:20 -07:00
glcpp-parse.y glcpp: Additional fixes for not evaluating skipped #if/#elif expressions. 2010-08-11 12:43:44 -07:00
glcpp.c glsl2: Conditionally define preprocessor tokens for optional extensions 2010-07-01 20:40:08 -07:00
glcpp.h glcpp: Remove xtalloc wrappers in favor of plain talloc. 2010-08-04 15:57:20 -07:00
Makefile.am glcpp: Remove xtalloc wrappers in favor of plain talloc. 2010-08-04 15:57:20 -07:00
pp.c glsl2: move declarations before code 2010-08-11 15:06:12 -06:00
README glsl2: Move the compiler to the subdirectory it will live in in Mesa. 2010-06-24 15:36:00 -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).