fix the statement moming

This commit is contained in:
Torsten Ruger 2018-11-02 17:27:46 -07:00
parent 4ff84133d2
commit fb6a1a0e01
4 changed files with 16 additions and 6 deletions

View File

@ -87,6 +87,8 @@ module RubyX
@vool = ruby_tree.to_vool @vool = ruby_tree.to_vool
return @vool return @vool
end end
# TODO: should check if this works with reopening classes
# or whether we need to unify the vool for a class
unless(@vool.is_a?(Vool::ScopeStatement)) unless(@vool.is_a?(Vool::ScopeStatement))
@vool = Vool::ScopeStatement.new([@vool]) @vool = Vool::ScopeStatement.new([@vool])
end end

View File

@ -31,15 +31,19 @@ module Vool
@statements = [o] + @statements @statements = [o] + @statements
end end
# create mom instructions # to_mom all the statements. Append subsequent ones to the first, and return the
# first.
#
# For ClassStatements this creates and returns a MomCompiler
#
def to_mom( compiler ) def to_mom( compiler )
raise "Empty list ? #{statements.length}" if empty? raise "Empty list ? #{statements.length}" if empty?
stats = @statements.dup stats = @statements.dup
flat = stats.shift.to_mom(compiler) first = stats.shift.to_mom(compiler)
while( nekst = stats.shift ) while( nekst = stats.shift )
flat.append nekst.to_mom(compiler) first.append nekst.to_mom(compiler)
end end
flat first
end end
def each(&block) def each(&block)

View File

@ -16,5 +16,8 @@ module RubyX
def test_method def test_method
assert_equal :main , @linker.assemblers.first.callable.name assert_equal :main , @linker.assemblers.first.callable.name
end end
def test_asm_len
assert_equal 23 , @linker.assemblers.length
end
end end
end end

View File

@ -28,8 +28,9 @@ module RubyX
compiler = RubyXCompiler.new compiler = RubyXCompiler.new
compiler.ruby_to_vool(space_source_for("main")) compiler.ruby_to_vool(space_source_for("main"))
compiler.ruby_to_vool(space_source_for("twain")) compiler.ruby_to_vool(space_source_for("twain"))
# linker = compiler.to_binary(:interpreter) linker = compiler.to_binary(:interpreter)
# assert_equal Vool::ScopeStatement , linker.class assert_equal Risc::Linker , linker.class
assert_equal 24 , linker.assemblers.length
end end
end end
end end