From: Ian Romanick Date: Sat, 20 Mar 2010 00:08:05 +0000 (-0700) Subject: Track the function that is currently being defined X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=41ec6a47ab81620bab9182f987e4bc4780e3a6ab;p=mesa.git Track the function that is currently being defined Later this will allow type checking for return statements. --- diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 79d32165a19..be1a8deb938 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -63,6 +63,8 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state) _mesa_glsl_initialize_variables(instructions, state); + state->current_function = NULL; + foreach (ptr, & state->translation_unit) { ((ast_node *)ptr)->hir(instructions, state); } @@ -1070,6 +1072,9 @@ ast_function_definition::hir(exec_list *instructions, } + assert(state->current_function == NULL); + state->current_function = signature; + ast_function_parameters_to_hir(& this->prototype->parameters, & signature->parameters, state); @@ -1115,6 +1120,8 @@ ast_function_definition::hir(exec_list *instructions, state->symbols->pop_scope(); + assert(state->current_function == signature); + state->current_function = NULL; /* Function definitions do not have r-values. */ diff --git a/glsl_parser_extras.h b/glsl_parser_extras.h index b3b3f868b16..dbe7c17302a 100644 --- a/glsl_parser_extras.h +++ b/glsl_parser_extras.h @@ -43,6 +43,14 @@ struct _mesa_glsl_parse_state { unsigned language_version; enum _mesa_glsl_parser_targets target; + /** + * During AST to IR conversion, pointer to current IR function + * + * Will be \c NULL whenever the AST to IR conversion is not inside a + * function definition. + */ + class ir_function_signature *current_function; + /** Was there an error during compilation? */ bool error; };