parent
d09f24248e
commit
a993e409a5
@ -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
|
@ -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
|
Loading…
Reference in new issue