parent
403540b3ca
commit
37571a0ff9
@ -21,7 +21,7 @@ require_relative "ruby/while_statement"
|
|||||||
require_relative "ruby/basic_values"
|
require_relative "ruby/basic_values"
|
||||||
require_relative "ruby/hash_statement"
|
require_relative "ruby/hash_statement"
|
||||||
require_relative "ruby/method_statement"
|
require_relative "ruby/method_statement"
|
||||||
require_relative "ruby/ruby_compiler"
|
require_relative "ruby/class_method_statement"
|
||||||
require_relative "ruby/call_statement"
|
require_relative "ruby/call_statement"
|
||||||
require_relative "ruby/send_statement"
|
require_relative "ruby/send_statement"
|
||||||
require_relative "ruby/yield_statement"
|
require_relative "ruby/yield_statement"
|
||||||
|
14
lib/ruby/class_method_statement.rb
Normal file
14
lib/ruby/class_method_statement.rb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
module Ruby
|
||||||
|
class ClassMethodStatement < MethodStatement
|
||||||
|
|
||||||
|
def to_vool
|
||||||
|
# Vool::ClassMethodStatement.new( @name , @args.dup , @body.to_vool)
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s(depth = 0)
|
||||||
|
arg_str = @args.collect{|a| a.to_s}.join(', ')
|
||||||
|
at_depth(depth , "def self.#{name}(#{arg_str})" , @body.to_s(depth + 1) , "end")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
@ -54,6 +54,13 @@ module Ruby
|
|||||||
MethodStatement.new( name , arg_array , process(body) )
|
MethodStatement.new( name , arg_array , process(body) )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def on_defs( statement )
|
||||||
|
me , name , args , body = *statement
|
||||||
|
raise "only class method implemented, not #{me.type}" unless me.type == :self
|
||||||
|
arg_array = process_all( args )
|
||||||
|
ClassMethodStatement.new( name , arg_array , process(body) )
|
||||||
|
end
|
||||||
|
|
||||||
def on_arg( arg )
|
def on_arg( arg )
|
||||||
arg.first
|
arg.first
|
||||||
end
|
end
|
||||||
|
@ -38,6 +38,9 @@ module Vool
|
|||||||
#existing class, don't overwrite type (parfait only?)
|
#existing class, don't overwrite type (parfait only?)
|
||||||
else
|
else
|
||||||
@clazz = Parfait.object_space.create_class(@name , @super_class_name )
|
@clazz = Parfait.object_space.create_class(@name , @super_class_name )
|
||||||
|
#TODO this should start from Object Type and add one name at a time.
|
||||||
|
# So the "trail" of types leading to this one exists.
|
||||||
|
# Also the Class always has a valid type.
|
||||||
ivar_hash = {}
|
ivar_hash = {}
|
||||||
self.each do |node|
|
self.each do |node|
|
||||||
next unless node.is_a?(InstanceVariable) or node.is_a?(IvarAssignment)
|
next unless node.is_a?(InstanceVariable) or node.is_a?(IvarAssignment)
|
||||||
|
@ -53,4 +53,18 @@ module Ruby
|
|||||||
assert_equal LocalAssignment , lst.body.class
|
assert_equal LocalAssignment , lst.body.class
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
class TestClassMethodStatement < MiniTest::Test
|
||||||
|
include RubyTests
|
||||||
|
|
||||||
|
def test_basic_method
|
||||||
|
input = "def self.tryout() ; return true ; end "
|
||||||
|
@lst = compile( input )
|
||||||
|
assert_equal Ruby::ClassMethodStatement , @lst.class
|
||||||
|
end
|
||||||
|
def test_method_arg
|
||||||
|
input = "def self.tryout(arg) ; arg = true ; return arg ; end "
|
||||||
|
@lst = compile( input )
|
||||||
|
assert_equal Ruby::ClassMethodStatement , @lst.class
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user