   # Matches and consumes non-meaningful whitespace. Tag the previous token
   # as being "spaced", because there are some cases where it makes a difference.
   whitespaceToken: ->
-    return false unless space = @match WHITESPACE
+    return false unless match = WHITESPACE.exec @chunk
     prev = @prev()
     prev.spaced = true if prev
-    @i += space.length
+    @i += match[0].length
     true
 
   # Generate a newline token. Consecutive newlines get merged together.

  stringToken: ->
    switch @chunk.charAt 0
      when "'"
        return false unless string = @match SIMPLESTR
        @token 'STRING', string.replace MULTILINER, '\\\n'
      when '"'
        return false unless string = @balancedToken ['"', '"'], ['#{', '}']
        @interpolateString string.replace MULTILINER, '\\\n'

  # Matches numbers, including decimals, hex, and exponential notation.
  # Be careful not to interfere with ranges-in-progress.
  numberToken: ->
    return false unless match = NUMBER.exec @chunk
    number = match[0]
    return false if @tag() is '.' and number.charAt(0) is '.'
    @i += number.length
    @token 'NUMBER', number
