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
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: {
}
+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)
function_call_header:
function_identifier '('
{
- $$ = new ast_expression(ast_function_call,
- (struct ast_expression *) $1,
- NULL, NULL);
+ $$ = new ast_function_expression($1);
}
;