   # The error for when you try to use a forbidden word in JavaScript as
   # an identifier.
   identifierError: (word) ->
-    throw new Error "SyntaxError: Reserved word \"#{word}\" on line #{@line + 1}"
+    throw SyntaxError "Reserved word \"#{word}\" on line #{@line + 1}"
 
   # The error for when you try to assign to a reserved word in JavaScript,
   # like "function" or "default".
   assignmentError: ->
-    throw new Error "SyntaxError: Reserved word \"#{@value()}\" on line #{@line + 1} can't be assigned"
+    throw SyntaxError "Reserved word \"#{@value()}\" on line #{@line + 1} can't be assigned"
 
   # Matches a balanced group such as a single or double-quoted string. Pass in
   # a series of delimiters, all of which must be nested correctly within the

JS_FORBIDDEN = JS_KEYWORDS.concat RESERVED

# Token matching regexes.
IDENTIFIER = /^[a-zA-Z_$][\w$]*/
NUMBER     = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i
HEREDOC    = /^("""|''')([\s\S]*?)(?:\n[ \t]*)?\1/
OPERATOR   = /// ^ (?: -[-=>]? | \+[+=]? | [*&|/%=<>^:!?]+ ) ///

    prev = last @tokens, 1
    size = indent.length - 1 - indent.lastIndexOf '\n'
    nextCharacter = NEXT_CHARACTER.exec(@chunk)[1]
    noNewlines = nextCharacter in ['.', ','] or @unfinished()
    if size - @indebt is @indent
      return @suppressNewlines() if noNewlines
      return @newlineToken indent
