Browse Source

glcpp: Add support for __LINE__ and __FILE__ macros

These tokens are easy to expand by just looking at the current, tracked
location values, (and no need to look anything up in the hash table).

Add a test which verifies __LINE__ with several values, (and verifies __FILE__
for the single value of 0). Our testing framework isn't sophisticated enough
here to have a test with multiple file inputs.

This commit fixes part of es3conform's preprocess16_frag test.

Reviewed-by: Matt Turner <mattst88@gmail.com>
tags/gles3-fmt-v1
Carl Worth 13 years ago
parent
commit
907a10378e

+ 30
- 1
src/glsl/glcpp/glcpp-parse.y View File

@@ -1528,8 +1528,37 @@ _glcpp_parser_expand_node (glcpp_parser_t *parser,
return NULL;
}

/* Look up this identifier in the hash table. */
identifier = token->value.str;

/* Special handling for __LINE__ and __FILE__, (not through
* the hash table). */
if (strcmp(identifier, "__LINE__") == 0) {
token_list_t *replacement;
token_t *value;

replacement = _token_list_create (parser);
value = _token_create_ival (parser, INTEGER,
node->token->location.first_line);
_token_list_append (replacement, value);

*last = node;
return replacement;
}

if (strcmp(identifier, "__FILE__") == 0) {
token_list_t *replacement;
token_t *value;

replacement = _token_list_create (parser);
value = _token_create_ival (parser, INTEGER,
node->token->location.source);
_token_list_append (replacement, value);

*last = node;
return replacement;
}

/* Look up this identifier in the hash table. */
macro = hash_table_find (parser->defines, identifier);

/* Not a macro, so no expansion needed. */

+ 7
- 0
src/glsl/glcpp/tests/113-line-and-file-macros.c View File

@@ -0,0 +1,7 @@
1. Number of dalmations: __LINE__ __FILE__ __LINE__
2. Nominal visual acuity: __LINE__ __FILE__ / __LINE__ __FILE__
3. Battle of Thermopylae, as film: __LINE__ __FILE__ __FILE__
4. HTTP code for "Not Found": __LINE__ __FILE__ __LINE__
5. Hexadecimal for 20560: __LINE__ __FILE__ __LINE__ __FILE__
6: Zip code for Nortonville, KS: __LINE__ __LINE__ __FILE__ __LINE__ __FILE__
7. James Bond, as a number: __FILE__ __FILE__ __LINE__

+ 8
- 0
src/glsl/glcpp/tests/113-line-and-file-macros.c.expected View File

@@ -0,0 +1,8 @@
1. Number of dalmations: 1 0 1
2. Nominal visual acuity: 2 0 / 2 0
3. Battle of Thermopylae, as film: 3 0 0
4. HTTP code for "Not Found": 4 0 4
5. Hexadecimal for 20560: 5 0 5 0
6: Zip code for Nortonville, KS: 6 6 0 6 0
7. James Bond, as a number: 0 0 7


Loading…
Cancel
Save