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

Side by Side Diff: runtime/vm/dart_api_impl.cc

Issue 16390002: Make ImmutableArray a sub class of AllStatic. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 | runtime/vm/object.h » ('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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 #include "include/dart_api.h" 5 #include "include/dart_api.h"
6 6
7 #include "platform/assert.h" 7 #include "platform/assert.h"
8 #include "vm/bigint_operations.h" 8 #include "vm/bigint_operations.h"
9 #include "vm/class_finalizer.h" 9 #include "vm/class_finalizer.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 2025 matching lines...) Expand 10 before | Expand all | Expand 10 after
2036 2036
2037 2037
2038 DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list, 2038 DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list,
2039 intptr_t index, 2039 intptr_t index,
2040 Dart_Handle value) { 2040 Dart_Handle value) {
2041 Isolate* isolate = Isolate::Current(); 2041 Isolate* isolate = Isolate::Current();
2042 DARTSCOPE(isolate); 2042 DARTSCOPE(isolate);
2043 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(list)); 2043 const Object& obj = Object::Handle(isolate, Api::UnwrapHandle(list));
2044 // If the list is immutable we call into Dart for the indexed setter to 2044 // If the list is immutable we call into Dart for the indexed setter to
2045 // get the unsupported operation exception as the result. 2045 // get the unsupported operation exception as the result.
2046 if (obj.IsArray() && !obj.IsImmutableArray()) { 2046 if (obj.IsArray() && !Array::Cast(obj).IsImmutable()) {
2047 SET_LIST_ELEMENT(isolate, Array, obj, index, value); 2047 SET_LIST_ELEMENT(isolate, Array, obj, index, value);
2048 } else if (obj.IsGrowableObjectArray()) { 2048 } else if (obj.IsGrowableObjectArray()) {
2049 SET_LIST_ELEMENT(isolate, GrowableObjectArray, obj, index, value); 2049 SET_LIST_ELEMENT(isolate, GrowableObjectArray, obj, index, value);
2050 } else if (obj.IsError()) { 2050 } else if (obj.IsError()) {
2051 return list; 2051 return list;
2052 } else { 2052 } else {
2053 CHECK_CALLBACK_STATE(isolate); 2053 CHECK_CALLBACK_STATE(isolate);
2054 2054
2055 // Check and handle a dart object that implements the List interface. 2055 // Check and handle a dart object that implements the List interface.
2056 const Instance& instance = 2056 const Instance& instance =
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2290 if (Utils::RangeCheck(offset, length, array.Length())) { 2290 if (Utils::RangeCheck(offset, length, array.Length())) {
2291 NoGCScope no_gc; 2291 NoGCScope no_gc;
2292 memmove(reinterpret_cast<uint8_t*>(array.DataAddr(offset)), 2292 memmove(reinterpret_cast<uint8_t*>(array.DataAddr(offset)),
2293 native_array, 2293 native_array,
2294 length); 2294 length);
2295 return Api::Success(); 2295 return Api::Success();
2296 } 2296 }
2297 return Api::NewError("Invalid length passed in to access list elements"); 2297 return Api::NewError("Invalid length passed in to access list elements");
2298 } 2298 }
2299 } 2299 }
2300 if (obj.IsArray() && !obj.IsImmutableArray()) { 2300 if (obj.IsArray() && !Array::Cast(obj).IsImmutable()) {
2301 // If the list is immutable we call into Dart for the indexed setter to 2301 // If the list is immutable we call into Dart for the indexed setter to
2302 // get the unsupported operation exception as the result. 2302 // get the unsupported operation exception as the result.
2303 SET_LIST_ELEMENT_AS_BYTES(isolate, 2303 SET_LIST_ELEMENT_AS_BYTES(isolate,
2304 Array, 2304 Array,
2305 obj, 2305 obj,
2306 native_array, 2306 native_array,
2307 offset, 2307 offset,
2308 length); 2308 length);
2309 } 2309 }
2310 if (obj.IsGrowableObjectArray()) { 2310 if (obj.IsGrowableObjectArray()) {
(...skipping 2526 matching lines...) Expand 10 before | Expand all | Expand 10 after
4837 } 4837 }
4838 { 4838 {
4839 NoGCScope no_gc; 4839 NoGCScope no_gc;
4840 RawObject* raw_obj = obj.raw(); 4840 RawObject* raw_obj = obj.raw();
4841 isolate->heap()->SetPeer(raw_obj, peer); 4841 isolate->heap()->SetPeer(raw_obj, peer);
4842 } 4842 }
4843 return Api::Success(); 4843 return Api::Success();
4844 } 4844 }
4845 4845
4846 } // namespace dart 4846 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698