correct flattening for moms if

This commit is contained in:
Torsten Ruger
2017-09-08 13:12:24 +03:00
parent 985dc9904d
commit 0f83b89805
3 changed files with 46 additions and 4 deletions

View File

@ -11,7 +11,17 @@ module Mom
end
def flatten
self
head = hoisted.flatten
true_label = Label.new( "true_label_#{object_id}")
false_label = Label.new( "false_label_#{object_id}")
merge_label = Label.new( "merge_label_#{object_id}")
head.append condition.flatten( true_label: true_label , false_label: false_label)
head.append true_label
head.append if_true.flatten( merge_label: merge_label)
head.append false_label
head.append if_false.flatten( merge_label: merge_label)
head.append merge_label
head
end
end

View File

@ -1,7 +1,7 @@
module Mom
class Statement
# flattening will change the structure from a tree to a linked list (and use
# next_instruction to do so)
# nekst to do so)
def flatten
raise "not implemented for #{self}"
end
@ -10,9 +10,14 @@ module Mom
class Statements < Statement
include Common::Statements
def flatten
@statements.each{ |s| s.flatten }
def flatten( options = {} )
flat = @statements.pop.flatten
while( nekst = @statements.pop )
flat.append nekst.flatten()
end
flat
end
end
end