Initial bits for converting AST return nodes to IR return instructions

This commit is contained in:
Ian Romanick
2010-03-19 16:45:19 -07:00
parent 9578c87ce2
commit 16a246c049
2 changed files with 40 additions and 0 deletions

View File

@@ -1120,3 +1120,40 @@ ast_function_definition::hir(exec_list *instructions,
*/
return NULL;
}
ir_instruction *
ast_jump_statement::hir(exec_list *instructions,
struct _mesa_glsl_parse_state *state)
{
if (mode == ast_return) {
ir_return *inst;
if (opt_return_value) {
/* FINISHME: Make sure the enclosing function has a non-void return
* FINISHME: type.
*/
ir_expression *const ret = (ir_expression *)
opt_return_value->hir(instructions, state);
assert(ret != NULL);
/* FINISHME: Make sure the type of the return value matches the return
* FINISHME: type of the enclosing function.
*/
inst = new ir_return(ret);
} else {
/* FINISHME: Make sure the enclosing function has a void return type.
*/
inst = new ir_return;
}
instructions->push_tail(inst);
}
/* Jump instructions do not have r-values.
*/
return NULL;
}