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) instructions;
|
||||||
(void) state;
|
(void) state;
|
||||||
return NULL;
|
return ir_call::get_error_instruction();
|
||||||
}
|
}
|
||||||
|
|
||||||
ir_instruction *
|
ir_instruction *
|
||||||
|
10
ir.cpp
10
ir.cpp
@@ -108,3 +108,13 @@ ir_function::ir_function(void)
|
|||||||
{
|
{
|
||||||
/* empty */
|
/* 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_label,
|
||||||
ir_op_constant,
|
ir_op_constant,
|
||||||
ir_op_func_sig,
|
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 {
|
struct ir_swizzle_mask {
|
||||||
unsigned x:2;
|
unsigned x:2;
|
||||||
unsigned y:2;
|
unsigned y:2;
|
||||||
|
@@ -132,3 +132,13 @@ void ir_print_visitor::visit(ir_constant *ir)
|
|||||||
printf(" (FINISHME: value goes here)\n");
|
printf(" (FINISHME: value goes here)\n");
|
||||||
printf(")\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_dereference *);
|
||||||
virtual void visit(ir_assignment *);
|
virtual void visit(ir_assignment *);
|
||||||
virtual void visit(ir_constant *);
|
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_dereference *) = 0;
|
||||||
virtual void visit(class ir_assignment *) = 0;
|
virtual void visit(class ir_assignment *) = 0;
|
||||||
virtual void visit(class ir_constant *) = 0;
|
virtual void visit(class ir_constant *) = 0;
|
||||||
|
virtual void visit(class ir_call *) = 0;
|
||||||
/*@}*/
|
/*@}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user