From 3821761e45c455374c9fdb4cd02104f420373360 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 10 Mar 2010 14:12:22 -0800 Subject: [PATCH] Differentiate in ast_function_expression between constructors and func. calls --- ast.h | 25 ++++++++++++++++++++++--- glsl_parser.ypp | 11 +++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/ast.h b/ast.h index ad614e98fe6..d82325747c2 100644 --- a/ast.h +++ b/ast.h @@ -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 2f337b127c5..058a03231da 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); } ; -- 2.30.2