     stack = []
     debt  = {}
     (debt[key] = 0) for key, val of INVERSES
-    @scanTokens (prev, token, post, i) =>
+    @scanTokens (token, i) =>
       tag = token[0]
       inv = INVERSES[token[0]]
       if include EXPRESSION_START, tag

  # Insert the implicit parentheses here, so that the parser doesn't have to
  # deal with them.
  addImplicitParentheses: ->
    @scanTokens (prev, token, post, i) =>
      if prev and prev.spaced and include(IMPLICIT_FUNC, prev[0]) and include(IMPLICIT_CALL, token[0]) and
          not (token[0] is '!' and (post[0] in ['IN', 'OF']))
        @tokens.splice i, 0, ['CALL_START', '(', token[2]]
        condition = (token, i) ->
          [before, prev] = @tokens.slice(i - 2, i + 1)
          (not token.generated and @tokens[i - 1][0] isnt ',' and include(IMPLICIT_END, token[0]) and
            not (token[0] is 'INDENT' and (include(IMPLICIT_BLOCK, prev[0]) or before[0] is 'CLASS'))) or
            token[0] is 'PROPERTY_ACCESS' and prev[0] is 'OUTDENT'
        action = (token, i) ->
          idx = if token[0] is 'OUTDENT' then i + 1 else i
          @tokens.splice idx, 0, ['CALL_END', ')', token[2]]

  # blocks, so it doesn't need to. ')' can close a single-line block,
  # but we need to make sure it's balanced.
  addImplicitIndentation: ->
    @scanTokens (token, i) =>
      if token[0] is 'ELSE' and @tag(i - 1) isnt 'OUTDENT'
        @tokens.splice i, 0, @indentation(token)...
        return 2
      if token[0] is 'CATCH' and
          (@tokens[i + 2][0] is 'TERMINATOR' or @tokens[i + 2][0] is 'FINALLY')
        @tokens.splice i + 2, 0, @indentation(token)...
        return 4
      if include(SINGLE_LINERS, token[0]) and @tag(i + 1) isnt 'INDENT' and
          not (token[0] is 'ELSE' and @tag(i + 1) is 'IF')
        starter = token[0]
        [indent, outdent] = @indentation token
        indent.generated = outdent.generated = true
