diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-10 14:12:22 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-03-10 14:12:22 -0800 |
commit | 3821761e45c455374c9fdb4cd02104f420373360 (patch) | |
tree | 91ab3ac7676bbb21c78ddac6553a342d4fc36f0e | |
parent | 986b8f798272d3ae2898617c8fb089156a5941c0 (diff) |
Differentiate in ast_function_expression between constructors and func. calls
-rw-r--r-- | ast.h | 25 | ||||
-rw-r--r-- | glsl_parser.ypp | 11 |
2 files changed, 27 insertions, 9 deletions
@@ -198,16 +198,35 @@ public: */ class ast_function_expression : public ast_expression { public: - ast_function_expression(ast_node *callee) - : ast_expression(ast_function_call, (ast_expression *) callee, - NULL, NULL) + ast_function_expression(ast_expression *callee) + : ast_expression(ast_function_call, callee, + NULL, NULL), + cons(false) { /* empty */ } + ast_function_expression(class ast_type_specifier *type) + : ast_expression(ast_function_call, (ast_expression *) type, + NULL, NULL), + cons(true) + { + /* empty */ + } + + bool is_constructor() const + { + return cons; + } virtual ir_instruction *hir(exec_list *instructions, struct _mesa_glsl_parse_state *state); + +private: + /** + * Is this function call actually a constructor? + */ + bool cons; }; diff --git a/glsl_parser.ypp b/glsl_parser.ypp index 2f337b127c..058a03231d 100644 --- a/glsl_parser.ypp +++ b/glsl_parser.ypp @@ -337,23 +337,22 @@ function_call_header_with_parameters: // recognized through "type_specifier". function_call_header: function_identifier '(' - { - $$ = new ast_function_expression($1); - } ; function_identifier: type_specifier { - $$ = (struct ast_node *) $1; + $$ = new ast_function_expression($1); } | IDENTIFIER { - $$ = new ast_expression($1); + ast_expression *callee = new ast_expression($1); + $$ = new ast_function_expression(callee); } | FIELD_SELECTION { - $$ = new ast_expression($1); + ast_expression *callee = new ast_expression($1); + $$ = new ast_function_expression(callee); } ; |