Index: dart/runtime/lib/symbol_patch.dart |
diff --git a/dart/runtime/lib/symbol_patch.dart b/dart/runtime/lib/symbol_patch.dart |
index 67713487371ad5a5843055b030a3f6b09f229c1e..4359019fd74dc7b26f49aede99fd9c875fe2f169 100644 |
--- a/dart/runtime/lib/symbol_patch.dart |
+++ b/dart/runtime/lib/symbol_patch.dart |
@@ -2,34 +2,44 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-patch class Symbol { |
- final String _name; |
+patch class Symbol { |
/* patch */ const Symbol(String name) |
- : this._name = _validate(name); |
- |
+ : this._name = _validate(name); |
static final RegExp _validationPattern = |
- new RegExp(r'^[a-zA-Z$][a-zA-Z$0-9_]*=?'); |
+ new RegExp(r'^(?:[a-zA-Z$][a-zA-Z$0-9_]*\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|' |
+ r'-|' |
+ r'unary-|' |
+ r'\[\]=|' |
+ r'~|' |
+ r'==|' |
+ r'\[\]|' |
+ r'\*|' |
+ r'/|' |
+ r'%|' |
+ r'~/|' |
+ r'\+|' |
+ r'<<|' |
+ r'>>|' |
+ r'>=|' |
+ r'>|' |
+ r'<=|' |
+ r'<|' |
+ r'&|' |
+ r'\^|' |
+ r'\|' |
+ r')$'); |
static _validate(String name) { |
if (name is! String) throw new ArgumentError('name must be a String'); |
- if (name.isEmpty) return; |
+ if (name.isEmpty) return name; |
if (name.startsWith('_')) { |
throw new ArgumentError('"$name" is a private identifier'); |
} |
if (!_validationPattern.hasMatch(name)) { |
throw new ArgumentError( |
- '"$name" is not an identifier or an empty String'); |
+ '"$name" is not an identifier or an empty String'); |
} |
return name; |
} |
- |
- /* patch */ bool operator ==(other) { |
- return other is Symbol && _name == other._name; |
- } |
- |
- /* patch */ int get hashCode { |
- const arbitraryPrime = 664597; |
- return 0x1fffffff & (arbitraryPrime * _name.hashCode); |
- } |
} |