Initial bits for converting AST return nodes to IR return instructions
This commit is contained in:
3
ast.h
3
ast.h
@@ -531,6 +531,9 @@ public:
|
||||
ast_jump_statement(int mode, ast_expression *return_value);
|
||||
virtual void print(void) const;
|
||||
|
||||
virtual ir_instruction *hir(exec_list *instructions,
|
||||
struct _mesa_glsl_parse_state *state);
|
||||
|
||||
enum ast_jump_modes {
|
||||
ast_continue,
|
||||
ast_break,
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user