OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Utilities for building JS ASTs at runtime. Contains a builder class | 5 // Utilities for building JS ASTs at runtime. Contains a builder class |
6 // and a parser that parses part of the language. | 6 // and a parser that parses part of the language. |
7 | 7 |
8 part of js_ast; | 8 part of js_ast; |
9 | 9 |
10 | 10 |
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 } | 604 } |
605 lastToken = src.substring(lastPosition, position); | 605 lastToken = src.substring(lastPosition, position); |
606 } else { | 606 } else { |
607 // All other tokens handled here. | 607 // All other tokens handled here. |
608 int cat = category(src.codeUnitAt(position)); | 608 int cat = category(src.codeUnitAt(position)); |
609 int newCat; | 609 int newCat; |
610 do { | 610 do { |
611 position++; | 611 position++; |
612 if (position == src.length) break; | 612 if (position == src.length) break; |
613 int code = src.codeUnitAt(position); | 613 int code = src.codeUnitAt(position); |
614 // Special code to disallow ! and / in non-first position in token, so | 614 // Special code to disallow !, ~ and / in non-first position in token, |
615 // that !! parses as two tokens and != parses as one, while =/ parses | 615 // so that !! and ~~ parse as two tokens and != parses as one, while =/ |
616 // as a an equals token followed by a regexp literal start. | 616 // parses as a an equals token followed by a regexp literal start. |
617 newCat = (code == charCodes.$BANG || code == charCodes.$SLASH) | 617 newCat = |
618 ? NONE | 618 (code == charCodes.$BANG || |
| 619 code == charCodes.$SLASH || |
| 620 code == charCodes.$TILDE) |
| 621 ? NONE |
619 : category(code); | 622 : category(code); |
620 } while (!singleCharCategory(cat) && | 623 } while (!singleCharCategory(cat) && |
621 (cat == newCat || | 624 (cat == newCat || |
622 (cat == ALPHA && newCat == NUMERIC) || // eg. level42. | 625 (cat == ALPHA && newCat == NUMERIC) || // eg. level42. |
623 (cat == NUMERIC && newCat == DOT))); // eg. 3.1415 | 626 (cat == NUMERIC && newCat == DOT))); // eg. 3.1415 |
624 lastCategory = cat; | 627 lastCategory = cat; |
625 lastToken = src.substring(lastPosition, position); | 628 lastToken = src.substring(lastPosition, position); |
626 if (cat == NUMERIC) { | 629 if (cat == NUMERIC) { |
627 double.parse(lastToken, (_) { | 630 double.parse(lastToken, (_) { |
628 error("Unparseable number"); | 631 error("Unparseable number"); |
(...skipping 700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1329 | 1332 |
1330 Catch parseCatch() { | 1333 Catch parseCatch() { |
1331 expectCategory(LPAREN); | 1334 expectCategory(LPAREN); |
1332 Declaration errorName = parseVariableDeclaration(); | 1335 Declaration errorName = parseVariableDeclaration(); |
1333 expectCategory(RPAREN); | 1336 expectCategory(RPAREN); |
1334 expectCategory(LBRACE); | 1337 expectCategory(LBRACE); |
1335 Block body = parseBlock(); | 1338 Block body = parseBlock(); |
1336 return new Catch(errorName, body); | 1339 return new Catch(errorName, body); |
1337 } | 1340 } |
1338 } | 1341 } |
OLD | NEW |