adds basic to_mom machinery for class and method statement
This commit is contained in:
parent
a4b0666c8c
commit
1deca34c23
@ -24,6 +24,12 @@ module Vool
|
||||
def collect(arr)
|
||||
arr << self
|
||||
end
|
||||
|
||||
def to_mom( _ )
|
||||
# temporary warning to find unimplemented kids
|
||||
raise "Not implemented for #{self}"
|
||||
end
|
||||
|
||||
# create corresponding parfait objects, ie classes, types, methods
|
||||
# mainly implemented by class/method statement
|
||||
def create_objects
|
||||
|
@ -11,6 +11,16 @@ module Vool
|
||||
end
|
||||
end
|
||||
|
||||
# compilation to the next layer, mom
|
||||
# context coming in for class is nil, also for methods, henceafter a method is passed down
|
||||
def to_mom( _ )
|
||||
methods = []
|
||||
@body.statements.each do |meth|
|
||||
methods << meth.to_mom( nil )
|
||||
end
|
||||
methods
|
||||
end
|
||||
|
||||
def collect(arr)
|
||||
@body.collect(arr)
|
||||
super
|
||||
|
@ -3,7 +3,20 @@ module Vool
|
||||
attr_reader :name, :args , :body , :clazz
|
||||
|
||||
def initialize( name , args , body)
|
||||
@name , @args , @body = name , args , (body || [])
|
||||
@name , @args , @body = name , args , body
|
||||
unless( body.is_a?(ScopeStatement))
|
||||
@body = ScopeStatement.new([])
|
||||
@body.statements << body if body
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
# compile to mom instructions. methods themselves do no result in instructions (yet)
|
||||
# instead the resulting instruction tree is saved into the method object that
|
||||
# represents the method
|
||||
def to_mom( _ )
|
||||
method = @clazz.get_method( @name )
|
||||
@body.to_mom(method)
|
||||
end
|
||||
|
||||
def collect(arr)
|
||||
|
@ -4,6 +4,14 @@ module Vool
|
||||
def initialize(statements)
|
||||
@statements = statements
|
||||
end
|
||||
|
||||
# create machine instructions
|
||||
def to_mom( method )
|
||||
@statements.collect do |statement|
|
||||
statement.to_mom( method )
|
||||
end
|
||||
end
|
||||
|
||||
def empty?
|
||||
@statements.empty?
|
||||
end
|
||||
|
1
test/vool/to_mom/helper.rb
Normal file
1
test/vool/to_mom/helper.rb
Normal file
@ -0,0 +1 @@
|
||||
require_relative "../helper"
|
Loading…
Reference in New Issue
Block a user