fix condition if
This commit is contained in:
parent
8d16ef0ae0
commit
cd2988f8a2
@ -21,7 +21,7 @@ module Rubyx
|
|||||||
end
|
end
|
||||||
|
|
||||||
def create_tmp
|
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 )
|
@locals_type = @locals_type.add_instance_variable( tmp_name , :Object )
|
||||||
tmp_name
|
tmp_name
|
||||||
end
|
end
|
||||||
|
@ -15,13 +15,14 @@ module Vool
|
|||||||
if_false = add_jump(@if_false.to_mom( method ) , merge)
|
if_false = add_jump(@if_false.to_mom( method ) , merge)
|
||||||
cond = hoist_condition( method )
|
cond = hoist_condition( method )
|
||||||
check = Mom::TruthCheck.new( cond.pop , if_true , if_false , merge)
|
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
|
end
|
||||||
|
|
||||||
def hoist_condition( method )
|
def hoist_condition( method )
|
||||||
return [@condition] if @condition.is_a?(Vool::Named)
|
return [@condition] if @condition.is_a?(Vool::Named)
|
||||||
local = method.create_tmp
|
local = method.create_tmp
|
||||||
puts local
|
assign = LocalAssignment.new( local , @condition).to_mom(method)
|
||||||
|
[assign , Vool::LocalVariable.new(local)]
|
||||||
end
|
end
|
||||||
|
|
||||||
def collect(arr)
|
def collect(arr)
|
||||||
|
@ -59,7 +59,7 @@ module Rubyx
|
|||||||
|
|
||||||
def test_method_create_tmp
|
def test_method_create_tmp
|
||||||
name = create_method.create_tmp
|
name = create_method.create_tmp
|
||||||
assert_equal "tmp_1" , name
|
assert_equal :tmp_1 , name
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_method_add_tmp
|
def test_method_add_tmp
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
module Vool
|
module Vool
|
||||||
class TestIfMom #< MiniTest::Test
|
class TestConditionIfMom < MiniTest::Test
|
||||||
include MomCompile
|
include MomCompile
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@ -14,15 +14,17 @@ module Vool
|
|||||||
def test_if_compiles_as_array
|
def test_if_compiles_as_array
|
||||||
assert_equal Array , @first.class , @stats
|
assert_equal Array , @first.class , @stats
|
||||||
end
|
end
|
||||||
def test_condition_compiles_to_check
|
def test_if_compiles_as_array_2
|
||||||
assert_equal Mom::TruthCheck , @first.first.class , @stats
|
assert_equal 5 , @first.length , @stats
|
||||||
end
|
end
|
||||||
def test_condition_is_instance
|
def test_condition_compiles_to_slot
|
||||||
assert_equal Vool::LocalVariable , @first.first.condition.class , @stats
|
assert_equal Mom::SlotConstant , @first.first.class
|
||||||
end
|
end
|
||||||
def est_true_block_is_second
|
def test_condition_compiles_to_check_second
|
||||||
assert_equal @first[1] , @first.first.true_block , @stats
|
assert_equal Mom::TruthCheck , @first[1].class
|
||||||
|
end
|
||||||
|
def test_condition_is_send
|
||||||
|
assert_equal Vool::LocalVariable , @first[1].condition.class
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user