fix condition if
This commit is contained in:
parent
8d16ef0ae0
commit
cd2988f8a2
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user