diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-19 17:08:05 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-19 17:08:05 -0700 |
commit | 41ec6a47ab81620bab9182f987e4bc4780e3a6ab (patch) | |
tree | cfff670b50211e1bf9f5fa4a8d273c63d553934f | |
parent | 16a246c049fa3c8d7841f87c8defdd0f26f302ee (diff) |
Track the function that is currently being defined
Later this will allow type checking for return statements.
-rw-r--r-- | ast_to_hir.cpp | 7 | ||||
-rw-r--r-- | glsl_parser_extras.h | 8 |
2 files changed, 15 insertions, 0 deletions
diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index 79d32165a1..be1a8deb93 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 b3b3f868b1..dbe7c17302 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; }; |