lib/instructions/code/code_cdr.rb in nudge-0.2.6 vs lib/instructions/code/code_cdr.rb in nudge-0.2.7

- old
+ new

@@ -1,14 +1,26 @@ +# pops the top item from the +:code+ stack; +# implements a equivalent to Lisp's +cdr+ function, treating Nudge blocks as lists: +# +# If the +:code+ value has at least 2 points (meaning it's a block with at least 1 element), +# the new code value is this block with its first element deleted; otherwise, the result is +# an empty block. +# +# *needs:* 1 +:code+ +# +# *pushes:* 1 +:code+ +# + class CodeCdrInstruction < Instruction def preconditions? needs :code, 1 end def setup @arg = @context.pop_value(:code) end def derive tree = NudgeProgram.new(@arg) - if tree.linked_code.kind_of?(CodeblockPoint) && (tree.points > 2) + if tree.linked_code.kind_of?(CodeblockPoint) && (tree.points > 1) new_tree = tree.delete_point(2) else new_tree = CodeblockPoint.new([]) end @result = ValuePoint.new("code", new_tree.blueprint)