diff options
author | Kenneth Graunke <[email protected]> | 2011-01-01 12:43:03 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2011-01-12 23:55:34 -0800 |
commit | 47b2af2c62fec3ac0fb501a31e93fc8d00c18cb8 (patch) | |
tree | 2988cd8206098a03e1e262a928f4f4e325404a5d /src/glsl/s_expression.cpp | |
parent | 5bfb68cd0f1d2941645a1fe133ffe1c6a4f5786b (diff) |
glsl/s_expression: Read and ignore Scheme-style comments.
A single-semicolon until the end of the line, i.e.
; this is a comment.
Diffstat (limited to 'src/glsl/s_expression.cpp')
-rw-r--r-- | src/glsl/s_expression.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/glsl/s_expression.cpp b/src/glsl/s_expression.cpp index 852a049d43f..6edbf62e488 100644 --- a/src/glsl/s_expression.cpp +++ b/src/glsl/s_expression.cpp @@ -38,15 +38,25 @@ s_list::s_list() { } +static void +skip_whitespace(const char *& src) +{ + src += strspn(src, " \v\t\r\n"); + /* Also skip Scheme-style comments: semi-colon 'til end of line */ + if (src[0] == ';') { + src += strcspn(src, "\n"); + skip_whitespace(src); + } +} + static s_expression * read_atom(void *ctx, const char *& src) { s_expression *expr = NULL; - // Skip leading spaces. - src += strspn(src, " \v\t\r\n"); + skip_whitespace(src); - size_t n = strcspn(src, "( \v\t\r\n)"); + size_t n = strcspn(src, "( \v\t\r\n);"); if (n == 0) return NULL; // no atom @@ -80,8 +90,7 @@ s_expression::read_expression(void *ctx, const char *&src) if (atom != NULL) return atom; - // Skip leading spaces. - src += strspn(src, " \v\t\r\n"); + skip_whitespace(src); if (src[0] == '(') { ++src; @@ -91,7 +100,7 @@ s_expression::read_expression(void *ctx, const char *&src) while ((expr = read_expression(ctx, src)) != NULL) { list->subexpressions.push_tail(expr); } - src += strspn(src, " \v\t\r\n"); + skip_whitespace(src); if (src[0] != ')') { printf("Unclosed expression (check your parenthesis).\n"); return NULL; |