nashorn/src/jdk/nashorn/internal/parser/Lexer.java
changeset 22390 1d2d88e478ea
parent 21437 9f558215d924
child 24719 f726e9d67629
equal deleted inserted replaced
22389:ea3dda90768c 22390:1d2d88e478ea
    25 
    25 
    26 package jdk.nashorn.internal.parser;
    26 package jdk.nashorn.internal.parser;
    27 
    27 
    28 import static jdk.nashorn.internal.parser.TokenType.ADD;
    28 import static jdk.nashorn.internal.parser.TokenType.ADD;
    29 import static jdk.nashorn.internal.parser.TokenType.COMMENT;
    29 import static jdk.nashorn.internal.parser.TokenType.COMMENT;
       
    30 import static jdk.nashorn.internal.parser.TokenType.DIRECTIVE_COMMENT;
    30 import static jdk.nashorn.internal.parser.TokenType.DECIMAL;
    31 import static jdk.nashorn.internal.parser.TokenType.DECIMAL;
    31 import static jdk.nashorn.internal.parser.TokenType.EOF;
    32 import static jdk.nashorn.internal.parser.TokenType.EOF;
    32 import static jdk.nashorn.internal.parser.TokenType.EOL;
    33 import static jdk.nashorn.internal.parser.TokenType.EOL;
    33 import static jdk.nashorn.internal.parser.TokenType.ERROR;
    34 import static jdk.nashorn.internal.parser.TokenType.ERROR;
    34 import static jdk.nashorn.internal.parser.TokenType.ESCSTRING;
    35 import static jdk.nashorn.internal.parser.TokenType.ESCSTRING;
   432         if (ch0 == '/') {
   433         if (ch0 == '/') {
   433             // Is it a // comment.
   434             // Is it a // comment.
   434             if (ch1 == '/') {
   435             if (ch1 == '/') {
   435                 // Skip over //.
   436                 // Skip over //.
   436                 skip(2);
   437                 skip(2);
       
   438 
       
   439                 boolean directiveComment = false;
       
   440                 if ((ch0 == '#' || ch0 == '@') && (ch1 == ' ')) {
       
   441                     directiveComment = true;
       
   442                 }
       
   443 
   437                 // Scan for EOL.
   444                 // Scan for EOL.
   438                 while (!atEOF() && !isEOL(ch0)) {
   445                 while (!atEOF() && !isEOL(ch0)) {
   439                     skip(1);
   446                     skip(1);
   440                 }
   447                 }
   441                 // Did detect a comment.
   448                 // Did detect a comment.
   442                 add(COMMENT, start);
   449                 add(directiveComment? DIRECTIVE_COMMENT : COMMENT, start);
   443                 return true;
   450                 return true;
   444             } else if (ch1 == '*') {
   451             } else if (ch1 == '*') {
   445                 // Skip over /*.
   452                 // Skip over /*.
   446                 skip(2);
   453                 skip(2);
   447                 // Scan for */.
   454                 // Scan for */.
  1621             return valueOfIdent(start, len); // String
  1628             return valueOfIdent(start, len); // String
  1622         case REGEX:
  1629         case REGEX:
  1623             return valueOfPattern(start, len); // RegexToken::LexerToken
  1630             return valueOfPattern(start, len); // RegexToken::LexerToken
  1624         case XML:
  1631         case XML:
  1625             return valueOfXML(start, len); // XMLToken::LexerToken
  1632             return valueOfXML(start, len); // XMLToken::LexerToken
       
  1633         case DIRECTIVE_COMMENT:
       
  1634             return source.getString(start, len);
  1626         default:
  1635         default:
  1627             break;
  1636             break;
  1628         }
  1637         }
  1629 
  1638 
  1630         return null;
  1639         return null;