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. */
--- /dev/null
+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__
--- /dev/null
+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
+