summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-03-23 12:19:13 -0700
committerIan Romanick <ian.d.romanick@intel.com>2010-03-23 12:19:13 -0700
commite39cc69fa3cb830b803fe0c4f6c30915aa886b5b (patch)
tree8c45e792ee3afbcd088e287932f3dc7a86366c19
parent7563b50075975a3a6b32de64ecb240398d421a55 (diff)
Set, and require, a return type for function signatures
-rw-r--r--ast_to_hir.cpp9
-rw-r--r--ir.cpp4
-rw-r--r--ir.h2
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
diff --git a/ir.cpp b/ir.cpp
index 5aec70bfce..4f7ea1bf1a 100644
--- a/ir.cpp
+++ b/ir.cpp
@@ -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 */
}
diff --git a/ir.h b/ir.h
index ab598ee0b0..618f2a655a 100644
--- a/ir.h
+++ b/ir.h
@@ -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)
{