about summary refs log tree commit diff
path: root/src/bootstrap/codegen.pry
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootstrap/codegen.pry')
-rw-r--r--src/bootstrap/codegen.pry20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/bootstrap/codegen.pry b/src/bootstrap/codegen.pry
index 99324fb..5f63038 100644
--- a/src/bootstrap/codegen.pry
+++ b/src/bootstrap/codegen.pry
@@ -1127,6 +1127,18 @@ let codegen_generate_function_call_statement = (c: *codegen, statement: *Node) =
 	return codegen_create_variable(c, v);
 };
 
+let codegen_generate_break_statement = (c: *codegen) => i64 {
+	assert((*c).whil_loop_exit != cast(LLVMBasicBlockRef, null));
+	LLVMBuildBr((*c).builder, (*c).whil_loop_exit);
+	return 0;
+};
+
+let codegen_generate_continue_statement = (c: *codegen) => i64 {
+	assert((*c).whil_block != cast(LLVMBasicBlockRef, null));
+	LLVMBuildBr((*c).builder, (*c).whil_block);
+	return 0;
+};
+
 let codegen_generate_if_statement = (c: *codegen, statement: *NODE_IF_STATEMENT_DATA) => *void {
 	let condition_value = codegen_generate_expression_value(c, (*statement).condition, cast(*i8, null));
 	assert(condition_value != cast(*Variable, null));
@@ -1230,6 +1242,14 @@ let codegen_generate_statement = (c: *codegen, statement: *Node) => i64 {
 		return codegen_generate_import_declaration(c, cast(*NODE_IMPORT_DECLARATION_DATA, stmt.data));
 	};
 
+	if stmt.type == NODE_CONTINUE_STATEMENT {
+		return codegen_generate_continue_statement(c);
+	};
+
+	if stmt.type == NODE_BREAK_STATEMENT {
+		return codegen_generate_break_statement(c);
+	};
+
 	printf("ASSERT 3 %d\n", stmt.type);
 	assert(false);