From 41ec6a47ab81620bab9182f987e4bc4780e3a6ab Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 19 Mar 2010 17:08:05 -0700 Subject: [PATCH] Track the function that is currently being defined Later this will allow type checking for return statements. --- ast_to_hir.cpp | 7 +++++++ glsl_parser_extras.h | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 79d3216..be1a8de 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 b3b3f86..dbe7c17 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; }; -- 2.7.4