Chromium Code Reviews| Index: runtime/lib/expando_patch.dart |
| diff --git a/runtime/lib/expando_patch.dart b/runtime/lib/expando_patch.dart |
| index e3763370a224531962b5d295c2d7f39ff3faf095..a900bb88fa7613a11b8e147a038d14d07dec9867 100644 |
| --- a/runtime/lib/expando_patch.dart |
| +++ b/runtime/lib/expando_patch.dart |
| @@ -5,53 +5,52 @@ |
| patch class Expando<T> { |
| /* patch */ T operator[](Object object) { |
| _checkType(object); |
| - var weakProperty = _find(this); |
| - var list = weakProperty.value; |
| var doCompact = false; |
| var result = null; |
| - for (int i = 0; i < list.length; ++i) { |
| - var key = list[i].key; |
| - if (key === object) { |
| - result = list[i].value; |
| - break; |
| + if (_data !== null) { |
|
hausner
2012/09/13 20:06:48
If you declare the constructor external and implem
cshapiro
2012/09/13 21:19:41
Good idea. Done.
|
| + for (int i = 0; i < _data.length; ++i) { |
| + var key = _data[i].key; |
| + if (key === object) { |
| + result = _data[i].value; |
| + break; |
| + } |
| + if (key === null) { |
| + doCompact = true; |
| + _data[i] = null; |
| + } |
| } |
| - if (key === null) { |
| - doCompact = true; |
| - list[i] = null; |
| + if (doCompact) { |
| + _data = _data.filter((e) => (e !== null)); |
| } |
| } |
| - if (doCompact) { |
| - weakProperty.value = list.filter((e) => (e !== null)); |
| - } |
| return result; |
| } |
| /* patch */ void operator[]=(Object object, T value) { |
| _checkType(object); |
| - var weakProperty = _find(this); |
| - var list = weakProperty.value; |
| + if (_data === null) _data = new List(); |
| var doCompact = false; |
| int i = 0; |
| - for (; i < list.length; ++i) { |
| - var key = list[i].key; |
| + for (; i < _data.length; ++i) { |
| + var key = _data[i].key; |
| if (key === object) { |
| break; |
| } |
| if (key === null) { |
| doCompact = true; |
| - list[i] = null; |
| + _data[i] = null; |
| } |
| } |
| - if (i !== list.length && value === null) { |
| + if (i !== _data.length && value === null) { |
| doCompact = true; |
| - list[i] = null; |
| - } else if (i !== list.length) { |
| - list[i].value = value; |
| + _data[i] = null; |
| + } else if (i !== _data.length) { |
| + _data[i].value = value; |
| } else { |
| - list.add(new _WeakProperty(object, value)); |
| + _data.add(new _WeakProperty(object, value)); |
| } |
| if (doCompact) { |
| - weakProperty.value = list.filter((e) => (e !== null)); |
| + _data = _data.filter((e) => (e !== null)); |
| } |
| } |
| @@ -64,29 +63,5 @@ patch class Expando<T> { |
| } |
| } |
| - static _find(expando) { |
| - if (_data === null) _data = new List(); |
| - var doCompact = false; |
| - int i = 0; |
| - for (; i < _data.length; ++i) { |
| - var key = _data[i].key; |
| - if (key == expando) { |
| - break; |
| - } |
| - if (key === null) { |
| - doCompact = true; |
| - _data[i] = null; |
| - } |
| - } |
| - if (i == _data.length) { |
| - _data.add(new _WeakProperty(expando, new List())); |
| - } |
| - var result = _data[i]; |
| - if (doCompact) { |
| - _data = _data.filter((e) => (e !== null)); |
| - } |
| - return result; |
| - } |
| - |
| - static List _data; |
| + List _data; |
| } |