Track the function that is currently being defined
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 20 Mar 2010 00:08:05 +0000 (17:08 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 20 Mar 2010 00:08:05 +0000 (17:08 -0700)
Later this will allow type checking for return statements.

ast_to_hir.cpp
glsl_parser_extras.h

index 79d32165a19ed680299b12b671866b7b86f1e440..be1a8deb938ab6b7e762ce98a4119c59c91041e9 100644 (file)
@@ -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.
     */
index b3b3f868b1635745700577ee9f04246a45d20eb5..dbe7c17302a61775dae790137eff93f9b6f03a61 100644 (file)
@@ -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;
 };