several larger changes came together, bit of cleaning too
- all code must be in functions (which must be in classes). — changes a fair few tests — also changes api, as method is not recursive, not passed around - all state in instance vars in compiler (no accessors) - class is another such variable, surely more coming all green again
This commit is contained in:
@ -3,14 +3,21 @@ require_relative "helper"
|
||||
class AddTest < MiniTest::Test
|
||||
include AST::Sexp
|
||||
include Ticker
|
||||
|
||||
|
||||
def setup
|
||||
Virtual.machine.boot
|
||||
code = s(:call,
|
||||
s(:name, :plus),
|
||||
s(:arguments , s(:int , 5)),
|
||||
s(:receiver, s(:int, 2)))
|
||||
Bosl::Compiler.compile( code , Virtual.machine.space.get_main )
|
||||
code = s(:class, :Object,
|
||||
s(:derives, nil),
|
||||
s(:expressions,
|
||||
s(:function, :int,
|
||||
s(:name, :main),
|
||||
s(:parameters),
|
||||
s(:expressions,
|
||||
s(:call,
|
||||
s(:name, :plus),
|
||||
s(:arguments , s(:int , 5)),
|
||||
s(:receiver, s(:int, 2)))))))
|
||||
Bosl::Compiler.compile( code )
|
||||
Virtual.machine.run_before "Register::CallImplementation"
|
||||
@interpreter = Interpreter::Interpreter.new
|
||||
@interpreter.start Virtual.machine.init
|
||||
|
@ -2,6 +2,7 @@ require_relative "helper"
|
||||
|
||||
class AddTest < MiniTest::Test
|
||||
include Ticker
|
||||
include AST::Sexp
|
||||
|
||||
def test_puti
|
||||
@string_input = <<HERE
|
||||
@ -23,10 +24,19 @@ class Integer < Object
|
||||
return add_string( start )
|
||||
end
|
||||
end
|
||||
|
||||
class Object
|
||||
int main()
|
||||
5.to_string()
|
||||
end
|
||||
end
|
||||
HERE
|
||||
expressions = Virtual.machine.boot.compile_main @string_input
|
||||
puts expressions
|
||||
Virtual.machine.boot
|
||||
syntax = Parser::Salama.new.parse_with_debug(@string_input)
|
||||
parts = Parser::Transform.new.apply(syntax)
|
||||
puts parts.inspect
|
||||
Bosl::Compiler.compile( parts )
|
||||
|
||||
# expressions = Virtual.machine.boot.parse_and_compile @string_input
|
||||
# Bosl::Compiler.compile( expressions , Virtual.machine.space.get_main )
|
||||
Virtual.machine.run_before "Register::CallImplementation"
|
||||
@interpreter = Interpreter::Interpreter.new
|
||||
@ -38,7 +48,7 @@ HERE
|
||||
"LoadConstant" , "SetSlot" , "RegisterTransfer" , "GetSlot" , "FunctionCall" ,
|
||||
"SaveReturn" , "GetSlot", "OperatorInstruction" , "RegisterTransfer" , "GetSlot" , "GetSlot" ,
|
||||
"GetSlot" , "FunctionReturn" ,"RegisterTransfer" , "Syscall", "NilClass"].each_with_index do |name , index|
|
||||
return if index == 10
|
||||
return if index == 11
|
||||
got = ticks(1)
|
||||
puts got
|
||||
assert got.class.name.index(name) , "Wrong class for #{index+1}, expect #{name} , got #{got}"
|
||||
|
@ -5,13 +5,20 @@ class TestPuts < MiniTest::Test
|
||||
include Ticker
|
||||
def setup
|
||||
Virtual.machine.boot
|
||||
code = s(:call,
|
||||
s(:name, :putstring),
|
||||
s(:arguments),
|
||||
s(:receiver,
|
||||
s(:string, "Hello again")))
|
||||
code = s(:class, :Object,
|
||||
s(:derives, nil),
|
||||
s(:expressions,
|
||||
s(:function, :int,
|
||||
s(:name, :main),
|
||||
s(:parameters),
|
||||
s(:expressions,
|
||||
s(:call,
|
||||
s(:name, :putstring),
|
||||
s(:arguments),
|
||||
s(:receiver,
|
||||
s(:string, "Hello again")))))))
|
||||
|
||||
Bosl::Compiler.compile( code , Virtual.machine.space.get_main )
|
||||
Bosl::Compiler.compile( code )
|
||||
Virtual.machine.run_before "Register::CallImplementation"
|
||||
@interpreter = Interpreter::Interpreter.new
|
||||
@interpreter.start Virtual.machine.init
|
||||
|
Reference in New Issue
Block a user