     @tokens.push tokens...
     @tokens.push [',', ','], ['STRING', '"' + flags + '"'] if flags
     @token ')', ')'
-    true
+    heregex.length
 
   # Matches newlines, indents, and outdents, and determines which is which.
   # If we can detect that the current line is continued onto the the next line,

      @tagParameters() if CODE.test value
    else
      value = @chunk.charAt 0
    @i += value.length
    tag = value
    prev = last @tokens
    if value is '=' and prev
      @assignmentError() if not prev[1].reserved and prev[1] in JS_FORBIDDEN
      if prev[1] in ['||', '&&']
        prev[0] = 'COMPOUND_ASSIGN'
        prev[1] += '='
        return true
    if      value is ';'             then tag = 'TERMINATOR'
    else if value in LOGIC           then tag = 'LOGIC'
    else if value in MATH            then tag = 'MATH'
    else if value in COMPARE         then tag = 'COMPARE'
    else if value in COMPOUND_ASSIGN then tag = 'COMPOUND_ASSIGN'
    else if value in UNARY           then tag = 'UNARY'
    else if value in SHIFT           then tag = 'SHIFT'
    else if value is '?' and prev?.spaced  then tag = 'LOGIC'
    else if prev and not prev.spaced
      if value is '(' and prev[0] in CALLABLE
        prev[0] = 'FUNC_EXIST' if prev[0] is '?'

  # referenced as property names here, so you can still do `jQuery.is()` even
  # though `is` means `===` otherwise.
  identifierToken: ->
    return 0 unless match = IDENTIFIER.exec @chunk
    [input, id, colon] = match
    if id is 'all' and @tag() is 'FOR'
      @token 'ALL', id
      return 3
    if id is 'from' and @tag(1) is 'FOR'
      @seenFor  = no
      @seenFrom = yes
      @token 'FROM', id
      return 4
    if id is 'to' and @seenFrom
      @seenFrom = no
      @token 'TO', id
      return 2
    forcedIdentifier = colon or @tagAccessor()
    tag = 'IDENTIFIER'
    if id in JS_KEYWORDS or
