// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file // 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 Expando { /* patch */ Expando([this.name]) : _data = new List(); /* patch */ T operator[](Object object) { _checkType(object); var doCompact = false; var result = null; for (int i = 0; i < _data.length; ++i) { var key = _data[i].key; if (identical(key, object)) { result = _data[i].value; break; } if (key == null) { doCompact = true; _data[i] = null; } } if (doCompact) { _data = _data.where((e) => (e != null)).toList(); } return result; } /* patch */ void operator[]=(Object object, T value) { _checkType(object); var doCompact = false; int i = 0; for (; i < _data.length; ++i) { var key = _data[i].key; if (identical(key, object)) { break; } if (key == null) { doCompact = true; _data[i] = null; } } if (i !== _data.length && value == null) { doCompact = true; _data[i] = null; } else if (i !== _data.length) { _data[i].value = value; } else { _data.add(new _WeakProperty(object, value)); } if (doCompact) { _data = _data.where((e) => (e != null)).toList(); } } static _checkType(object) { if (object == null || object is bool || object is num || object is String) { throw new ArgumentError(object); } } List _data; }