From: Ian Romanick Date: Wed, 10 Mar 2010 21:26:52 +0000 (-0800) Subject: Make ast_function_expression subclass of ast_expression X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7cfddf19413ef61fcf1450bd61e9ece4cf1735a4;p=mesa.git Make ast_function_expression subclass of ast_expression --- diff --git a/ast.h b/ast.h index 3eb8e5f20fd..cd5bf6b3f5f 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 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: { @@ -721,6 +710,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); } ;