Index: pkg/dev_compiler/tool/input_sdk/lib/internal/symbol.dart |
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/internal/symbol.dart b/pkg/dev_compiler/tool/input_sdk/lib/internal/symbol.dart |
index 6722d9840fd7ab7cc42a1f88e8b000ec9dbb94d9..b1aa85595f8663d8375ded41036a52dd586b1cd3 100644 |
--- a/pkg/dev_compiler/tool/input_sdk/lib/internal/symbol.dart |
+++ b/pkg/dev_compiler/tool/input_sdk/lib/internal/symbol.dart |
@@ -15,6 +15,9 @@ part of dart._internal; |
class Symbol implements core.Symbol { |
final String _name; |
+ // Used internally by DDC to map ES6 symbols to Dart. |
+ final dynamic _nativeSymbol; |
+ |
/** |
* Source of RegExp matching Dart reserved words. |
* |
@@ -95,22 +98,28 @@ class Symbol implements core.Symbol { |
* The empty symbol is handled before this regexp is used, and is not |
* accepted. |
*/ |
- static final RegExp symbolPattern = new RegExp( |
- '^(?:$operatorRE\$|$identifierRE(?:=?\$|[.](?!\$)))+?\$'); |
+ static final RegExp symbolPattern = |
+ new RegExp('^(?:$operatorRE\$|$identifierRE(?:=?\$|[.](?!\$)))+?\$'); |
external const Symbol(String name); |
+ external const Symbol.es6(String name, nativeSymbol); |
+ |
/** |
* Platform-private method used by the mirror system to create |
* otherwise invalid names. |
*/ |
- const Symbol.unvalidated(this._name); |
+ const Symbol.unvalidated(this._name) : this._nativeSymbol = null; |
// This is called by dart2js. |
Symbol.validated(String name) |
- : this._name = validatePublicSymbol(name); |
+ : this._name = validatePublicSymbol(name), |
+ this._nativeSymbol = null; |
- bool operator ==(Object other) => other is Symbol && _name == other._name; |
+ bool operator ==(Object other) => |
+ other is Symbol && |
+ _name == other._name && |
+ _nativeSymbol == other._nativeSymbol; |
external int get hashCode; |
@@ -119,6 +128,8 @@ class Symbol implements core.Symbol { |
/// Platform-private accessor which cannot be called from user libraries. |
static String getName(Symbol symbol) => symbol._name; |
+ static dynamic getNativeSymbol(Symbol symbol) => symbol._nativeSymbol; |
+ |
static String validatePublicSymbol(String name) { |
if (name.isEmpty || publicSymbolPattern.hasMatch(name)) return name; |
if (name.startsWith('_')) { |
@@ -127,8 +138,7 @@ class Symbol implements core.Symbol { |
// message. |
throw new ArgumentError('"$name" is a private identifier'); |
} |
- throw new ArgumentError( |
- '"$name" is not a valid (qualified) symbol name'); |
+ throw new ArgumentError('"$name" is not a valid (qualified) symbol name'); |
} |
/** |