From a030b60aebaf6b0e0c07fd5faa1e132ff7e55bbc Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 24 Dec 2015 14:37:43 -0700 Subject: add while loop --- src/analyze.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/analyze.cpp') diff --git a/src/analyze.cpp b/src/analyze.cpp index 41ce9d49c0..bd9eaa7f2d 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -54,6 +54,7 @@ static AstNode *first_executing_node(AstNode *node) { case NodeTypeStructField: case NodeTypeStructValueExpr: case NodeTypeStructValueField: + case NodeTypeWhileExpr: return node; } zig_panic("unreachable"); @@ -526,6 +527,7 @@ static void preview_function_declarations(CodeGen *g, ImportTableEntry *import, case NodeTypeCastExpr: case NodeTypePrefixOpExpr: case NodeTypeIfExpr: + case NodeTypeWhileExpr: case NodeTypeLabel: case NodeTypeGoto: case NodeTypeAsmExpr: @@ -593,6 +595,7 @@ static void preview_types(CodeGen *g, ImportTableEntry *import, AstNode *node) { case NodeTypeCastExpr: case NodeTypePrefixOpExpr: case NodeTypeIfExpr: + case NodeTypeWhileExpr: case NodeTypeLabel: case NodeTypeGoto: case NodeTypeAsmExpr: @@ -1349,6 +1352,14 @@ static TypeTableEntry *analyze_struct_val_expr(CodeGen *g, ImportTableEntry *imp return type_entry; } +static TypeTableEntry *analyze_while_expr(CodeGen *g, ImportTableEntry *import, BlockContext *context, + TypeTableEntry *expected_type, AstNode *node) +{ + analyze_expression(g, import, context, g->builtin_types.entry_bool, node->data.while_expr.condition); + analyze_expression(g, import, context, g->builtin_types.entry_void, node->data.while_expr.body); + return g->builtin_types.entry_void; +} + static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, BlockContext *context, TypeTableEntry *expected_type, AstNode *node) { @@ -1625,6 +1636,9 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, } break; } + case NodeTypeWhileExpr: + return_type = analyze_while_expr(g, import, context, expected_type, node); + break; case NodeTypeStructValueExpr: return_type = analyze_struct_val_expr(g, import, context, expected_type, node); break; @@ -1775,6 +1789,7 @@ static void analyze_top_level_declaration(CodeGen *g, ImportTableEntry *import, case NodeTypeCastExpr: case NodeTypePrefixOpExpr: case NodeTypeIfExpr: + case NodeTypeWhileExpr: case NodeTypeLabel: case NodeTypeGoto: case NodeTypeAsmExpr: -- cgit v1.2.3