• Home
  • Raw
  • Download

Lines Matching full:parser

46 yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error);
49 _define_object_macro(glcpp_parser_t *parser,
55 _define_function_macro(glcpp_parser_t *parser,
62 _string_list_create(glcpp_parser_t *parser);
65 _string_list_append_item(glcpp_parser_t *parser, string_list_t *list,
81 _argument_list_create(glcpp_parser_t *parser);
84 _argument_list_append(glcpp_parser_t *parser, argument_list_t *list,
94 _token_create_str(glcpp_parser_t *parser, int type, char *str);
97 _token_create_ival(glcpp_parser_t *parser, int type, int ival);
100 _token_list_create(glcpp_parser_t *parser);
103 _token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token);
106 _token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token);
115 _parser_active_list_push(glcpp_parser_t *parser, const char *identifier,
119 _parser_active_list_pop(glcpp_parser_t *parser);
122 _parser_active_list_contains(glcpp_parser_t *parser, const char *identifier);
133 _glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type,
138 _glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list,
142 _glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser,
146 _glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc,
150 _glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc,
154 _glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc);
157 _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version,
161 glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser);
164 glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list);
167 glcpp_parser_t *parser; member
175 add_builtin_define(glcpp_parser_t *parser, const char *name, int value);
179 %pure-parser
191 %parse-param {glcpp_parser_t *parser}
192 %lex-param {glcpp_parser_t *parser}
232 _glcpp_parser_print_expanded_token_list (parser, $1);
233 _mesa_string_buffer_append_char(parser->output, '\n');
240 if (parser->is_gles && $2.undefined_macro)
241 …glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro…
242 _glcpp_parser_skip_stack_push_if (parser, & @1, $2.value);
245 if (parser->is_gles && $2.undefined_macro)
246 …glcpp_error(& @1, parser, "undefined macro %s in expression (illegal in GLES)", $2.undefined_macro…
247 _glcpp_parser_skip_stack_change_if (parser, & @1, "elif", $2.value);
250 parser->has_new_line_number = 1;
251 parser->new_line_number = $2;
252 _mesa_string_buffer_printf(parser->output, "#line %" PRIiMAX "\n", $2);
255 parser->has_new_line_number = 1;
256 parser->new_line_number = $2;
257 parser->has_new_source_number = 1;
258 parser->new_source_number = $3;
259 _mesa_string_buffer_printf(parser->output,
264 parser->has_new_line_number = 1;
265 parser->new_line_number = $2;
266 _mesa_string_buffer_printf(parser->output,
274 _define_object_macro (parser, & @1, $1, $2);
277 _define_function_macro (parser, & @1, $1, NULL, $4);
280 _define_function_macro (parser, & @1, $1, $3, $5);
286 _mesa_string_buffer_append_char(parser->output, '\n');
291 if (parser->skip_stack == NULL ||
292 parser->skip_stack->type == SKIP_NO_SKIP)
294 _glcpp_parser_expand_and_lex_from (parser,
329 glcpp_error(& @1, parser, "Built-in (pre-defined)"
332 if (parser->is_gles
333 && parser->version >= 300
337 glcpp_error(& @1, parser, "Built-in (pre-defined)"
339 } else if (parser->is_gles && parser->version <= 300) {
340 glcpp_error(& @1, parser,
344 glcpp_warning(& @1, parser,
350 entry = _mesa_hash_table_search (parser->defines, $3);
352 _mesa_hash_table_remove (parser->defines, entry);
356 size_t include_cursor = _mesa_get_shader_include_cursor(parser->gl_ctx->Shared);
361 _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, 0);
367 _mesa_lookup_shader_include(parser->gl_ctx, path, false);
371 glcpp_error(&@1, parser, "%s not found", $2);
373 /* Create a temporary parser with the same settings */
375 glcpp_parser_create(parser->gl_ctx, parser->extensions, parser->state);
377 tmp_parser->version = parser->version;
383 * shade include parser.
386 di.parser = tmp_parser;
389 hash_table_call_foreach(parser->defines,
393 /* Print out '#include' to the glsl parser. We do this
398 _mesa_string_buffer_printf(parser->output, "#include\n");
404 _mesa_string_buffer_printf(parser->info_log, "%s",
406 _mesa_string_buffer_printf(parser->output, "%s",
409 /* Copy any new define macros to the parent parser
410 * and steal the memory of our temp parser so we don't
414 di.parser = parser;
416 ralloc_steal(parser, tmp_parser);
422 /* Destroy tmp parser memory we no longer need */
427 _mesa_set_shader_include_cursor(parser->gl_ctx->Shared, include_cursor);
437 if (parser->skip_stack == NULL ||
438 parser->skip_stack->type == SKIP_NO_SKIP)
440 _glcpp_parser_expand_and_lex_from (parser,
446 _glcpp_parser_skip_stack_push_if (parser, & @1, 0);
447 parser->skip_stack->type = SKIP_TO_ENDIF;
453 if (parser->skip_stack == NULL ||
454 parser->skip_stack->type == SKIP_NO_SKIP)
456 glcpp_error(& @1, parser, "#if with no expression");
458 _glcpp_parser_skip_stack_push_if (parser, & @1, 0);
462 _mesa_hash_table_search(parser->defines, $3);
464 _glcpp_parser_skip_stack_push_if (parser, & @1, macro != NULL);
468 _mesa_hash_table_search(parser->defines, $3);
470 _glcpp_parser_skip_stack_push_if (parser, & @3, macro == NULL);
480 if (parser->skip_stack &&
481 parser->skip_stack->type == SKIP_TO_ELSE)
483 _glcpp_parser_expand_and_lex_from (parser,
487 else if (parser->skip_stack &&
488 parser->skip_stack->has_else)
490 glcpp_error(& @1, parser, "#elif after #else");
494 _glcpp_parser_skip_stack_change_if (parser, & @1,
501 if (parser->skip_stack &&
502 parser->skip_stack->type == SKIP_TO_ELSE)
504 glcpp_error(& @1, parser, "#elif with no expression");
506 else if (parser->skip_stack &&
507 parser->skip_stack->has_else)
509 glcpp_error(& @1, parser, "#elif after #else");
513 _glcpp_parser_skip_stack_change_if (parser, & @1,
515 glcpp_warning(& @1, parser, "ignoring illegal #elif without expression");
518 | HASH_TOKEN ELSE { parser->lexing_directive = 1; } NEWLINE {
519 if (parser->skip_stack &&
520 parser->skip_stack->has_else)
522 glcpp_error(& @1, parser, "multiple #else");
526 _glcpp_parser_skip_stack_change_if (parser, & @1, "else", 1);
527 if (parser->skip_stack)
528 parser->skip_stack->has_else = true;
532 _glcpp_parser_skip_stack_pop (parser, & @1);
535 if (parser->version_set) {
536 glcpp_error(& @1, parser, "#version must appear on the first line");
538 _glcpp_parser_handle_version_declaration(parser, $3, NULL, true);
541 if (parser->version_set) {
542 glcpp_error(& @1, parser, "#version must appear on the first line");
544 _glcpp_parser_handle_version_declaration(parser, $3, $4, true);
547 glcpp_parser_resolve_implicit_version(parser);
550 _mesa_string_buffer_printf(parser->output, "#%s", $2);
556 glcpp_error(& @1, parser, "#%s", $2);
559 glcpp_error (& @1, parser, "#define without macro name");
562 glcpp_error (& @1, parser, "Illegal non-directive after #");
579 glcpp_error(&@1, parser, "invalid #version \"%s\" (not a decimal constant)", $1);
593 if (parser->is_gles)
594 $$.undefined_macro = linear_strdup(parser->linalloc, $1);
713 yyerror (& @1, parser,
725 yyerror (& @1, parser,
765 $$ = _string_list_create (parser);
766 _string_list_append_item (parser, $$, $1);
770 _string_list_append_item (parser, $$, $3);
787 if (parser->gl_ctx->Const.AllowExtraPPTokens)
788 glcpp_warning(&@1, parser, "extra tokens at end of directive");
790 glcpp_error(&@1, parser, "extra tokens at end of directive");
798 parser->space_tokens = 1;
799 $$ = _token_list_create (parser);
800 _token_list_append (parser, $$, $1);
804 _token_list_append (parser, $$, $2);
810 $$ = _token_create_str (parser, IDENTIFIER, $1);
814 $$ = _token_create_str (parser, INTEGER_STRING, $1);
818 $$ = _token_create_str (parser, PATH, $1);
822 $$ = _token_create_ival (parser, $1, $1);
826 $$ = _token_create_ival (parser, DEFINED, DEFINED);
830 $$ = _token_create_str (parser, OTHER, $1);
834 $$ = _token_create_ival (parser, SPACE, SPACE);
878 _string_list_create(glcpp_parser_t *parser)
882 list = linear_alloc_child(parser->linalloc, sizeof(string_list_t));
890 _string_list_append_item(glcpp_parser_t *parser, string_list_t *list, in _string_list_append_item() argument
895 node = linear_alloc_child(parser->linalloc, sizeof(string_node_t)); in _string_list_append_item()
896 node->str = linear_strdup(parser->linalloc, str); in _string_list_append_item()
989 _argument_list_create(glcpp_parser_t *parser) in _argument_list_create() argument
993 list = linear_alloc_child(parser->linalloc, sizeof(argument_list_t)); in _argument_list_create()
1001 _argument_list_append(glcpp_parser_t *parser, in _argument_list_append() argument
1006 node = linear_alloc_child(parser->linalloc, sizeof(argument_node_t)); in _argument_list_append()
1058 _token_create_str(glcpp_parser_t *parser, int type, char *str) in _token_create_str() argument
1062 token = linear_alloc_child(parser->linalloc, sizeof(token_t)); in _token_create_str()
1071 _token_create_ival(glcpp_parser_t *parser, int type, int ival) in _token_create_ival() argument
1075 token = linear_alloc_child(parser->linalloc, sizeof(token_t)); in _token_create_ival()
1084 _token_list_create(glcpp_parser_t *parser) in _token_list_create() argument
1088 list = linear_alloc_child(parser->linalloc, sizeof(token_list_t)); in _token_list_create()
1097 _token_list_prepend(glcpp_parser_t *parser, token_list_t *list, token_t *token) in _token_list_prepend() argument
1101 node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); in _token_list_prepend()
1109 _token_list_append(glcpp_parser_t *parser, token_list_t *list, token_t *token) in _token_list_append() argument
1113 node = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); in _token_list_append()
1145 _token_list_copy(glcpp_parser_t *parser, token_list_t *other) in _token_list_copy() argument
1153 copy = _token_list_create (parser); in _token_list_copy()
1155 token_t *new_token = linear_alloc_child(parser->linalloc, sizeof(token_t)); in _token_list_copy()
1157 _token_list_append (parser, copy, new_token); in _token_list_copy()
1336 _token_paste(glcpp_parser_t *parser, token_t *token, token_t *other) in _token_paste() argument
1353 combined = _token_create_ival (parser, LEFT_SHIFT, LEFT_SHIFT); in _token_paste()
1355 combined = _token_create_ival (parser, LESS_OR_EQUAL, LESS_OR_EQUAL); in _token_paste()
1359 combined = _token_create_ival (parser, RIGHT_SHIFT, RIGHT_SHIFT); in _token_paste()
1361 combined = _token_create_ival (parser, GREATER_OR_EQUAL, GREATER_OR_EQUAL); in _token_paste()
1365 combined = _token_create_ival (parser, EQUAL, EQUAL); in _token_paste()
1369 combined = _token_create_ival (parser, NOT_EQUAL, NOT_EQUAL); in _token_paste()
1373 combined = _token_create_ival (parser, AND, AND); in _token_paste()
1377 combined = _token_create_ival (parser, OR, OR); in _token_paste()
1421 str = linear_asprintf(parser->linalloc, "%" PRIiMAX, token->value.ival); in _token_paste()
1423 str = linear_strdup(parser->linalloc, token->value.str); in _token_paste()
1426 linear_asprintf_append(parser->linalloc, &str, "%" PRIiMAX, other->value.ival); in _token_paste()
1428 linear_strcat(parser->linalloc, &str, other->value.str); in _token_paste()
1437 combined = _token_create_str (parser, combined_type, str); in _token_paste()
1443 glcpp_error (&token->location, parser, ""); in _token_paste()
1444 _mesa_string_buffer_append(parser->info_log, "Pasting \""); in _token_paste()
1445 _token_print(parser->info_log, token); in _token_paste()
1446 _mesa_string_buffer_append(parser->info_log, "\" and \""); in _token_paste()
1447 _token_print(parser->info_log, other); in _token_paste()
1448 _mesa_string_buffer_append(parser->info_log, "\" does not give a valid preprocessing token.\n"); in _token_paste()
1454 _token_list_print(glcpp_parser_t *parser, token_list_t *list) in _token_list_print() argument
1462 _token_print(parser->output, node->token); in _token_list_print()
1466 yyerror(YYLTYPE *locp, glcpp_parser_t *parser, const char *error) in yyerror() argument
1468 glcpp_error(locp, parser, "%s", error); in yyerror()
1472 add_builtin_define(glcpp_parser_t *parser, const char *name, int value) in add_builtin_define() argument
1477 tok = _token_create_ival (parser, INTEGER, value); in add_builtin_define()
1479 list = _token_list_create(parser); in add_builtin_define()
1480 _token_list_append(parser, list, tok); in add_builtin_define()
1481 _define_object_macro(parser, NULL, name, list); in add_builtin_define()
1493 glcpp_parser_t *parser; in glcpp_parser_create() local
1495 parser = ralloc (NULL, glcpp_parser_t); in glcpp_parser_create()
1497 glcpp_lex_init_extra (parser, &parser->scanner); in glcpp_parser_create()
1498 parser->defines = _mesa_hash_table_create(NULL, _mesa_hash_string, in glcpp_parser_create()
1500 parser->linalloc = linear_context(parser); in glcpp_parser_create()
1501 parser->active = NULL; in glcpp_parser_create()
1502 parser->lexing_directive = 0; in glcpp_parser_create()
1503 parser->lexing_version_directive = 0; in glcpp_parser_create()
1504 parser->space_tokens = 1; in glcpp_parser_create()
1505 parser->last_token_was_newline = 0; in glcpp_parser_create()
1506 parser->last_token_was_space = 0; in glcpp_parser_create()
1507 parser->first_non_space_token_this_line = 1; in glcpp_parser_create()
1508 parser->newline_as_space = 0; in glcpp_parser_create()
1509 parser->in_control_line = 0; in glcpp_parser_create()
1510 parser->paren_count = 0; in glcpp_parser_create()
1511 parser->commented_newlines = 0; in glcpp_parser_create()
1513 parser->skip_stack = NULL; in glcpp_parser_create()
1514 parser->skipping = 0; in glcpp_parser_create()
1516 parser->lex_from_list = NULL; in glcpp_parser_create()
1517 parser->lex_from_node = NULL; in glcpp_parser_create()
1519 parser->output = _mesa_string_buffer_create(parser, in glcpp_parser_create()
1521 parser->info_log = _mesa_string_buffer_create(parser, in glcpp_parser_create()
1523 parser->error = 0; in glcpp_parser_create()
1525 parser->gl_ctx = gl_ctx; in glcpp_parser_create()
1526 parser->extensions = extensions; in glcpp_parser_create()
1527 parser->extension_list = &gl_ctx->Extensions; in glcpp_parser_create()
1528 parser->state = state; in glcpp_parser_create()
1529 parser->api = gl_ctx->API; in glcpp_parser_create()
1530 parser->version = 0; in glcpp_parser_create()
1531 parser->version_set = false; in glcpp_parser_create()
1533 parser->has_new_line_number = 0; in glcpp_parser_create()
1534 parser->new_line_number = 1; in glcpp_parser_create()
1535 parser->has_new_source_number = 0; in glcpp_parser_create()
1536 parser->new_source_number = 0; in glcpp_parser_create()
1538 parser->is_gles = false; in glcpp_parser_create()
1540 return parser; in glcpp_parser_create()
1544 glcpp_parser_destroy(glcpp_parser_t *parser) in glcpp_parser_destroy() argument
1546 glcpp_lex_destroy (parser->scanner); in glcpp_parser_destroy()
1547 _mesa_hash_table_destroy(parser->defines, NULL); in glcpp_parser_destroy()
1548 ralloc_free (parser); in glcpp_parser_destroy()
1582 _arguments_parse(glcpp_parser_t *parser, in _arguments_parse() argument
1600 argument = _token_list_create (parser); in _arguments_parse()
1601 _argument_list_append (parser, arguments, argument); in _arguments_parse()
1614 argument = _token_list_create (parser); in _arguments_parse()
1615 _argument_list_append (parser, arguments, argument); in _arguments_parse()
1622 _token_list_append(parser, argument, node->token); in _arguments_parse()
1635 _token_list_create_with_one_ival(glcpp_parser_t *parser, int type, int ival) in _token_list_create_with_one_ival() argument
1640 list = _token_list_create(parser); in _token_list_create_with_one_ival()
1641 node = _token_create_ival(parser, type, ival); in _token_list_create_with_one_ival()
1642 _token_list_append(parser, list, node); in _token_list_create_with_one_ival()
1648 _token_list_create_with_one_space(glcpp_parser_t *parser) in _token_list_create_with_one_space() argument
1650 return _token_list_create_with_one_ival(parser, SPACE, SPACE); in _token_list_create_with_one_space()
1654 _token_list_create_with_one_integer(glcpp_parser_t *parser, int ival) in _token_list_create_with_one_integer() argument
1656 return _token_list_create_with_one_ival(parser, INTEGER, ival); in _token_list_create_with_one_integer()
1681 _glcpp_parser_evaluate_defined(glcpp_parser_t *parser, token_node_t *node, in _glcpp_parser_evaluate_defined() argument
1727 return _mesa_hash_table_search(parser->defines, in _glcpp_parser_evaluate_defined()
1731 glcpp_error (&defined->token->location, parser, in _glcpp_parser_evaluate_defined()
1739 _glcpp_parser_evaluate_defined_in_list(glcpp_parser_t *parser, in _glcpp_parser_evaluate_defined_in_list() argument
1756 value = _glcpp_parser_evaluate_defined (parser, node, &last); in _glcpp_parser_evaluate_defined_in_list()
1760 replacement = linear_alloc_child(parser->linalloc, sizeof(token_node_t)); in _glcpp_parser_evaluate_defined_in_list()
1761 replacement->token = _token_create_ival (parser, INTEGER, value); in _glcpp_parser_evaluate_defined_in_list()
1790 _glcpp_parser_expand_and_lex_from(glcpp_parser_t *parser, int head_token_type, in _glcpp_parser_expand_and_lex_from() argument
1796 expanded = _token_list_create (parser); in _glcpp_parser_expand_and_lex_from()
1797 token = _token_create_ival (parser, head_token_type, head_token_type); in _glcpp_parser_expand_and_lex_from()
1798 _token_list_append (parser, expanded, token); in _glcpp_parser_expand_and_lex_from()
1799 _glcpp_parser_expand_token_list (parser, list, mode); in _glcpp_parser_expand_and_lex_from()
1801 glcpp_parser_lex_from (parser, expanded); in _glcpp_parser_expand_and_lex_from()
1805 _glcpp_parser_apply_pastes(glcpp_parser_t *parser, token_list_t *list) in _glcpp_parser_apply_pastes() argument
1832 …yyerror(&node->token->location, parser, "'##' cannot appear at either end of a macro expansion\n"); in _glcpp_parser_apply_pastes()
1836 node->token = _token_paste(parser, node->token, next_non_space->token); in _glcpp_parser_apply_pastes()
1866 _glcpp_parser_expand_function(glcpp_parser_t *parser, token_node_t *node, in _glcpp_parser_expand_function() argument
1880 arguments = _argument_list_create(parser); in _glcpp_parser_expand_function()
1881 status = _arguments_parse(parser, arguments, node, last); in _glcpp_parser_expand_function()
1889 …glcpp_error(&node->token->location, parser, "Macro %s call has unbalanced parentheses\n", identifi… in _glcpp_parser_expand_function()
1895 return _token_list_create_with_one_space(parser); in _glcpp_parser_expand_function()
1903 glcpp_error(&node->token->location, parser, in _glcpp_parser_expand_function()
1911 substituted = _token_list_create(parser); in _glcpp_parser_expand_function()
1923 expanded_argument = _token_list_copy(parser, argument); in _glcpp_parser_expand_function()
1924 _glcpp_parser_expand_token_list(parser, expanded_argument, mode); in _glcpp_parser_expand_function()
1929 new_token = _token_create_ival(parser, PLACEHOLDER, in _glcpp_parser_expand_function()
1931 _token_list_append(parser, substituted, new_token); in _glcpp_parser_expand_function()
1934 _token_list_append(parser, substituted, node->token); in _glcpp_parser_expand_function()
1943 _glcpp_parser_apply_pastes(parser, substituted); in _glcpp_parser_expand_function()
1967 _glcpp_parser_expand_node(glcpp_parser_t *parser, token_node_t *node, in _glcpp_parser_expand_node() argument
1992 return _token_list_create_with_one_integer(parser, line); in _glcpp_parser_expand_node()
1995 return _token_list_create_with_one_integer(parser, in _glcpp_parser_expand_node()
2000 entry = _mesa_hash_table_search(parser->defines, identifier); in _glcpp_parser_expand_node()
2009 if (_parser_active_list_contains (parser, identifier)) { in _glcpp_parser_expand_node()
2016 str = linear_strdup(parser->linalloc, token->value.str); in _glcpp_parser_expand_node()
2017 final = _token_create_str(parser, token->type, str); in _glcpp_parser_expand_node()
2019 expansion = _token_list_create(parser); in _glcpp_parser_expand_node()
2020 _token_list_append(parser, expansion, final); in _glcpp_parser_expand_node()
2029 return _token_list_create_with_one_space(parser); in _glcpp_parser_expand_node()
2031 replacement = _token_list_copy(parser, macro->replacements); in _glcpp_parser_expand_node()
2044 token_t *new_token = _token_create_ival(parser, SPACE, SPACE); in _glcpp_parser_expand_node()
2045 _token_list_prepend(parser, replacement, new_token); in _glcpp_parser_expand_node()
2048 _glcpp_parser_apply_pastes(parser, replacement); in _glcpp_parser_expand_node()
2052 return _glcpp_parser_expand_function(parser, node, last, mode, macro); in _glcpp_parser_expand_node()
2055 /* Push a new identifier onto the parser's active list.
2063 _parser_active_list_push(glcpp_parser_t *parser, const char *identifier, in _parser_active_list_push() argument
2068 node = linear_alloc_child(parser->linalloc, sizeof(active_list_t)); in _parser_active_list_push()
2069 node->identifier = linear_strdup(parser->linalloc, identifier); in _parser_active_list_push()
2071 node->next = parser->active; in _parser_active_list_push()
2073 parser->active = node; in _parser_active_list_push()
2077 _parser_active_list_pop(glcpp_parser_t *parser) in _parser_active_list_pop() argument
2079 active_list_t *node = parser->active; in _parser_active_list_pop()
2082 parser->active = NULL; in _parser_active_list_pop()
2086 node = parser->active->next; in _parser_active_list_pop()
2087 parser->active = node; in _parser_active_list_pop()
2091 _parser_active_list_contains(glcpp_parser_t *parser, const char *identifier) in _parser_active_list_contains() argument
2095 if (parser->active == NULL) in _parser_active_list_contains()
2098 for (node = parser->active; node; node = node->next) in _parser_active_list_contains()
2127 _glcpp_parser_expand_token_list(glcpp_parser_t *parser, token_list_t *list, in _glcpp_parser_expand_token_list() argument
2133 active_list_t *active_initial = parser->active; in _glcpp_parser_expand_token_list()
2147 _glcpp_parser_evaluate_defined_in_list (parser, list); in _glcpp_parser_expand_token_list()
2151 while (parser->active && parser->active->marker == node) in _glcpp_parser_expand_token_list()
2152 _parser_active_list_pop (parser); in _glcpp_parser_expand_token_list()
2155 _glcpp_parser_expand_node(parser, node, node_prev, &last, mode, line); in _glcpp_parser_expand_token_list()
2160 _glcpp_parser_evaluate_defined_in_list (parser, expansion); in _glcpp_parser_expand_token_list()
2164 while (parser->active && parser->active->marker == n) { in _glcpp_parser_expand_token_list()
2165 _parser_active_list_pop (parser); in _glcpp_parser_expand_token_list()
2168 _parser_active_list_push(parser, node->token->value.str, last->next); in _glcpp_parser_expand_token_list()
2198 while (parser->active && parser->active != active_initial) in _glcpp_parser_expand_token_list()
2199 _parser_active_list_pop (parser); in _glcpp_parser_expand_token_list()
2205 _glcpp_parser_print_expanded_token_list(glcpp_parser_t *parser, in _glcpp_parser_print_expanded_token_list() argument
2211 _glcpp_parser_expand_token_list (parser, list, EXPANSION_MODE_IGNORE_DEFINED); in _glcpp_parser_print_expanded_token_list()
2215 _token_list_print (parser, list); in _glcpp_parser_print_expanded_token_list()
2219 _check_for_reserved_macro_name(glcpp_parser_t *parser, YYLTYPE *loc, in _check_for_reserved_macro_name() argument
2240 glcpp_warning(loc, parser, "Macro names containing \"__\" are reserved " in _check_for_reserved_macro_name()
2244 glcpp_error (loc, parser, "Macro names starting with \"GL_\" are reserved.\n"); in _check_for_reserved_macro_name()
2247 glcpp_error (loc, parser, "\"defined\" cannot be used as a macro name"); in _check_for_reserved_macro_name()
2266 _define_object_macro(glcpp_parser_t *parser, YYLTYPE *loc, in _define_object_macro() argument
2276 _check_for_reserved_macro_name(parser, loc, identifier); in _define_object_macro()
2278 macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); in _define_object_macro()
2282 macro->identifier = linear_strdup(parser->linalloc, identifier); in _define_object_macro()
2285 entry = _mesa_hash_table_search(parser->defines, identifier); in _define_object_macro()
2291 glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); in _define_object_macro()
2294 _mesa_hash_table_insert (parser->defines, identifier, macro); in _define_object_macro()
2298 _define_function_macro(glcpp_parser_t *parser, YYLTYPE *loc, in _define_function_macro() argument
2306 _check_for_reserved_macro_name(parser, loc, identifier); in _define_function_macro()
2310 glcpp_error (loc, parser, "Duplicate macro parameter \"%s\"", dup); in _define_function_macro()
2313 macro = linear_alloc_child(parser->linalloc, sizeof(macro_t)); in _define_function_macro()
2317 macro->identifier = linear_strdup(parser->linalloc, identifier); in _define_function_macro()
2320 entry = _mesa_hash_table_search(parser->defines, identifier); in _define_function_macro()
2326 glcpp_error (loc, parser, "Redefinition of macro %s\n", identifier); in _define_function_macro()
2329 _mesa_hash_table_insert(parser->defines, identifier, macro); in _define_function_macro()
2333 glcpp_parser_lex(YYSTYPE *yylval, YYLTYPE *yylloc, glcpp_parser_t *parser) in glcpp_parser_lex() argument
2338 if (parser->lex_from_list == NULL) { in glcpp_parser_lex()
2339 ret = glcpp_lex(yylval, yylloc, parser->scanner); in glcpp_parser_lex()
2353 if (parser->newline_as_space) { in glcpp_parser_lex()
2355 parser->paren_count++; in glcpp_parser_lex()
2357 parser->paren_count--; in glcpp_parser_lex()
2358 if (parser->paren_count == 0) in glcpp_parser_lex()
2359 parser->newline_as_space = 0; in glcpp_parser_lex()
2363 if (parser->paren_count == 0) in glcpp_parser_lex()
2364 parser->newline_as_space = 0; in glcpp_parser_lex()
2366 } else if (parser->in_control_line) { in glcpp_parser_lex()
2368 parser->in_control_line = 0; in glcpp_parser_lex()
2373 parser->in_control_line = 1; in glcpp_parser_lex()
2375 struct hash_entry *entry = _mesa_hash_table_search(parser->defines, in glcpp_parser_lex()
2379 parser->newline_as_space = 1; in glcpp_parser_lex()
2380 parser->paren_count = 0; in glcpp_parser_lex()
2387 node = parser->lex_from_node; in glcpp_parser_lex()
2390 parser->lex_from_list = NULL; in glcpp_parser_lex()
2397 parser->lex_from_node = node->next; in glcpp_parser_lex()
2403 glcpp_parser_lex_from(glcpp_parser_t *parser, token_list_t *list) in glcpp_parser_lex_from() argument
2407 assert (parser->lex_from_list == NULL); in glcpp_parser_lex_from()
2410 parser->lex_from_list = _token_list_create (parser); in glcpp_parser_lex_from()
2415 _token_list_append (parser, parser->lex_from_list, node->token); in glcpp_parser_lex_from()
2418 parser->lex_from_node = parser->lex_from_list->head; in glcpp_parser_lex_from()
2421 if (parser->lex_from_node == NULL) { in glcpp_parser_lex_from()
2422 parser->lex_from_list = NULL; in glcpp_parser_lex_from()
2427 _glcpp_parser_skip_stack_push_if(glcpp_parser_t *parser, YYLTYPE *loc, in _glcpp_parser_skip_stack_push_if() argument
2433 if (parser->skip_stack) in _glcpp_parser_skip_stack_push_if()
2434 current = parser->skip_stack->type; in _glcpp_parser_skip_stack_push_if()
2436 node = linear_alloc_child(parser->linalloc, sizeof(skip_node_t)); in _glcpp_parser_skip_stack_push_if()
2449 node->next = parser->skip_stack; in _glcpp_parser_skip_stack_push_if()
2450 parser->skip_stack = node; in _glcpp_parser_skip_stack_push_if()
2454 _glcpp_parser_skip_stack_change_if(glcpp_parser_t *parser, YYLTYPE *loc, in _glcpp_parser_skip_stack_change_if() argument
2457 if (parser->skip_stack == NULL) { in _glcpp_parser_skip_stack_change_if()
2458 glcpp_error (loc, parser, "#%s without #if\n", type); in _glcpp_parser_skip_stack_change_if()
2462 if (parser->skip_stack->type == SKIP_TO_ELSE) { in _glcpp_parser_skip_stack_change_if()
2464 parser->skip_stack->type = SKIP_NO_SKIP; in _glcpp_parser_skip_stack_change_if()
2466 parser->skip_stack->type = SKIP_TO_ENDIF; in _glcpp_parser_skip_stack_change_if()
2471 _glcpp_parser_skip_stack_pop(glcpp_parser_t *parser, YYLTYPE *loc) in _glcpp_parser_skip_stack_pop() argument
2475 if (parser->skip_stack == NULL) { in _glcpp_parser_skip_stack_pop()
2476 glcpp_error (loc, parser, "#endif without #if\n"); in _glcpp_parser_skip_stack_pop()
2480 node = parser->skip_stack; in _glcpp_parser_skip_stack_pop()
2481 parser->skip_stack = node->next; in _glcpp_parser_skip_stack_pop()
2485 _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t version, in _glcpp_parser_handle_version_declaration() argument
2489 if (parser->version_set) in _glcpp_parser_handle_version_declaration()
2492 parser->version = version; in _glcpp_parser_handle_version_declaration()
2493 parser->version_set = true; in _glcpp_parser_handle_version_declaration()
2495 add_builtin_define (parser, "__VERSION__", version); in _glcpp_parser_handle_version_declaration()
2497 parser->is_gles = (version == 100) || in _glcpp_parser_handle_version_declaration()
2503 if (parser->is_gles) in _glcpp_parser_handle_version_declaration()
2504 add_builtin_define(parser, "GL_ES", 1); in _glcpp_parser_handle_version_declaration()
2506 add_builtin_define(parser, "GL_compatibility_profile", 1); in _glcpp_parser_handle_version_declaration()
2508 add_builtin_define(parser, "GL_core_profile", 1); in _glcpp_parser_handle_version_declaration()
2515 if (version >= 130 || parser->is_gles) in _glcpp_parser_handle_version_declaration()
2516 add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1); in _glcpp_parser_handle_version_declaration()
2519 if (parser->extensions) in _glcpp_parser_handle_version_declaration()
2520 parser->extensions(parser->state, add_builtin_define, parser, in _glcpp_parser_handle_version_declaration()
2521 version, parser->is_gles); in _glcpp_parser_handle_version_declaration()
2523 if (parser->extension_list) { in _glcpp_parser_handle_version_declaration()
2528 if (parser->extension_list->MESA_shader_integer_functions) { in _glcpp_parser_handle_version_declaration()
2529 add_builtin_define(parser, "__have_builtin_builtin_udiv64", 1); in _glcpp_parser_handle_version_declaration()
2530 add_builtin_define(parser, "__have_builtin_builtin_umod64", 1); in _glcpp_parser_handle_version_declaration()
2531 add_builtin_define(parser, "__have_builtin_builtin_idiv64", 1); in _glcpp_parser_handle_version_declaration()
2532 add_builtin_define(parser, "__have_builtin_builtin_imod64", 1); in _glcpp_parser_handle_version_declaration()
2537 _mesa_string_buffer_printf(parser->output, in _glcpp_parser_handle_version_declaration()
2551 glcpp_parser_resolve_implicit_version(glcpp_parser_t *parser) in glcpp_parser_resolve_implicit_version() argument
2553 int language_version = parser->api == API_OPENGLES2 ? in glcpp_parser_resolve_implicit_version()
2556 _glcpp_parser_handle_version_declaration(parser, language_version, in glcpp_parser_resolve_implicit_version()
2567 if (di->parser->error) in glcpp_parser_copy_defines()
2571 struct hash_entry *entry = _mesa_hash_table_search(di->parser->defines, in glcpp_parser_copy_defines()
2579 glcpp_error(di->loc, di->parser, "Redefinition of macro %s\n", in glcpp_parser_copy_defines()
2583 _mesa_hash_table_insert(di->parser->defines, identifier, macro); in glcpp_parser_copy_defines()