Add ir_call call to represent function calls.

This commit is contained in:
Ian Romanick
2010-03-11 14:34:27 -08:00
parent d27ec2461b
commit ed45ec6a51
6 changed files with 52 additions and 2 deletions

View File

@@ -725,7 +725,7 @@ ast_function_expression::hir(exec_list *instructions,
*/
(void) instructions;
(void) state;
return NULL;
return ir_call::get_error_instruction();
}
ir_instruction *

10
ir.cpp
View File

@@ -108,3 +108,13 @@ ir_function::ir_function(void)
{
/* empty */
}
ir_call *
ir_call::get_error_instruction()
{
ir_call *call = new ir_call;
call->type = glsl_error_type;
return call;
}

30
ir.h
View File

@@ -39,7 +39,8 @@ enum ir_opcodes {
ir_op_label,
ir_op_constant,
ir_op_func_sig,
ir_op_func
ir_op_func,
ir_op_call,
};
/**
@@ -277,6 +278,33 @@ public:
};
/**
* IR instruction representing a function call
*/
class ir_call : public ir_instruction {
public:
ir_call()
: ir_instruction(ir_op_call), callee(NULL)
{
/* empty */
}
virtual void accept(ir_visitor *v)
{
v->visit(this);
}
/**
* Get a generic ir_call object when an error occurs
*/
static ir_call *get_error_instruction();
private:
ir_function_signature *callee;
exec_list actual_parameters;
};
struct ir_swizzle_mask {
unsigned x:2;
unsigned y:2;

View File

@@ -132,3 +132,13 @@ void ir_print_visitor::visit(ir_constant *ir)
printf(" (FINISHME: value goes here)\n");
printf(")\n");
}
void
ir_print_visitor::visit(ir_call *ir)
{
(void) ir;
printf("(call FINISHME: function name here\n");
printf(" (FINISHME: function paramaters here))\n");
}

View File

@@ -60,6 +60,7 @@ public:
virtual void visit(ir_dereference *);
virtual void visit(ir_assignment *);
virtual void visit(ir_constant *);
virtual void visit(ir_call *);
/*@}*/
};

View File

@@ -52,6 +52,7 @@ public:
virtual void visit(class ir_dereference *) = 0;
virtual void visit(class ir_assignment *) = 0;
virtual void visit(class ir_constant *) = 0;
virtual void visit(class ir_call *) = 0;
/*@}*/
};