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

Unified Diff: lib/runtime/dart_sdk.js

Issue 1939093003: List.unmodifiable (Closed) Base URL: https://github.com/dart-lang/dev_compiler@master
Patch Set: Created 4 years, 8 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:
Download patch
« no previous file with comments | « no previous file | tool/input_sdk/lib/core/list.dart » ('j') | tool/input_sdk/lib/internal/list.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/runtime/dart_sdk.js
diff --git a/lib/runtime/dart_sdk.js b/lib/runtime/dart_sdk.js
index 5386e8505573e6e69434132cccfccd57828265ac..abb7e8a0d48aa7d580ea93d083ef9d6c5bd0d8ae 100644
--- a/lib/runtime/dart_sdk.js
+++ b/lib/runtime/dart_sdk.js
@@ -2012,6 +2012,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
dart.fn(_interceptors.setDispatchProperty);
_interceptors.JSArray$ = dart.generic(E => {
dart.defineExtensionNames([
+ 'checkMutable',
'checkGrowable',
'add',
'removeAt',
@@ -2085,6 +2086,16 @@ dart_library.library('dart_sdk', null, /* Imports */[
list.fixed$length = Array;
return list;
}
+ static markUnmodifiableList(list) {
+ list.fixed$length = Array;
+ list.immutable$list = Array;
+ return list;
+ }
+ [dartx.checkMutable](reason) {
+ if (this.immutable$list) {
+ dart.throw(new core.UnsupportedError(dart.as(reason, core.String)));
+ }
+ }
[dartx.checkGrowable](reason) {
if (this.fixed$length) {
dart.throw(new core.UnsupportedError(dart.as(reason, core.String)));
@@ -2367,6 +2378,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
[dartx.set](index, value) {
dart.as(value, E);
+ this[dartx.checkMutable]('indexed set');
if (!(typeof index == 'number')) dart.throw(new core.ArgumentError(index));
if (dart.notNull(index) >= dart.notNull(this[dartx.length]) || dart.notNull(index) < 0) dart.throw(new core.RangeError.value(index));
this[index] = value;
@@ -2386,6 +2398,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
markGrowable: [_interceptors.JSArray$(E), [dart.dynamic]]
}),
methods: () => ({
+ [dartx.checkMutable]: [dart.dynamic, [dart.dynamic]],
[dartx.checkGrowable]: [dart.dynamic, [dart.dynamic]],
[dartx.add]: [dart.void, [E]],
[dartx.removeAt]: [E, [core.int]],
@@ -2432,8 +2445,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
[dartx.set]: [dart.void, [core.int, E]],
[dartx.asMap]: [core.Map$(core.int, E), []]
}),
- statics: () => ({markFixedList: [core.List, [core.List]]}),
- names: ['markFixedList']
+ statics: () => ({
+ markFixedList: [core.List, [core.List]],
+ markUnmodifiableList: [core.List, [core.List]]
+ }),
+ names: ['markFixedList', 'markUnmodifiableList']
});
JSArray[dart.metadata] = () => [dart.const(new _js_helper.JsPeerInterface({name: 'Array'}))];
return JSArray;
@@ -2460,6 +2476,15 @@ dart_library.library('dart_sdk', null, /* Imports */[
return JSExtendableArray;
});
_interceptors.JSExtendableArray = _interceptors.JSExtendableArray$();
+ _interceptors.JSUnmodifiableArray$ = dart.generic(E => {
+ class JSUnmodifiableArray extends _interceptors.JSArray$(E) {
+ JSUnmodifiableArray() {
+ super.JSArray();
+ }
+ }
+ return JSUnmodifiableArray;
+ });
+ _interceptors.JSUnmodifiableArray = _interceptors.JSUnmodifiableArray$();
const _isInt32 = Symbol('_isInt32');
const _tdivSlow = Symbol('_tdivSlow');
const _shlPositive = Symbol('_shlPositive');
@@ -6342,6 +6367,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
return growableList;
};
dart.lazyFn(_internal.makeListFixedLength, () => [core.List, [core.List]]);
+ _internal.makeFixedListUnmodifiable = function(list) {
+ _interceptors.JSArray.markUnmodifiableList(list);
+ return list;
+ };
+ dart.lazyFn(_internal.makeFixedListUnmodifiable, () => [core.List, [core.List]]);
_internal.Lists = class Lists extends core.Object {
static copy(src, srcStart, dst, dstStart, count) {
if (dart.notNull(srcStart) < dart.notNull(dstStart)) {
@@ -23588,6 +23618,10 @@ dart_library.library('dart_sdk', null, /* Imports */[
}
return result;
}
+ static unmodifiable(elements) {
+ let result = core.List$(E).from(elements, {growable: false});
+ return dart.as(_internal.makeFixedListUnmodifiable(result), core.List$(E));
+ }
[Symbol.iterator]() {
return new dart.JsIterator(this[dartx.iterator]);
}
@@ -23598,7 +23632,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
new: [core.List$(E), [], [core.int]],
filled: [core.List$(E), [core.int, E]],
from: [core.List$(E), [core.Iterable], {growable: core.bool}],
- generate: [core.List$(E), [core.int, dart.functionType(E, [core.int])], {growable: core.bool}]
+ generate: [core.List$(E), [core.int, dart.functionType(E, [core.int])], {growable: core.bool}],
+ unmodifiable: [core.List$(E), [core.Iterable]]
})
});
return List;
« no previous file with comments | « no previous file | tool/input_sdk/lib/core/list.dart » ('j') | tool/input_sdk/lib/internal/list.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698