   # Convenience for the most common use of contains. Does the node contain
   # a pure statement?
   containsPureStatement: ->
-    @isPureStatement() or @contains (n) -> n.isPureStatement and n.isPureStatement()
+    @isPureStatement() or @contains (n) -> n.isPureStatement?()
 
   # Perform an in-order traversal of the AST. Crosses scope boundaries.
   traverse: (block) -> @traverseChildren true, block

  # operands are only evaluated once, even though we have to reference them
  # more than once.
  compileAssignment: (o) ->
    [first, firstVar] = @first.compileReference o, precompile: yes, assignment: yes
    second = @second.compile o
    second = "(#{second})" if @second instanceof OpNode

    @isSuper  = variable is 'super'
    @variable = if @isSuper then null else variable
    @args     or= []

  compileSplatArguments: (o) ->
    SplatNode.compileSplattedArray @args, o

  # Tag this invocation as creating a new instance.
  newInstance: ->
