From a993e409a590a2ad9a67a11a5e411876534383ed Mon Sep 17 00:00:00 2001 From: alpha Date: Tue, 9 Aug 2022 18:45:04 +0000 Subject: [PATCH] 8.3 FossilOrigin-Name: f181ea92bf9d0adda566afb9f62c7ef4fa313761377cd3cf888c83a0b14f5188 --- ruby/lib/lox/environment.rb | 17 +++++++++++++++++ ruby/test/lox/test_environment.rb | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 ruby/lib/lox/environment.rb create mode 100644 ruby/test/lox/test_environment.rb diff --git a/ruby/lib/lox/environment.rb b/ruby/lib/lox/environment.rb new file mode 100644 index 0000000..3f32be2 --- /dev/null +++ b/ruby/lib/lox/environment.rb @@ -0,0 +1,17 @@ +module Lox + class Environment + def initialize + @values = {} + end + + def define(name, value) + @values[name] = value + end + + def get(token) + name = token.lexeme + + @values.fetch(name) { raise RuntimeError.new(token, "Undefined variable '#{name}'.") } + end + end +end diff --git a/ruby/test/lox/test_environment.rb b/ruby/test/lox/test_environment.rb new file mode 100644 index 0000000..8079a17 --- /dev/null +++ b/ruby/test/lox/test_environment.rb @@ -0,0 +1,23 @@ +require_relative "../test_helper" + +require "lox/environment" +require "lox/error" +require "lox/token" + +class TestEnvironment < Lox::Test + def setup + @env = Lox::Environment.new + end + + def test_define + @env.define("name", "value") + + assert_equal "value", @env.get(Lox::Token.new(:IDENTIFIER, "name", "name", 0)) + end + + def test_get + assert_raises Lox::RuntimeError, "Undefined variable name 'name'." do + @env.get(Lox::Token.new(:IDENTIFIER, "name", "name", 0)) + end + end +end