Add ir_call call to represent function calls.
This commit is contained in:
@@ -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
10
ir.cpp
@@ -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
30
ir.h
@@ -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;
|
||||
|
@@ -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");
|
||||
}
|
||||
|
@@ -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 *);
|
||||
/*@}*/
|
||||
};
|
||||
|
||||
|
@@ -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;
|
||||
/*@}*/
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user