add parfait block

This commit is contained in:
Torsten Ruger
2018-07-07 15:50:43 +03:00
parent 9005513368
commit 2f07cc34f3
11 changed files with 83 additions and 9 deletions

23
lib/parfait/block.rb Normal file
View File

@@ -0,0 +1,23 @@
module Parfait
# A Block is a callable object, much like a CallableMethod.
# Surprisingly similar in fact, as the block is really only missing the name.
#
# The difference lies mostly in the way they are compiled
#
# Also both have a list of blocks defined in their scope. But this is
# notimplemented for blocks yet
#
class Block < Callable
def ==(other)
return false unless other.is_a?(Block)
super
end
def inspect
"#{@self_type.object_class.name}(#{arguments_type.inspect})"
end
end
end

View File

@@ -36,5 +36,24 @@ module Parfait
block.call( self )
@next.each_method( &block ) if @next
end
def create_block(args , frame)
bl = Block.new(self_type , args , frame)
block = self.blocks
bl.next = block if(block)
@blocks = bl
end
def has_block(block)
each_block{ |bl| return true if bl == block}
false
end
def each_block(&bl)
blo = blocks
while( blo )
yield(blo)
blo = blo.next
end
end
end
end