fix condition if

This commit is contained in:
Torsten Ruger 2017-08-30 22:54:03 +03:00
parent 8d16ef0ae0
commit cd2988f8a2
4 changed files with 16 additions and 13 deletions

View File

@ -21,7 +21,7 @@ module Rubyx
end
def create_tmp
tmp_name = "tmp_#{@locals_type.instance_length}"
tmp_name = "tmp_#{@locals_type.instance_length}".to_sym
@locals_type = @locals_type.add_instance_variable( tmp_name , :Object )
tmp_name
end

View File

@ -15,13 +15,14 @@ module Vool
if_false = add_jump(@if_false.to_mom( method ) , merge)
cond = hoist_condition( method )
check = Mom::TruthCheck.new( cond.pop , if_true , if_false , merge)
[ *check , if_true , if_false , merge ]
[ *cond , check , if_true , if_false , merge ]
end
def hoist_condition( method )
def hoist_condition( method )
return [@condition] if @condition.is_a?(Vool::Named)
local = method.create_tmp
puts local
assign = LocalAssignment.new( local , @condition).to_mom(method)
[assign , Vool::LocalVariable.new(local)]
end
def collect(arr)

View File

@ -59,7 +59,7 @@ module Rubyx
def test_method_create_tmp
name = create_method.create_tmp
assert_equal "tmp_1" , name
assert_equal :tmp_1 , name
end
def test_method_add_tmp

View File

@ -2,7 +2,7 @@
require_relative "helper"
module Vool
class TestIfMom #< MiniTest::Test
class TestConditionIfMom < MiniTest::Test
include MomCompile
def setup
@ -14,15 +14,17 @@ module Vool
def test_if_compiles_as_array
assert_equal Array , @first.class , @stats
end
def test_condition_compiles_to_check
assert_equal Mom::TruthCheck , @first.first.class , @stats
def test_if_compiles_as_array_2
assert_equal 5 , @first.length , @stats
end
def test_condition_is_instance
assert_equal Vool::LocalVariable , @first.first.condition.class , @stats
def test_condition_compiles_to_slot
assert_equal Mom::SlotConstant , @first.first.class
end
def est_true_block_is_second
assert_equal @first[1] , @first.first.true_block , @stats
def test_condition_compiles_to_check_second
assert_equal Mom::TruthCheck , @first[1].class
end
def test_condition_is_send
assert_equal Vool::LocalVariable , @first[1].condition.class
end
end
end