 # The list of keywords passed verbatim to the parser.
 KEYWORDS: JS_KEYWORDS.concat COFFEE_KEYWORDS
 
-# The list of keywords that are reserved by JavaScript, but not used, and aren't
-# used by CoffeeScript. Using these will throw an error at compile time.
+# The list of keywords that are reserved by JavaScript, but not used, or are
+# used by CoffeeScript internally. Using these will throw an error.
 RESERVED: [
   "case", "default", "do", "function", "var", "void", "with"
-  "const", "let", "debugger", "enum", "export", "import", "native"
+  "const", "let", "debugger", "enum", "export", "import", "native",
+  "__extends", "__hasProp"
 ]
 
 # JavaScript keywords and reserved words together, excluding CoffeeScript ones.

    @token(tag, id)
    @i += id.length
    true
  
  # Matches numbers, including decimals, hex, and exponential notation.
  number_token: ->
    return false unless number: @match NUMBER, 1
    @token 'NUMBER', number
    @i += number.length
    true
  
  # Matches strings, including multi-line strings.
  string_token: ->
    return false unless string: @match STRING, 1

    @token 'TERMINATOR', "\n"
    @i += comment.length
    true

  # Record tokens for indentation differing from the previous line.
  indent_token: ->
    return false unless indent: @match MULTI_DENT, 1
