Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Side by Side Diff: lib/compiler/implementation/lib/core_patch.dart

Issue 10908173: Patch expando directly in corelib instead of going through coreimpl. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix indentation typo Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | lib/compiler/implementation/lib/coreimpl_patch.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 // Patch file for dart:core classes. 5 // Patch file for dart:core classes.
6 6
7 // Patch for Object implementation. 7 // Patch for Object implementation.
8 patch class Object { 8 patch class Object {
9 patch String toString() { 9 patch String toString() {
10 return Primitives.objectToString(this); 10 return Primitives.objectToString(this);
11 } 11 }
12 12
13 patch void noSuchMethod(String name, List args) { 13 patch void noSuchMethod(String name, List args) {
14 throw new NoSuchMethodException(this, name, args); 14 throw new NoSuchMethodException(this, name, args);
15 } 15 }
16 } 16 }
17
18
19 // Patch for Expando implementation.
20 patch class Expando<T> {
21
22 patch T operator[](Object object) {
23 var values = Primitives.getProperty(object, _EXPANDO_PROPERTY_NAME);
24 return (values === null) ? null : Primitives.getProperty(values, _getKey());
25 }
26
27 patch void operator[]=(Object object, T value) {
28 var values = Primitives.getProperty(object, _EXPANDO_PROPERTY_NAME);
29 if (values === null) {
30 values = new Object();
31 Primitives.setProperty(object, _EXPANDO_PROPERTY_NAME, values);
32 }
33 Primitives.setProperty(values, _getKey(), value);
34 }
35
36 String _getKey() {
37 String key = Primitives.getProperty(this, _KEY_PROPERTY_NAME);
38 if (key === null) {
39 key = "expando\$key\$${_keyCount++}";
40 Primitives.setProperty(this, _KEY_PROPERTY_NAME, key);
41 }
42 return key;
43 }
44
45 static const String _KEY_PROPERTY_NAME = 'expando\$key';
46 static const String _EXPANDO_PROPERTY_NAME = 'expando\$values';
47 static int _keyCount = 0;
48 }
OLDNEW
« no previous file with comments | « no previous file | lib/compiler/implementation/lib/coreimpl_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698