             tokens.push ['STRING', "$quote$before$quote"] if before.length
             if interp.substring(0, 1) is '{'
               inner: interp.substring(1, interp.length - 1)
-              nested: lexer.tokenize "($inner)", {rewrite: no}
+              nested: lexer.tokenize "($inner)", {rewrite: no, line: @line}
               nested.pop()
               tokens.push ['TOKENS', nested]
             else

NUMBER        : /^(\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?)))\b/i
HEREDOC       : /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/
INTERPOLATION : /(^|[\s\S]*?(?:[\\]|\\\\)?)\$([a-zA-Z_@]\w*|{[\s\S]*?(?:[^\\]|\\\\)})/
JS            : /^(``|`([\s\S]*?)([^\\]|\\\\)`)/
OPERATOR      : /^([+\*&|\/\-%=<>:!?]+)/
WHITESPACE    : /^([ \t]+)/
COMMENT       : /^(((\n?[ \t]*)?#[^\n]*)+)/


  # Scan by attempting to match tokens one at a time. Slow and steady.
  tokenize: (code, options) ->
    o        : options or {}
    @code    : code         # The remainder of the source code.
    @i       : 0            # Current character position we're parsing.
    @line    : o.line or 0  # The current line.
    @indent  : 0            # The current indent level.
    @indents : []           # The stack of all indent levels we are currently within.
    @tokens  : []           # Collection of all parsed tokens in the form ['TOKEN_TYPE', value, line]
    while @i < @code.length
      @chunk: @code.slice(@i)
      @extract_next_token()
    @close_indentation()
    return @tokens if o.rewrite is no
    (new Rewriter()).rewrite @tokens

  # At every position, run through this list of attempted matches,
