start on collector for local variables
This commit is contained in:
parent
8b05951883
commit
9ec9ccb9b6
@ -1,6 +1,7 @@
|
|||||||
require_relative "compiler/total_processor"
|
require_relative "compiler/total_processor"
|
||||||
require_relative "compiler/type_collector"
|
require_relative "compiler/type_collector"
|
||||||
require_relative "compiler/method_collector"
|
require_relative "compiler/method_collector"
|
||||||
|
require_relative "compiler/locals_collector"
|
||||||
require_relative "compiler/ruby_method"
|
require_relative "compiler/ruby_method"
|
||||||
|
|
||||||
|
|
||||||
|
24
lib/melon/compiler/locals_collector.rb
Normal file
24
lib/melon/compiler/locals_collector.rb
Normal 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
|
@ -1,2 +1,3 @@
|
|||||||
require_relative "test_type_collector"
|
require_relative "test_type_collector"
|
||||||
require_relative "test_method_collector"
|
require_relative "test_method_collector"
|
||||||
|
require_relative "test_locals_collector"
|
||||||
|
35
test/melon/compiler/test_locals_collector.rb
Normal file
35
test/melon/compiler/test_locals_collector.rb
Normal 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
|
Loading…
x
Reference in New Issue
Block a user