Chromium Code Reviews| Index: sdk/lib/_internal/lib/js_helper.dart |
| diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart |
| index fe0fcc1b7cae1cb4fa568ec23fc95cbf4409f169..b403ecf86200edfbe901d20864eb950ee9073204 100644 |
| --- a/sdk/lib/_internal/lib/js_helper.dart |
| +++ b/sdk/lib/_internal/lib/js_helper.dart |
| @@ -1421,17 +1421,36 @@ class _StackTrace implements StackTrace { |
| } |
| } |
| +int _objectHashCode(var object) { |
| + if (object == null || |
| + !identical(JS('String', 'typeof #', object), 'object')) { |
|
ngeoffray
2013/09/18 14:32:08
!identical => !=
Johnni Winther
2013/09/18 14:53:47
Done.
|
| + return object.hashCode; |
| + } else { |
| + return Primitives.objectHashCode(object); |
| + } |
| +} |
| + |
| /** |
| * Called by generated code to build a map literal. [keyValuePairs] is |
| * a list of key, value, key, value, ..., etc. |
| */ |
| -makeLiteralMap(List keyValuePairs) { |
| - Iterator iterator = keyValuePairs.iterator; |
| - Map result = new LinkedHashMap(); |
| - while (iterator.moveNext()) { |
| - String key = iterator.current; |
| - iterator.moveNext(); |
| - var value = iterator.current; |
| +makeLiteralMap(keyValuePairs) { |
| + return fillLiteralMap(keyValuePairs, new LinkedHashMap()); |
| +} |
| + |
| +makeConstantMap(keyValuePairs) { |
|
ngeoffray
2013/09/18 14:32:08
Where is that being registered?
Johnni Winther
2013/09/18 14:53:47
It is called in-code in GeneralConstantMap._getMap
|
| + return fillLiteralMap(keyValuePairs, |
| + new LinkedHashMap(equals: identical, hashCode: _objectHashCode)); |
| +} |
| + |
| +fillLiteralMap(keyValuePairs, Map result) { |
| + // TODO(johnniwinther): Use JSArray to optimize this code instead of calling |
| + // [getLength] and [getIndex]. |
| + int index = 0; |
| + int length = getLength(keyValuePairs); |
| + while (index < length) { |
| + var key = getIndex(keyValuePairs, index++); |
| + var value = getIndex(keyValuePairs, index++); |
| result[key] = value; |
| } |
| return result; |