1a6d1eca32
Allow members of patch classes to be annotated with @patch. The VM ignores the annotation. I simply replaces the original method if the name matches, or reports an error if field names match. Adding a bit is_patched to members to do more checking remains a TODO. There are currently no unused bits available, and I don’t want to increase the size of Function objects for this. BUG= R=asiva@google.com Review URL: https://codereview.chromium.org/2230383003 .
26 lines
909 B
Dart
26 lines
909 B
Dart
// 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 Map<K, V> {
|
|
// Factory constructing a Map from a parser generated Map literal.
|
|
// [elements] contains n key-value pairs.
|
|
// The keys are at position 2*n and are already type checked by the parser
|
|
// in checked mode.
|
|
// The values are at position 2*n+1 and are not yet type checked.
|
|
factory Map._fromLiteral(List elements) {
|
|
var map = new LinkedHashMap<K, V>();
|
|
var len = elements.length;
|
|
for (int i = 1; i < len; i += 2) {
|
|
map[elements[i - 1]] = elements[i];
|
|
}
|
|
return map;
|
|
}
|
|
|
|
@patch factory Map.unmodifiable(Map other) {
|
|
return new UnmodifiableMapView<K, V>(new Map.from(other));
|
|
}
|
|
|
|
@patch factory Map() = LinkedHashMap<K, V>;
|
|
}
|