summaryrefslogtreecommitdiff
path: root/ast_to_hir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ast_to_hir.cpp')
-rw-r--r--ast_to_hir.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/ast_to_hir.cpp b/ast_to_hir.cpp
index 63f0c82d3d..79d32165a1 100644
--- a/ast_to_hir.cpp
+++ b/ast_to_hir.cpp
@@ -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;
+}