add parfait block
This commit is contained in:
23
lib/parfait/block.rb
Normal file
23
lib/parfait/block.rb
Normal 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
|
@@ -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
|
||||
|
Reference in New Issue
Block a user