Differentiate in ast_function_expression between constructors and func. calls

This commit is contained in:
Ian Romanick
2010-03-10 14:12:22 -08:00
parent 986b8f7982
commit 3821761e45
2 changed files with 27 additions and 9 deletions
+22 -3
View File
@@ -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;
};
+5 -6
View File
@@ -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);
}
;