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
| @@ -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. */ | |||
| @@ -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__ | |||
| @@ -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 | |||