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

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

Issue 328923002: Lazy loading of deferred libraries (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 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
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 "vm/object.h" 5 #include "vm/object.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 1011 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 object_store->set_external_two_byte_string_class(cls); 1022 object_store->set_external_two_byte_string_class(cls);
1023 RegisterPrivateClass(cls, Symbols::ExternalTwoByteString(), core_lib); 1023 RegisterPrivateClass(cls, Symbols::ExternalTwoByteString(), core_lib);
1024 pending_classes.Add(cls); 1024 pending_classes.Add(cls);
1025 1025
1026 // Pre-register the isolate library so the native class implementations 1026 // Pre-register the isolate library so the native class implementations
1027 // can be hooked up before compiling it. 1027 // can be hooked up before compiling it.
1028 Library& isolate_lib = 1028 Library& isolate_lib =
1029 Library::Handle(isolate, Library::LookupLibrary(Symbols::DartIsolate())); 1029 Library::Handle(isolate, Library::LookupLibrary(Symbols::DartIsolate()));
1030 if (isolate_lib.IsNull()) { 1030 if (isolate_lib.IsNull()) {
1031 isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true); 1031 isolate_lib = Library::NewLibraryHelper(Symbols::DartIsolate(), true);
1032 isolate_lib.SetLoadRequested();
1032 isolate_lib.Register(); 1033 isolate_lib.Register();
1033 isolate->object_store()->set_bootstrap_library(ObjectStore::kIsolate, 1034 isolate->object_store()->set_bootstrap_library(ObjectStore::kIsolate,
1034 isolate_lib); 1035 isolate_lib);
1035 } 1036 }
1036 ASSERT(!isolate_lib.IsNull()); 1037 ASSERT(!isolate_lib.IsNull());
1037 ASSERT(isolate_lib.raw() == Library::IsolateLibrary()); 1038 ASSERT(isolate_lib.raw() == Library::IsolateLibrary());
1038 1039
1039 cls = Class::New<Capability>(); 1040 cls = Class::New<Capability>();
1040 RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib); 1041 RegisterPrivateClass(cls, Symbols::_CapabilityImpl(), isolate_lib);
1041 pending_classes.Add(cls); 1042 pending_classes.Add(cls);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 1151
1151 cls = Class::New<WeakProperty>(); 1152 cls = Class::New<WeakProperty>();
1152 object_store->set_weak_property_class(cls); 1153 object_store->set_weak_property_class(cls);
1153 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib); 1154 RegisterPrivateClass(cls, Symbols::_WeakProperty(), core_lib);
1154 1155
1155 // Pre-register the mirrors library so we can place the vm class 1156 // Pre-register the mirrors library so we can place the vm class
1156 // MirrorReference there rather than the core library. 1157 // MirrorReference there rather than the core library.
1157 lib = Library::LookupLibrary(Symbols::DartMirrors()); 1158 lib = Library::LookupLibrary(Symbols::DartMirrors());
1158 if (lib.IsNull()) { 1159 if (lib.IsNull()) {
1159 lib = Library::NewLibraryHelper(Symbols::DartMirrors(), true); 1160 lib = Library::NewLibraryHelper(Symbols::DartMirrors(), true);
1161 lib.SetLoadRequested();
1160 lib.Register(); 1162 lib.Register();
1161 isolate->object_store()->set_bootstrap_library(ObjectStore::kMirrors, 1163 isolate->object_store()->set_bootstrap_library(ObjectStore::kMirrors,
1162 lib); 1164 lib);
1163 } 1165 }
1164 ASSERT(!lib.IsNull()); 1166 ASSERT(!lib.IsNull());
1165 ASSERT(lib.raw() == Library::MirrorsLibrary()); 1167 ASSERT(lib.raw() == Library::MirrorsLibrary());
1166 1168
1167 cls = Class::New<MirrorReference>(); 1169 cls = Class::New<MirrorReference>();
1168 RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib); 1170 RegisterPrivateClass(cls, Symbols::_MirrorReference(), lib);
1169 1171
1170 // Pre-register the profiler library so we can place the vm class 1172 // Pre-register the profiler library so we can place the vm class
1171 // UserTag there rather than the core library. 1173 // UserTag there rather than the core library.
1172 lib = Library::LookupLibrary(Symbols::DartProfiler()); 1174 lib = Library::LookupLibrary(Symbols::DartProfiler());
1173 if (lib.IsNull()) { 1175 if (lib.IsNull()) {
1174 lib = Library::NewLibraryHelper(Symbols::DartProfiler(), true); 1176 lib = Library::NewLibraryHelper(Symbols::DartProfiler(), true);
1177 lib.SetLoadRequested();
1175 lib.Register(); 1178 lib.Register();
1176 isolate->object_store()->set_bootstrap_library(ObjectStore::kProfiler, 1179 isolate->object_store()->set_bootstrap_library(ObjectStore::kProfiler,
1177 lib); 1180 lib);
1178 } 1181 }
1179 ASSERT(!lib.IsNull()); 1182 ASSERT(!lib.IsNull());
1180 ASSERT(lib.raw() == Library::ProfilerLibrary()); 1183 ASSERT(lib.raw() == Library::ProfilerLibrary());
1181 1184
1182 lib = Library::LookupLibrary(Symbols::DartProfiler()); 1185 lib = Library::LookupLibrary(Symbols::DartProfiler());
1183 ASSERT(!lib.IsNull()); 1186 ASSERT(!lib.IsNull());
1184 cls = Class::New<UserTag>(); 1187 cls = Class::New<UserTag>();
1185 RegisterPrivateClass(cls, Symbols::_UserTag(), lib); 1188 RegisterPrivateClass(cls, Symbols::_UserTag(), lib);
1186 pending_classes.Add(cls); 1189 pending_classes.Add(cls);
1187 1190
1188 // Setup some default native field classes which can be extended for 1191 // Setup some default native field classes which can be extended for
1189 // specifying native fields in dart classes. 1192 // specifying native fields in dart classes.
1190 Library::InitNativeWrappersLibrary(isolate); 1193 Library::InitNativeWrappersLibrary(isolate);
1191 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null()); 1194 ASSERT(isolate->object_store()->native_wrappers_library() != Library::null());
1192 1195
1193 // Pre-register the typed_data library so the native class implementations 1196 // Pre-register the typed_data library so the native class implementations
1194 // can be hooked up before compiling it. 1197 // can be hooked up before compiling it.
1195 lib = Library::LookupLibrary(Symbols::DartTypedData()); 1198 lib = Library::LookupLibrary(Symbols::DartTypedData());
1196 if (lib.IsNull()) { 1199 if (lib.IsNull()) {
1197 lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true); 1200 lib = Library::NewLibraryHelper(Symbols::DartTypedData(), true);
1201 lib.SetLoadRequested();
1198 lib.Register(); 1202 lib.Register();
1199 isolate->object_store()->set_bootstrap_library(ObjectStore::kTypedData, 1203 isolate->object_store()->set_bootstrap_library(ObjectStore::kTypedData,
1200 lib); 1204 lib);
1201 } 1205 }
1202 ASSERT(!lib.IsNull()); 1206 ASSERT(!lib.IsNull());
1203 ASSERT(lib.raw() == Library::TypedDataLibrary()); 1207 ASSERT(lib.raw() == Library::TypedDataLibrary());
1204 const intptr_t typed_data_class_array_length = 1208 const intptr_t typed_data_class_array_length =
1205 RawObject::NumberOfTypedDataClasses(); 1209 RawObject::NumberOfTypedDataClasses();
1206 Array& typed_data_classes = 1210 Array& typed_data_classes =
1207 Array::Handle(Array::New(typed_data_class_array_length)); 1211 Array::Handle(Array::New(typed_data_class_array_length));
(...skipping 7100 matching lines...) Expand 10 before | Expand all | Expand 10 after
8308 8312
8309 void Library::SetName(const String& name) const { 8313 void Library::SetName(const String& name) const {
8310 // Only set name once. 8314 // Only set name once.
8311 ASSERT(!Loaded()); 8315 ASSERT(!Loaded());
8312 ASSERT(name.IsSymbol()); 8316 ASSERT(name.IsSymbol());
8313 StorePointer(&raw_ptr()->name_, name.raw()); 8317 StorePointer(&raw_ptr()->name_, name.raw());
8314 } 8318 }
8315 8319
8316 8320
8317 void Library::SetLoadInProgress() const { 8321 void Library::SetLoadInProgress() const {
8318 // Should not be already loaded. 8322 // Must not already be in the process of being loaded.
8323 ASSERT(raw_ptr()->load_state_ <= RawLibrary::kLoadRequested);
8324 raw_ptr()->load_state_ = RawLibrary::kLoadInProgress;
8325 }
8326
8327
8328 void Library::SetLoadRequested() const {
8329 // Must not be already loaded.
8319 ASSERT(raw_ptr()->load_state_ == RawLibrary::kAllocated); 8330 ASSERT(raw_ptr()->load_state_ == RawLibrary::kAllocated);
8320 raw_ptr()->load_state_ = RawLibrary::kLoadInProgress; 8331 raw_ptr()->load_state_ = RawLibrary::kLoadRequested;
8321 } 8332 }
8322 8333
8323 8334
8324 void Library::SetLoaded() const { 8335 void Library::SetLoaded() const {
8325 // Should not be already loaded or just allocated. 8336 // Should not be already loaded or just allocated.
8326 ASSERT(LoadInProgress()); 8337 ASSERT(LoadInProgress());
8327 raw_ptr()->load_state_ = RawLibrary::kLoaded; 8338 raw_ptr()->load_state_ = RawLibrary::kLoaded;
8328 } 8339 }
8329 8340
8330 8341
(...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after
9190 9201
9191 RawLibrary* Library::New(const String& url) { 9202 RawLibrary* Library::New(const String& url) {
9192 return NewLibraryHelper(url, false); 9203 return NewLibraryHelper(url, false);
9193 } 9204 }
9194 9205
9195 9206
9196 void Library::InitCoreLibrary(Isolate* isolate) { 9207 void Library::InitCoreLibrary(Isolate* isolate) {
9197 const String& core_lib_url = Symbols::DartCore(); 9208 const String& core_lib_url = Symbols::DartCore();
9198 const Library& core_lib = 9209 const Library& core_lib =
9199 Library::Handle(Library::NewLibraryHelper(core_lib_url, false)); 9210 Library::Handle(Library::NewLibraryHelper(core_lib_url, false));
9211 core_lib.SetLoadRequested();
9200 core_lib.Register(); 9212 core_lib.Register();
9201 isolate->object_store()->set_bootstrap_library(ObjectStore::kCore, core_lib); 9213 isolate->object_store()->set_bootstrap_library(ObjectStore::kCore, core_lib);
9202 isolate->object_store()->set_root_library(Library::Handle()); 9214 isolate->object_store()->set_root_library(Library::Handle());
9203 9215
9204 // Hook up predefined classes without setting their library pointers. These 9216 // Hook up predefined classes without setting their library pointers. These
9205 // classes are coming from the VM isolate, and are shared between multiple 9217 // classes are coming from the VM isolate, and are shared between multiple
9206 // isolates so setting their library pointers would be wrong. 9218 // isolates so setting their library pointers would be wrong.
9207 const Class& cls = Class::Handle(Object::dynamic_class()); 9219 const Class& cls = Class::Handle(Object::dynamic_class());
9208 core_lib.AddObject(cls, String::Handle(cls.Name())); 9220 core_lib.AddObject(cls, String::Handle(cls.Name()));
9209 } 9221 }
(...skipping 17 matching lines...) Expand all
9227 9239
9228 9240
9229 void Library::InitNativeWrappersLibrary(Isolate* isolate) { 9241 void Library::InitNativeWrappersLibrary(Isolate* isolate) {
9230 static const int kNumNativeWrappersClasses = 4; 9242 static const int kNumNativeWrappersClasses = 4;
9231 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10); 9243 ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10);
9232 const String& native_flds_lib_url = Symbols::DartNativeWrappers(); 9244 const String& native_flds_lib_url = Symbols::DartNativeWrappers();
9233 const Library& native_flds_lib = Library::Handle( 9245 const Library& native_flds_lib = Library::Handle(
9234 Library::NewLibraryHelper(native_flds_lib_url, false)); 9246 Library::NewLibraryHelper(native_flds_lib_url, false));
9235 const String& native_flds_lib_name = Symbols::DartNativeWrappersLibName(); 9247 const String& native_flds_lib_name = Symbols::DartNativeWrappersLibName();
9236 native_flds_lib.SetName(native_flds_lib_name); 9248 native_flds_lib.SetName(native_flds_lib_name);
9249 native_flds_lib.SetLoadRequested();
9237 native_flds_lib.Register(); 9250 native_flds_lib.Register();
9251 native_flds_lib.SetLoadInProgress();
9238 isolate->object_store()->set_native_wrappers_library(native_flds_lib); 9252 isolate->object_store()->set_native_wrappers_library(native_flds_lib);
9239 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass"; 9253 static const char* const kNativeWrappersClass = "NativeFieldWrapperClass";
9240 static const int kNameLength = 25; 9254 static const int kNameLength = 25;
9241 ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1)); 9255 ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1));
9242 char name_buffer[kNameLength]; 9256 char name_buffer[kNameLength];
9243 String& cls_name = String::Handle(); 9257 String& cls_name = String::Handle();
9244 for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) { 9258 for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) {
9245 OS::SNPrint(name_buffer, 9259 OS::SNPrint(name_buffer,
9246 kNameLength, 9260 kNameLength,
9247 "%s%d", 9261 "%s%d",
9248 kNativeWrappersClass, 9262 kNativeWrappersClass,
9249 fld_cnt); 9263 fld_cnt);
9250 cls_name = Symbols::New(name_buffer); 9264 cls_name = Symbols::New(name_buffer);
9251 Class::NewNativeWrapper(native_flds_lib, cls_name, fld_cnt); 9265 Class::NewNativeWrapper(native_flds_lib, cls_name, fld_cnt);
9252 } 9266 }
9267 native_flds_lib.SetLoaded();
9253 } 9268 }
9254 9269
9255 9270
9256 // Returns library with given url in current isolate, or NULL. 9271 // Returns library with given url in current isolate, or NULL.
9257 RawLibrary* Library::LookupLibrary(const String &url) { 9272 RawLibrary* Library::LookupLibrary(const String &url) {
9258 Isolate* isolate = Isolate::Current(); 9273 Isolate* isolate = Isolate::Current();
9259 Library& lib = Library::Handle(isolate, Library::null()); 9274 Library& lib = Library::Handle(isolate, Library::null());
9260 String& lib_url = String::Handle(isolate, String::null()); 9275 String& lib_url = String::Handle(isolate, String::null());
9261 GrowableObjectArray& libs = GrowableObjectArray::Handle( 9276 GrowableObjectArray& libs = GrowableObjectArray::Handle(
9262 isolate, isolate->object_store()->libraries()); 9277 isolate, isolate->object_store()->libraries());
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
9610 } 9625 }
9611 return Class::null(); 9626 return Class::null();
9612 } 9627 }
9613 9628
9614 9629
9615 void LibraryPrefix::set_is_loaded() const { 9630 void LibraryPrefix::set_is_loaded() const {
9616 raw_ptr()->is_loaded_ = true; 9631 raw_ptr()->is_loaded_ = true;
9617 } 9632 }
9618 9633
9619 9634
9620 void LibraryPrefix::LoadLibrary() const { 9635 bool LibraryPrefix::LoadLibrary() const {
9621 // Non-deferred prefixes are loaded. 9636 // Non-deferred prefixes are loaded.
9622 ASSERT(is_deferred_load() || is_loaded()); 9637 ASSERT(is_deferred_load() || is_loaded());
9623 if (is_loaded()) { 9638 if (is_loaded()) {
9624 return; 9639 return true; // Load request has already completed.
9625 } 9640 }
9626 InvalidateDependentCode(); 9641 ASSERT(is_deferred_load());
9627 set_is_loaded(); 9642 ASSERT(num_imports() == 1);
9643 // This is a prefix for a deferred library. If the library is not loaded
9644 // yet and isn't being loaded, call the library tag handler to schedule
9645 // loading. Once all outstanding load requests have completed, the embedder
9646 // will call the core library to:
9647 // - invalidate dependent code of this prefix;
9648 // - mark this prefixes as loaded;
9649 // - complete the future associated with this prefix.
9650 const Library& deferred_lib = Library::Handle(GetLibrary(0));
9651 if (deferred_lib.Loaded()) {
9652 this->set_is_loaded();
9653 return true;
9654 } else if (deferred_lib.LoadNotStarted()) {
9655 deferred_lib.SetLoadRequested();
9656 Isolate* isolate = Isolate::Current();
9657 const String& lib_url = String::Handle(isolate, deferred_lib.url());
9658 Dart_LibraryTagHandler handler = isolate->library_tag_handler();
9659 handler(Dart_kImportTag,
9660 Api::NewHandle(isolate, importer()),
9661 Api::NewHandle(isolate, lib_url.raw()));
9662 } else {
9663 // Another load request is in flight.
9664 ASSERT(deferred_lib.LoadRequested());
9665 }
9666 return false; // Load request not yet completed.
9628 } 9667 }
9629 9668
9630 9669
9631 RawArray* LibraryPrefix::dependent_code() const { 9670 RawArray* LibraryPrefix::dependent_code() const {
9632 return raw_ptr()->dependent_code_; 9671 return raw_ptr()->dependent_code_;
9633 } 9672 }
9634 9673
9635 9674
9636 void LibraryPrefix::set_dependent_code(const Array& array) const { 9675 void LibraryPrefix::set_dependent_code(const Array& array) const {
9637 StorePointer(&raw_ptr()->dependent_code_, array.raw()); 9676 StorePointer(&raw_ptr()->dependent_code_, array.raw());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
9676 ASSERT(is_deferred_load()); 9715 ASSERT(is_deferred_load());
9677 ASSERT(!is_loaded()); 9716 ASSERT(!is_loaded());
9678 PrefixDependentArray a(*this); 9717 PrefixDependentArray a(*this);
9679 a.Register(code); 9718 a.Register(code);
9680 } 9719 }
9681 9720
9682 9721
9683 void LibraryPrefix::InvalidateDependentCode() const { 9722 void LibraryPrefix::InvalidateDependentCode() const {
9684 PrefixDependentArray a(*this); 9723 PrefixDependentArray a(*this);
9685 a.DisableCode(); 9724 a.DisableCode();
9725 set_is_loaded();
9686 } 9726 }
9687 9727
9688 9728
9689 RawLibraryPrefix* LibraryPrefix::New() { 9729 RawLibraryPrefix* LibraryPrefix::New() {
9690 ASSERT(Isolate::Current()->object_store()->library_prefix_class() != 9730 ASSERT(Isolate::Current()->object_store()->library_prefix_class() !=
9691 Class::null()); 9731 Class::null());
9692 RawObject* raw = Object::Allocate(LibraryPrefix::kClassId, 9732 RawObject* raw = Object::Allocate(LibraryPrefix::kClassId,
9693 LibraryPrefix::InstanceSize(), 9733 LibraryPrefix::InstanceSize(),
9694 Heap::kOld); 9734 Heap::kOld);
9695 return reinterpret_cast<RawLibraryPrefix*>(raw); 9735 return reinterpret_cast<RawLibraryPrefix*>(raw);
9696 } 9736 }
9697 9737
9698 9738
9699 RawLibraryPrefix* LibraryPrefix::New(const String& name, 9739 RawLibraryPrefix* LibraryPrefix::New(const String& name,
9700 const Namespace& import, 9740 const Namespace& import,
9701 bool deferred_load) { 9741 bool deferred_load,
9742 const Library& importer) {
9702 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New()); 9743 const LibraryPrefix& result = LibraryPrefix::Handle(LibraryPrefix::New());
9703 result.set_name(name); 9744 result.set_name(name);
9704 result.set_num_imports(0); 9745 result.set_num_imports(0);
9746 result.set_importer(importer);
9705 result.raw_ptr()->is_deferred_load_ = deferred_load; 9747 result.raw_ptr()->is_deferred_load_ = deferred_load;
9706 result.raw_ptr()->is_loaded_ = !deferred_load; 9748 result.raw_ptr()->is_loaded_ = !deferred_load;
9707 result.set_imports(Array::Handle(Array::New(kInitialSize))); 9749 result.set_imports(Array::Handle(Array::New(kInitialSize)));
9708 result.AddImport(import); 9750 result.AddImport(import);
9709 result.set_dependent_code(Object::null_array()); 9751 result.set_dependent_code(Object::null_array());
9710 return result.raw(); 9752 return result.raw();
9711 } 9753 }
9712 9754
9713 9755
9714 void LibraryPrefix::set_name(const String& value) const { 9756 void LibraryPrefix::set_name(const String& value) const {
9715 ASSERT(value.IsSymbol()); 9757 ASSERT(value.IsSymbol());
9716 StorePointer(&raw_ptr()->name_, value.raw()); 9758 StorePointer(&raw_ptr()->name_, value.raw());
9717 } 9759 }
9718 9760
9719 9761
9720 void LibraryPrefix::set_imports(const Array& value) const { 9762 void LibraryPrefix::set_imports(const Array& value) const {
9721 StorePointer(&raw_ptr()->imports_, value.raw()); 9763 StorePointer(&raw_ptr()->imports_, value.raw());
9722 } 9764 }
9723 9765
9724 9766
9725 void LibraryPrefix::set_num_imports(intptr_t value) const { 9767 void LibraryPrefix::set_num_imports(intptr_t value) const {
9726 raw_ptr()->num_imports_ = value; 9768 raw_ptr()->num_imports_ = value;
9727 } 9769 }
9728 9770
9729 9771
9772 void LibraryPrefix::set_importer(const Library& value) const {
9773 StorePointer(&raw_ptr()->importer_, value.raw());
9774 }
9775
9776
9730 const char* LibraryPrefix::ToCString() const { 9777 const char* LibraryPrefix::ToCString() const {
9731 const char* kFormat = "LibraryPrefix:'%s'"; 9778 const char* kFormat = "LibraryPrefix:'%s'";
9732 const String& prefix = String::Handle(name()); 9779 const String& prefix = String::Handle(name());
9733 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1; 9780 intptr_t len = OS::SNPrint(NULL, 0, kFormat, prefix.ToCString()) + 1;
9734 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 9781 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
9735 OS::SNPrint(chars, len, kFormat, prefix.ToCString()); 9782 OS::SNPrint(chars, len, kFormat, prefix.ToCString());
9736 return chars; 9783 return chars;
9737 } 9784 }
9738 9785
9739 9786
(...skipping 9278 matching lines...) Expand 10 before | Expand all | Expand 10 after
19018 return tag_label.ToCString(); 19065 return tag_label.ToCString();
19019 } 19066 }
19020 19067
19021 19068
19022 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 19069 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
19023 Instance::PrintJSONImpl(stream, ref); 19070 Instance::PrintJSONImpl(stream, ref);
19024 } 19071 }
19025 19072
19026 19073
19027 } // namespace dart 19074 } // namespace dart
OLDNEW
« runtime/lib/lib_prefix.dart ('K') | « runtime/vm/object.h ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698