diff options
author | Ian Romanick <[email protected]> | 2010-03-10 13:26:52 -0800 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-03-10 13:26:52 -0800 |
commit | 7cfddf19413ef61fcf1450bd61e9ece4cf1735a4 (patch) | |
tree | 06b923d30e32acb0a7e071df8c858103b0f2342a | |
parent | d10fe19495191072d39689337700b69e62252bf1 (diff) |
Make ast_function_expression subclass of ast_expression
-rw-r--r-- | ast.h | 17 | ||||
-rw-r--r-- | ast_to_hir.cpp | 35 | ||||
-rw-r--r-- | glsl_parser.ypp | 4 |
3 files changed, 39 insertions, 17 deletions
@@ -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 1379ec98013..3c4b69fdc24 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 debbcea9366..2f337b127c5 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); } ; |