summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-03-10 13:26:52 -0800
committerIan Romanick <ian.d.romanick@intel.com>2010-03-10 13:26:52 -0800
commit7cfddf19413ef61fcf1450bd61e9ece4cf1735a4 (patch)
tree06b923d30e32acb0a7e071df8c858103b0f2342a
parentd10fe19495191072d39689337700b69e62252bf1 (diff)
Make ast_function_expression subclass of ast_expression
-rw-r--r--ast.h17
-rw-r--r--ast_to_hir.cpp35
-rw-r--r--glsl_parser.ypp4
3 files changed, 39 insertions, 17 deletions
diff --git a/ast.h b/ast.h
index 3eb8e5f20f..cd5bf6b3f5 100644
--- a/ast.h
+++ b/ast.h
@@ -192,6 +192,23 @@ public:
virtual void print(void) const;
};
+/**
+ * Subclass of expressions for function calls
+ */
+class ast_function_expression : public ast_expression {
+public:
+ ast_function_expression(ast_node *callee)
+ : ast_expression(ast_function_call, (ast_expression *) callee,
+ NULL, NULL)
+ {
+ /* empty */
+ }
+
+
+ virtual ir_instruction *hir(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state);
+};
+
/**
* Number of possible operators for an ast_expression
diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp
index 1379ec9801..3c4b69fdc2 100644
--- a/ast_to_hir.cpp
+++ b/ast_to_hir.cpp
@@ -630,21 +630,10 @@ ast_expression::hir(exec_list *instructions,
break;
case ast_function_call:
- /* There are three sorts of function calls.
- *
- * 1. contstructors - The first subexpression is an ast_type_specifier.
- * 2. methods - Only the .length() method of array types.
- * 3. functions - Calls to regular old functions.
- *
- * Method calls are actually detected when the ast_field_selection
- * expression is handled.
+ /* Should *NEVER* get here. ast_function_call should always be handled
+ * by ast_function_expression::hir.
*/
-#if 0
- result = _mesa_ast_function_call_to_hir(this->subexpressions[0],
- this->subexpressions[1],
- state);
- type = result->type;
-#endif
+ assert(0);
break;
case ast_identifier: {
@@ -722,6 +711,24 @@ ast_expression::hir(exec_list *instructions,
ir_instruction *
+ast_function_expression::hir(exec_list *instructions,
+ struct _mesa_glsl_parse_state *state)
+{
+ /* There are three sorts of function calls.
+ *
+ * 1. contstructors - The first subexpression is an ast_type_specifier.
+ * 2. methods - Only the .length() method of array types.
+ * 3. functions - Calls to regular old functions.
+ *
+ * Method calls are actually detected when the ast_field_selection
+ * expression is handled.
+ */
+ (void) instructions;
+ (void) state;
+ return NULL;
+}
+
+ir_instruction *
ast_expression_statement::hir(exec_list *instructions,
struct _mesa_glsl_parse_state *state)
{
diff --git a/glsl_parser.ypp b/glsl_parser.ypp
index debbcea936..2f337b127c 100644
--- a/glsl_parser.ypp
+++ b/glsl_parser.ypp
@@ -338,9 +338,7 @@ function_call_header_with_parameters:
function_call_header:
function_identifier '('
{
- $$ = new ast_expression(ast_function_call,
- (struct ast_expression *) $1,
- NULL, NULL);
+ $$ = new ast_function_expression($1);
}
;