correct flattening for moms if
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user