diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-23 12:19:13 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-23 12:19:13 -0700 |
commit | e39cc69fa3cb830b803fe0c4f6c30915aa886b5b (patch) | |
tree | 8c45e792ee3afbcd088e287932f3dc7a86366c19 | |
parent | 7563b50075975a3a6b32de64ecb240398d421a55 (diff) |
Set, and require, a return type for function signatures
-rw-r--r-- | ast_to_hir.cpp | 9 | ||||
-rw-r--r-- | ir.cpp | 4 | ||||
-rw-r--r-- | ir.h | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp index be1a8deb93..feeb0d925d 100644 --- a/ast_to_hir.cpp +++ b/ast_to_hir.cpp @@ -1006,6 +1006,13 @@ ast_function_definition::hir(exec_list *instructions, ast_function_parameters_to_hir(& this->prototype->parameters, & parameters, state); + const char *return_type_name; + const glsl_type *return_type = + type_specifier_to_glsl_type(this->prototype->return_type->specifier, + & return_type_name, state); + + assert(return_type != NULL); + /* Verify that this function's signature either doesn't match a previously * seen signature for a function with the same name, or, if a match is found, @@ -1056,7 +1063,7 @@ ast_function_definition::hir(exec_list *instructions, /* Finish storing the information about this new function in its signature. */ if (signature == NULL) { - signature = new ir_function_signature(); + signature = new ir_function_signature(return_type); f->signatures.push_tail(signature); } else { /* Destroy all of the previous parameter information. The previous @@ -96,8 +96,8 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name) } -ir_function_signature::ir_function_signature(void) - : ir_instruction(ir_op_func_sig) +ir_function_signature::ir_function_signature(const glsl_type *return_type) + : ir_instruction(ir_op_func_sig), return_type(return_type), definition(NULL) { /* empty */ } @@ -126,7 +126,7 @@ public: /*@{*/ class ir_function_signature : public ir_instruction { public: - ir_function_signature(void); + ir_function_signature(const glsl_type *return_type); virtual void accept(ir_visitor *v) { |