moved statements up one dir
This commit is contained in:
68
lib/vool/statements.rb
Normal file
68
lib/vool/statements.rb
Normal file
@ -0,0 +1,68 @@
|
||||
module Vool
|
||||
class Statements < Statement
|
||||
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
|
||||
|
||||
# create mom instructions
|
||||
def to_mom( method )
|
||||
raise "Empty list ? #{statements.length}" unless @statements[0]
|
||||
flat = @statements.shift.to_mom(method)
|
||||
while( nekst = @statements.shift )
|
||||
flat.append nekst.to_mom(method)
|
||||
end
|
||||
flat
|
||||
end
|
||||
|
||||
def create_objects
|
||||
@statements.each{ |s| s.create_objects }
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
block.call(self)
|
||||
@statements.each{|a| a.each(&block)}
|
||||
end
|
||||
|
||||
def normalize
|
||||
if( single? )
|
||||
first.normalize
|
||||
else
|
||||
Statements.new(@statements.collect{|s| s.normalize})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class ScopeStatement < Statements
|
||||
def normalize
|
||||
if( single? )
|
||||
first.normalize
|
||||
else
|
||||
ScopeStatement.new(@statements.collect{|s| s.normalize})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user