start on collector for local variables

This commit is contained in:
Torsten Ruger 2016-12-21 11:20:36 +02:00
parent 8b05951883
commit 9ec9ccb9b6
4 changed files with 61 additions and 0 deletions

View File

@ -1,6 +1,7 @@
require_relative "compiler/total_processor"
require_relative "compiler/type_collector"
require_relative "compiler/method_collector"
require_relative "compiler/locals_collector"
require_relative "compiler/ruby_method"

View File

@ -0,0 +1,24 @@
module Melon
class LocalsCollector < TotalProcessor
def initialize
@locals = {}
end
def collect(statement)
process statement
@locals
end
def on_lvasgn statement
add_local( statement )
end
def add_local(statement)
var = statement.children[0]
@locals[var] = :Object #guess, can maybe guess better
end
end
end

View File

@ -1,2 +1,3 @@
require_relative "test_type_collector"
require_relative "test_method_collector"
require_relative "test_locals_collector"

View File

@ -0,0 +1,35 @@
require_relative "helper"
module Melon
class TestLocalsCollector < MiniTest::Test
def setup
Register.machine.boot unless Register.machine.booted
end
def parse_collect( input )
ast = Parser::Ruby22.parse input
LocalsCollector.new.collect(ast)
end
def test_no_locals
locals = parse_collect "def meth; end"
assert locals.empty?
end
def test_method_is_not_local
locals = parse_collect("def meth2(arg1); foo ;end")
assert locals.empty?
end
def test_local_assign_one
locals = parse_collect("def meth2(arg1); foo = bar ;end")
assert locals[:foo] , locals.inspect
end
def test_local_assign_two
locals = parse_collect("def meth2(arg1); foo = bar ; groove = 1 + 2 ;end")
assert locals.length == 2 , locals.inspect
end
end
end