*/
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;
};
// 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);
}
;