From 5d8efd657f6187a536d16109465fa0e41d982c12 Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 28 Sep 2019 22:48:59 -0300 Subject: [PATCH] analysis: add analysis of Assign expressions --- examples/hello.ry | 3 ++- src/analysis.zig | 13 ++++++++++--- src/codegen.zig | 2 ++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/examples/hello.ry b/examples/hello.ry index 8854e81..3b05145 100644 --- a/examples/hello.ry +++ b/examples/hello.ry @@ -1,6 +1,7 @@ fn f() i32 { var a = 3; - return a; + a = 2; + return a + 23; } fn f2() i32 { diff --git a/src/analysis.zig b/src/analysis.zig index 6c81554..68792fe 100644 --- a/src/analysis.zig +++ b/src/analysis.zig @@ -339,10 +339,17 @@ pub const TypeSolver = struct { } }, - else => { - std.debug.warn("TODO resolve expr {}\n", ast.ExprType(expr.*)); - unreachable; + .Assign => |assign| { + var var_type = ctx.current_scope.?.env.get( + assign.name.lexeme, + ).?.value; + + var value_type = try self.resolveExprType(ctx, assign.value); + try self.expectSymUnTypeEqual(var_type, value_type); + return var_type; }, + + .Set => @panic("TODO analysis of Set exprs"), } } diff --git a/src/codegen.zig b/src/codegen.zig index 74d5081..ccf191f 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -220,6 +220,8 @@ pub const Codegen = struct { // we will also need to repeat the step for the type resolver //var typ = self.findCurrent(assign.name); + @panic("TODO finish Assign emitting"); + var assign_expr = try self.emitExpr(builder, assign.value); // TODO rm null