Module: Mesa Branch: mesa_7_7_branch Commit: cb5447f79ca03d29407e8db84166f5bddd8d4c59 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=cb5447f79ca03d29407e8db84166f5bddd8d4c59
Author: Brian Paul <[email protected]> Date: Fri Jan 29 08:26:23 2010 -0700 glsl: fix preprocessor bug involving //-style comments in macro definitions See comments for details. --- src/mesa/shader/slang/slang_preprocess.c | 32 +++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-) diff --git a/src/mesa/shader/slang/slang_preprocess.c b/src/mesa/shader/slang/slang_preprocess.c index e9a24cc..ba40bad 100644 --- a/src/mesa/shader/slang/slang_preprocess.c +++ b/src/mesa/shader/slang/slang_preprocess.c @@ -914,6 +914,35 @@ parse_if (slang_string *output, const byte *prod, GLuint *pi, GLint *result, pp_ #define PRAGMA_PARAM 1 +/** + * Return the length of the given string, stopping at any C++-style comments. + * This step fixes bugs with macro definitions such as: + * #define PI 3.14159 // this is pi + * The preprocessor includes the comment in the definition of PI so + * when we plug in PI somewhere, we get the comment too. + * This function effectively strips of the // comment from the given string. + * It might also be possible to fix this in the preprocessor grammar. + * This bug is not present in the new Mesa 7.8 preprocessor. + */ +static int +strlen_without_comments(const char *s) +{ + char pred = 0; + int len = 0; + while (*s) { + if (*s == '/' && pred == '/') { + return len - 1; + } + pred = *s; + s++; + len++; + } + return len; +} + + + + static GLboolean preprocess_source (slang_string *output, const char *source, grammar pid, grammar eid, @@ -1055,11 +1084,12 @@ preprocess_source (slang_string *output, const char *source, if (state.cond.top->effective) { slang_string replacement; expand_state es; + int idlen2 = strlen_without_comments((char*)id); pp_annotate (output, ") %s", id); slang_string_init(&replacement); - slang_string_pushs(&replacement, id, idlen); + slang_string_pushs(&replacement, id, idlen2); /* Expand macro replacement. */ es.output = &symbol->replacement; _______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
