diff --git a/lib/common/list.rb b/lib/common/list.rb index 84a21760..fc664f1a 100644 --- a/lib/common/list.rb +++ b/lib/common/list.rb @@ -9,7 +9,6 @@ module Common @next = nekst nekst end - alias :<< :set_next # during translation we replace one by one def replace_next( nekst ) @@ -44,6 +43,7 @@ module Common def append( code ) last.set_next code end + alias :<< :append def length( labels = [] ) ret = 1 diff --git a/lib/common/statements.rb b/lib/common/statements.rb deleted file mode 100644 index 10a4fb37..00000000 --- a/lib/common/statements.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Common - #extracted to resuse - module Statements - attr_reader :statements - def initialize(statements) - @statements = statements - end - - def empty? - @statements.empty? - end - def single? - @statements.length == 1 - end - def first - @statements.first - end - def last - @statements.last - end - def length - @statements.length - end - def [](i) - @statements[i] - end - def <<(o) - @statements << o - self - end - def add_array(a) - @statements += a - end - end -end diff --git a/lib/rubyx.rb b/lib/rubyx.rb index c1b581ae..4995fff9 100644 --- a/lib/rubyx.rb +++ b/lib/rubyx.rb @@ -15,6 +15,5 @@ require_relative "risc" require_relative "arm/arm_machine" require_relative "arm/translator" require_relative "common/list" -require_relative "common/statements" require_relative "vool/vool_compiler" require_relative "mom/mom" diff --git a/lib/vool/statements/if_statement.rb b/lib/vool/statements/if_statement.rb index 6c1f5322..fd7cca95 100644 --- a/lib/vool/statements/if_statement.rb +++ b/lib/vool/statements/if_statement.rb @@ -51,10 +51,10 @@ module Vool head end - def collect(arr) - @if_true.collect(arr) - @if_false.collect(arr) if @if_false - super + def each(&block) + block.call(condition) + @if_true.each(&block) + @if_false.each(&block) if @if_false end def simplify_condition diff --git a/lib/vool/statements/send_statement.rb b/lib/vool/statements/send_statement.rb index 34dc90f1..3ac65aa2 100644 --- a/lib/vool/statements/send_statement.rb +++ b/lib/vool/statements/send_statement.rb @@ -60,7 +60,7 @@ module Vool type = @receiver.ct_type called_method = type.resolve_method(@name) raise "No method #{@name} for #{type}" unless called_method - Mom::Statements.new( message_setup(in_method) << Mom::SimpleCall.new( called_method) ) + message_setup(in_method) << Mom::SimpleCall.new( called_method) end # this breaks cleanly into two parts: diff --git a/lib/vool/statements/statements.rb b/lib/vool/statements/statements.rb index add491a1..c218548b 100644 --- a/lib/vool/statements/statements.rb +++ b/lib/vool/statements/statements.rb @@ -1,6 +1,35 @@ module Vool class Statements < Statement - include Common::Statements + attr_reader :statements + def initialize(statements) + @statements = statements + end + + def empty? + @statements.empty? + end + def single? + @statements.length == 1 + end + def first + @statements.first + end + def last + @statements.last + end + def length + @statements.length + end + def [](i) + @statements[i] + end + def <<(o) + @statements << o + self + end + def add_array(a) + @statements += a + end # create machine instructions def to_mom( method ) @@ -18,7 +47,7 @@ module Vool def each(&block) block.call(self) - @statements.each{|a| a.each(block)} + @statements.each{|a| a.each(&block)} end end