From 613c419b5cf53b459f5117e4cb47037bd15d278a Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Thu, 18 Aug 2022 19:15:52 -0700 Subject: [PATCH] 11.5 --- ruby/test/lox/test_resolver.rb | 35 +++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/ruby/test/lox/test_resolver.rb b/ruby/test/lox/test_resolver.rb index 8d50cae..5509e86 100644 --- a/ruby/test/lox/test_resolver.rb +++ b/ruby/test/lox/test_resolver.rb @@ -7,13 +7,6 @@ require "lox/scanner" class TestResolver < Lox::Test - def setup - @ast_printer = Lox::AstPrinter.new - @scanner = Lox::Scanner.new - @interpreter = Interpreter.new - @resolver = Lox::Resolver.new(@interpreter) - end - def test_resolver assert_resolved [ ["(var j)", 0], @@ -47,17 +40,37 @@ class TestResolver < Lox::Test SRC end + def test_same_var_name_in_scope + assert_raises Lox::ResolverError do + resolve(<<~SRC) + fun bad() { + var a = "first"; + var a = "second"; + } + SRC + end + end + private def assert_resolved(expected, src) - stmts = Lox::Parser.new(@scanner.scan(src)).parse! - @resolver.resolve(*stmts); + resolves = resolve(src) - assert_equal expected, @interpreter.resolves.map {|expr, depth| - [@ast_printer.print(expr), depth] + ast_printer = Lox::AstPrinter.new + assert_equal expected, resolves.map {|expr, depth| + [ast_printer.print(expr), depth] } end + def resolve(src) + stmts = Lox::Parser.new(Lox::Scanner.new.scan(src)).parse! + + interpreter = Interpreter.new + Lox::Resolver.new(interpreter).resolve(*stmts) + + interpreter.resolves + end + class Interpreter attr_reader :resolves