X-Git-Url: https://git.ayoreis.com/zlox.git/blobdiff_plain/d85b42d6b5cfa46cdc86c4f8abaa4423a122fe06..60ca4a9e7c56ac47f67add12ec7d2edf5bd89e5a:/src/Environment.zig?ds=inline diff --git a/src/Environment.zig b/src/Environment.zig index 40a396a..8cc7e2b 100644 --- a/src/Environment.zig +++ b/src/Environment.zig @@ -2,12 +2,12 @@ const std = @import("std"); const StringHashMapUnmanaged = std.StringHashMapUnmanaged; const Allocator = std.mem.Allocator; const Token = @import("Token.zig"); -const Literal = Token.Literal; +const Object = @import("object.zig").Object; const Environment = @This(); const ErrorPayload = @import("Interpreter.zig").ErrorPayload; enclosing: ?*Environment, -values: StringHashMapUnmanaged(Literal) = .empty, +values: StringHashMapUnmanaged(Object) = .empty, pub fn init(enclosing: ?*Environment) Environment { return .{ @@ -15,22 +15,22 @@ pub fn init(enclosing: ?*Environment) Environment { }; } -pub fn define(self: *Environment, allocator: Allocator, name: []const u8, value: Literal) !void { +pub fn define(self: *Environment, allocator: Allocator, name: []const u8, value: Object) !void { try self.values.put(allocator, name, value); } -pub fn get(self: *Environment, allocator: Allocator, name: Token, err_payload: *ErrorPayload) !Literal { +pub fn get(self: *Environment, allocator: Allocator, name: Token, err_payload: *ErrorPayload) !Object { if (self.values.contains(name.lexeme)) { return self.values.get(name.lexeme).?; } if (self.enclosing) |enclosing| return enclosing.get(allocator, name, err_payload); - err_payload.* = .{ .token = name, .message = try std.fmt.allocPrint(allocator, "Undefined variable '{s}'.", .{name.lexeme}) }; + err_payload.* = .{ .runtime_error = .init(name, try std.fmt.allocPrint(allocator, "Undefined variable '{s}'.", .{name.lexeme})) }; return error.RuntimeError; } -pub fn assign(self: *Environment, allocator: Allocator, name: Token, value: Literal, err_payload: *ErrorPayload) !void { +pub fn assign(self: *Environment, allocator: Allocator, name: Token, value: Object, err_payload: *ErrorPayload) !void { if (self.values.contains(name.lexeme)) { try self.values.put(allocator, name.lexeme, value); return; @@ -41,6 +41,6 @@ pub fn assign(self: *Environment, allocator: Allocator, name: Token, value: Lite return; } - err_payload.* = .{ .token = name, .message = try std.fmt.allocPrint(allocator, "Undefined variable '{s}'.", .{name.lexeme}) }; + err_payload.* = .{ .runtime_error = .init(name, try std.fmt.allocPrint(allocator, "Undefined variable '{s}'.", .{name.lexeme})) }; return error.RuntimeError; }