| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 /// Library to generate code that can initialize the `StaticConfiguration` in | 5 /// Library to generate code that can initialize the `StaticConfiguration` in |
| 6 /// `package:smoke/static.dart`. | 6 /// `package:smoke/static.dart`. |
| 7 /// | 7 /// |
| 8 /// This library doesn't have any specific logic to extract information from | 8 /// This library doesn't have any specific logic to extract information from |
| 9 /// Dart source code. To extract code using the analyzer, take a look at the | 9 /// Dart source code. To extract code using the analyzer, take a look at the |
| 10 /// `smoke.codegen.recorder` library. | 10 /// `smoke.codegen.recorder` library. |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 int get hashCode => super.hashCode; | 451 int get hashCode => super.hashCode; |
| 452 } | 452 } |
| 453 | 453 |
| 454 /// Default set of imports added by [SmokeCodeGenerator]. | 454 /// Default set of imports added by [SmokeCodeGenerator]. |
| 455 const DEFAULT_IMPORTS = const [ | 455 const DEFAULT_IMPORTS = const [ |
| 456 "import 'package:smoke/smoke.dart' show Declaration, PROPERTY, METHOD;", | 456 "import 'package:smoke/smoke.dart' show Declaration, PROPERTY, METHOD;", |
| 457 "import 'package:smoke/static.dart' show " | 457 "import 'package:smoke/static.dart' show " |
| 458 "useGeneratedCode, StaticConfiguration;", | 458 "useGeneratedCode, StaticConfiguration;", |
| 459 ]; | 459 ]; |
| 460 | 460 |
| 461 _symbol(String name) => | 461 _symbol(String name) { |
| 462 name.contains('[') ? "const Symbol('$name')" : '#$name'; | 462 if (!_publicSymbolPattern.hasMatch(name)) { |
| 463 throw new StateError('invalid symbol name: "$name"'); |
| 464 } |
| 465 return _literalSymbolPattern.hasMatch(name) |
| 466 ? '#$name' : "const Symbol('$name')"; |
| 467 } |
| 468 |
| 469 // TODO(sigmund): is this included in some library we can import? I derived the |
| 470 // definitions below from sdk/lib/internal/symbol.dart. |
| 471 |
| 472 /// Reserved words in Dart. |
| 473 const String _reservedWordRE = |
| 474 r'(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' |
| 475 r'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' |
| 476 r'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' |
| 477 r'v(?:ar|oid)|w(?:hile|ith))'; |
| 478 |
| 479 /// Public identifier: a valid identifier (not a reserved word) that doesn't |
| 480 /// start with '_'. |
| 481 const String _publicIdentifierRE = |
| 482 r'(?!' '$_reservedWordRE' r'\b(?!\$))[a-zA-Z$][\w$]*'; |
| 483 |
| 484 /// Pattern that matches operators only. |
| 485 final RegExp _literalSymbolPattern = new RegExp( |
| 486 '^(?:$_publicIdentifierRE(?:\$|[.](?!\$)))+?\$'); |
| 487 |
| 488 /// Operator names allowed as symbols. The name of the oeprators is the same as |
| 489 /// the operator itself except for unary minus, where the name is "unary-". |
| 490 const String _operatorRE = |
| 491 r'(?:[\-+*/%&|^]|\[\]=?|==|~/?|<[<=]?|>[>=]?|unary-)'; |
| 492 |
| 493 /// Pattern that matches public symbols. |
| 494 final RegExp _publicSymbolPattern = new RegExp( |
| 495 '^(?:$_operatorRE\$|$_publicIdentifierRE(?:=?\$|[.](?!\$)))+?\$'); |
| OLD | NEW |