f4a4ccb98e
- 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
33 lines
965 B
Ruby
33 lines
965 B
Ruby
require_relative "compiler_helper"
|
|
|
|
|
|
class CompilerTest < MiniTest::Test
|
|
include AST::Sexp
|
|
def setup
|
|
Virtual.machine.boot
|
|
end
|
|
def check
|
|
res = Bosl::Compiler.compile( @expression )
|
|
assert res.is_a?(Virtual::Slot) , "compiler must compile to slot, not #{res.inspect}"
|
|
end
|
|
def ttest_if_expression
|
|
#TODO review constant : all expressions return a slot
|
|
@expression = s(:if,
|
|
s(:condition,
|
|
s(:int, 0)),
|
|
s(:if_true,
|
|
s(:int, 42)),
|
|
s(:if_false, nil))
|
|
check
|
|
end
|
|
def test_function_expression
|
|
@expression = s(:class, :Foo,
|
|
s(:derives, :Object),
|
|
s(:expressions,
|
|
s(:function, :int, s(:name, :foo),
|
|
s(:parameters, s(:parameter, :ref, :x)),
|
|
s(:expressions, s(:int, 5)))))
|
|
check
|
|
end
|
|
end
|