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

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

Issue 1884213004: Fix a crash in debugger, add flag --stress-test-background-compilation, add asserts. (Closed) Base URL: https://github.com/dart-lang/sdk.git@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:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/compiler.cc ('k') | no next file » | 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) 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 3023 matching lines...) Expand 10 before | Expand all | Expand 10 after
3034 func.set_num_fixed_parameters(num_implicit_params + param_names.Length()); 3034 func.set_num_fixed_parameters(num_implicit_params + param_names.Length());
3035 func.SetNumOptionalParameters(0, true); 3035 func.SetNumOptionalParameters(0, true);
3036 func.SetIsOptimizable(false); 3036 func.SetIsOptimizable(false);
3037 return func.raw(); 3037 return func.raw();
3038 } 3038 }
3039 3039
3040 3040
3041 RawObject* Class::Evaluate(const String& expr, 3041 RawObject* Class::Evaluate(const String& expr,
3042 const Array& param_names, 3042 const Array& param_names,
3043 const Array& param_values) const { 3043 const Array& param_values) const {
3044 ASSERT(Thread::Current()->IsMutatorThread());
3044 const Function& eval_func = 3045 const Function& eval_func =
3045 Function::Handle(EvaluateHelper(*this, expr, param_names, true)); 3046 Function::Handle(EvaluateHelper(*this, expr, param_names, true));
3046 const Object& result = 3047 const Object& result =
3047 Object::Handle(DartEntry::InvokeFunction(eval_func, param_values)); 3048 Object::Handle(DartEntry::InvokeFunction(eval_func, param_values));
3048 return result.raw(); 3049 return result.raw();
3049 } 3050 }
3050 3051
3051 3052
3052 // Ensure that top level parsing of the class has been done. 3053 // Ensure that top level parsing of the class has been done.
3053 RawError* Class::EnsureIsFinalized(Thread* thread) const { 3054 RawError* Class::EnsureIsFinalized(Thread* thread) const {
(...skipping 6254 matching lines...) Expand 10 before | Expand all | Expand 10 after
9308 error = lib.TransitiveLoadError(); 9309 error = lib.TransitiveLoadError();
9309 if (!error.IsNull()) { 9310 if (!error.IsNull()) {
9310 break; 9311 break;
9311 } 9312 }
9312 } 9313 }
9313 return error.raw(); 9314 return error.raw();
9314 } 9315 }
9315 9316
9316 9317
9317 void Library::AddPatchClass(const Class& cls) const { 9318 void Library::AddPatchClass(const Class& cls) const {
9319 ASSERT(Thread::Current()->IsMutatorThread());
9318 ASSERT(cls.is_patch()); 9320 ASSERT(cls.is_patch());
9319 ASSERT(GetPatchClass(String::Handle(cls.Name())) == Class::null()); 9321 ASSERT(GetPatchClass(String::Handle(cls.Name())) == Class::null());
9320 const GrowableObjectArray& patch_classes = 9322 const GrowableObjectArray& patch_classes =
9321 GrowableObjectArray::Handle(this->patch_classes()); 9323 GrowableObjectArray::Handle(this->patch_classes());
9322 patch_classes.Add(cls); 9324 patch_classes.Add(cls);
9323 } 9325 }
9324 9326
9325 9327
9326 RawClass* Library::GetPatchClass(const String& name) const { 9328 RawClass* Library::GetPatchClass(const String& name) const {
9329 ASSERT(Thread::Current()->IsMutatorThread());
9327 const GrowableObjectArray& patch_classes = 9330 const GrowableObjectArray& patch_classes =
9328 GrowableObjectArray::Handle(this->patch_classes()); 9331 GrowableObjectArray::Handle(this->patch_classes());
9329 Object& obj = Object::Handle(); 9332 Object& obj = Object::Handle();
9330 for (intptr_t i = 0; i < patch_classes.Length(); i++) { 9333 for (intptr_t i = 0; i < patch_classes.Length(); i++) {
9331 obj = patch_classes.At(i); 9334 obj = patch_classes.At(i);
9332 if (obj.IsClass() && 9335 if (obj.IsClass() &&
9333 (Class::Cast(obj).Name() == name.raw())) { // Names are canonicalized. 9336 (Class::Cast(obj).Name() == name.raw())) { // Names are canonicalized.
9334 return Class::RawCast(obj.raw()); 9337 return Class::RawCast(obj.raw());
9335 } 9338 }
9336 } 9339 }
9337 return Class::null(); 9340 return Class::null();
9338 } 9341 }
9339 9342
9340 9343
9341 void Library::RemovePatchClass(const Class& cls) const { 9344 void Library::RemovePatchClass(const Class& cls) const {
9345 ASSERT(Thread::Current()->IsMutatorThread());
9342 ASSERT(cls.is_patch()); 9346 ASSERT(cls.is_patch());
9343 const GrowableObjectArray& patch_classes = 9347 const GrowableObjectArray& patch_classes =
9344 GrowableObjectArray::Handle(this->patch_classes()); 9348 GrowableObjectArray::Handle(this->patch_classes());
9345 const intptr_t num_classes = patch_classes.Length(); 9349 const intptr_t num_classes = patch_classes.Length();
9346 intptr_t i = 0; 9350 intptr_t i = 0;
9347 while (i < num_classes) { 9351 while (i < num_classes) {
9348 if (cls.raw() == patch_classes.At(i)) break; 9352 if (cls.raw() == patch_classes.At(i)) break;
9349 i++; 9353 i++;
9350 } 9354 }
9351 if (i == num_classes) return; 9355 if (i == num_classes) return;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
9399 pieces.Add(Symbols::At()); 9403 pieces.Add(Symbols::At());
9400 pieces.Add(String::Handle(param.name())); 9404 pieces.Add(String::Handle(param.name()));
9401 return Symbols::FromConcatAll(thread, pieces); 9405 return Symbols::FromConcatAll(thread, pieces);
9402 } 9406 }
9403 9407
9404 9408
9405 void Library::AddMetadata(const Object& owner, 9409 void Library::AddMetadata(const Object& owner,
9406 const String& name, 9410 const String& name,
9407 TokenPosition token_pos) const { 9411 TokenPosition token_pos) const {
9408 Thread* thread = Thread::Current(); 9412 Thread* thread = Thread::Current();
9413 ASSERT(thread->IsMutatorThread());
9409 Zone* zone = thread->zone(); 9414 Zone* zone = thread->zone();
9410 const String& metaname = String::Handle(zone, Symbols::New(thread, name)); 9415 const String& metaname = String::Handle(zone, Symbols::New(thread, name));
9411 const Field& field = Field::Handle(zone, 9416 const Field& field = Field::Handle(zone,
9412 Field::NewTopLevel(metaname, 9417 Field::NewTopLevel(metaname,
9413 false, // is_final 9418 false, // is_final
9414 false, // is_const 9419 false, // is_const
9415 owner, 9420 owner,
9416 token_pos)); 9421 token_pos));
9417 field.SetFieldType(Object::dynamic_type()); 9422 field.SetFieldType(Object::dynamic_type());
9418 field.set_is_reflectable(false); 9423 field.set_is_reflectable(false);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
9486 return Symbols::TopLevel().raw(); 9491 return Symbols::TopLevel().raw();
9487 } else if (obj.IsTypeParameter()) { 9492 } else if (obj.IsTypeParameter()) {
9488 return MakeTypeParameterMetaName(thread, zone, TypeParameter::Cast(obj)); 9493 return MakeTypeParameterMetaName(thread, zone, TypeParameter::Cast(obj));
9489 } 9494 }
9490 UNIMPLEMENTED(); 9495 UNIMPLEMENTED();
9491 return String::null(); 9496 return String::null();
9492 } 9497 }
9493 9498
9494 9499
9495 RawField* Library::GetMetadataField(const String& metaname) const { 9500 RawField* Library::GetMetadataField(const String& metaname) const {
9501 ASSERT(Thread::Current()->IsMutatorThread());
9496 const GrowableObjectArray& metadata = 9502 const GrowableObjectArray& metadata =
9497 GrowableObjectArray::Handle(this->metadata()); 9503 GrowableObjectArray::Handle(this->metadata());
9498 Field& entry = Field::Handle(); 9504 Field& entry = Field::Handle();
9499 String& entryname = String::Handle(); 9505 String& entryname = String::Handle();
9500 intptr_t num_entries = metadata.Length(); 9506 intptr_t num_entries = metadata.Length();
9501 for (intptr_t i = 0; i < num_entries; i++) { 9507 for (intptr_t i = 0; i < num_entries; i++) {
9502 entry ^= metadata.At(i); 9508 entry ^= metadata.At(i);
9503 entryname = entry.name(); 9509 entryname = entry.name();
9504 if (entryname.Equals(metaname)) { 9510 if (entryname.Equals(metaname)) {
9505 return entry.raw(); 9511 return entry.raw();
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
9592 // Returns true if the name is found in the cache, false no cache hit. 9598 // Returns true if the name is found in the cache, false no cache hit.
9593 // obj is set to the cached entry. It may be null, indicating that the 9599 // obj is set to the cached entry. It may be null, indicating that the
9594 // name does not resolve to anything in this library. 9600 // name does not resolve to anything in this library.
9595 bool Library::LookupResolvedNamesCache(const String& name, 9601 bool Library::LookupResolvedNamesCache(const String& name,
9596 Object* obj) const { 9602 Object* obj) const {
9597 ResolvedNamesMap cache(resolved_names()); 9603 ResolvedNamesMap cache(resolved_names());
9598 bool present = false; 9604 bool present = false;
9599 *obj = cache.GetOrNull(name, &present); 9605 *obj = cache.GetOrNull(name, &present);
9600 // Mutator compiler thread may add entries and therefore 9606 // Mutator compiler thread may add entries and therefore
9601 // change 'resolved_names()' while running a background compilation; 9607 // change 'resolved_names()' while running a background compilation;
9602 // do not ASSERT that 'resolved_names()' has not changed. 9608 // ASSERT that 'resolved_names()' has not changed only in mutator.
9603 cache.Release(); 9609 #if defined(DEBUG)
9610 if (Thread::Current()->IsMutatorThread()) {
9611 ASSERT(cache.Release().raw() == resolved_names());
9612 } else {
9613 // Release must be called in debug mode.
9614 cache.Release();
9615 }
9616 #endif
9604 return present; 9617 return present;
9605 } 9618 }
9606 9619
9607 9620
9608 // Add a name to the resolved name cache. This name resolves to the 9621 // Add a name to the resolved name cache. This name resolves to the
9609 // given object in this library scope. obj may be null, which means 9622 // given object in this library scope. obj may be null, which means
9610 // the name does not resolve to anything in this library scope. 9623 // the name does not resolve to anything in this library scope.
9611 void Library::AddToResolvedNamesCache(const String& name, 9624 void Library::AddToResolvedNamesCache(const String& name,
9612 const Object& obj) const { 9625 const Object& obj) const {
9613 ASSERT(!Compiler::IsBackgroundCompilation()); 9626 ASSERT(!Compiler::IsBackgroundCompilation());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
9662 } 9675 }
9663 // Copy used count. 9676 // Copy used count.
9664 new_entry = dict.At(dict_size); 9677 new_entry = dict.At(dict_size);
9665 new_dict.SetAt(new_dict_size, new_entry); 9678 new_dict.SetAt(new_dict_size, new_entry);
9666 // Remember the new dictionary now. 9679 // Remember the new dictionary now.
9667 StorePointer(&raw_ptr()->dictionary_, new_dict.raw()); 9680 StorePointer(&raw_ptr()->dictionary_, new_dict.raw());
9668 } 9681 }
9669 9682
9670 9683
9671 void Library::AddObject(const Object& obj, const String& name) const { 9684 void Library::AddObject(const Object& obj, const String& name) const {
9672 ASSERT(!Compiler::IsBackgroundCompilation()); 9685 ASSERT(Thread::Current()->IsMutatorThread());
9673 ASSERT(obj.IsClass() || 9686 ASSERT(obj.IsClass() ||
9674 obj.IsFunction() || 9687 obj.IsFunction() ||
9675 obj.IsField() || 9688 obj.IsField() ||
9676 obj.IsLibraryPrefix()); 9689 obj.IsLibraryPrefix());
9677 ASSERT(name.Equals(String::Handle(obj.DictionaryName()))); 9690 ASSERT(name.Equals(String::Handle(obj.DictionaryName())));
9678 ASSERT(LookupLocalObject(name) == Object::null()); 9691 ASSERT(LookupLocalObject(name) == Object::null());
9679 const Array& dict = Array::Handle(dictionary()); 9692 const Array& dict = Array::Handle(dictionary());
9680 intptr_t dict_size = dict.Length() - 1; 9693 intptr_t dict_size = dict.Length() - 1;
9681 intptr_t index = name.Hash() % dict_size; 9694 intptr_t index = name.Hash() % dict_size;
9682 9695
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
9782 9795
9783 intptr_t index; 9796 intptr_t index;
9784 LookupEntry(name, &index); 9797 LookupEntry(name, &index);
9785 // The value is guaranteed to be found. 9798 // The value is guaranteed to be found.
9786 const Array& dict = Array::Handle(dictionary()); 9799 const Array& dict = Array::Handle(dictionary());
9787 dict.SetAt(index, obj); 9800 dict.SetAt(index, obj);
9788 } 9801 }
9789 9802
9790 9803
9791 bool Library::RemoveObject(const Object& obj, const String& name) const { 9804 bool Library::RemoveObject(const Object& obj, const String& name) const {
9792 ASSERT(!Compiler::IsBackgroundCompilation()); 9805 Thread* thread = Thread::Current();
9793 Object& entry = Object::Handle(); 9806 ASSERT(thread->IsMutatorThread());
9807 Zone* zone = thread->zone();
9808 Object& entry = Object::Handle(zone);
9794 9809
9795 intptr_t index; 9810 intptr_t index;
9796 entry = LookupEntry(name, &index); 9811 entry = LookupEntry(name, &index);
9797 if (entry.raw() != obj.raw()) { 9812 if (entry.raw() != obj.raw()) {
9798 return false; 9813 return false;
9799 } 9814 }
9800 9815
9801 const Array& dict = Array::Handle(dictionary()); 9816 const Array& dict = Array::Handle(zone, dictionary());
9802 dict.SetAt(index, Object::null_object()); 9817 dict.SetAt(index, Object::null_object());
9803 intptr_t dict_size = dict.Length() - 1; 9818 intptr_t dict_size = dict.Length() - 1;
9804 9819
9805 // Fix any downstream collisions. 9820 // Fix any downstream collisions.
9806 String& key = String::Handle(); 9821 String& key = String::Handle(zone);
9807 for (;;) { 9822 for (;;) {
9808 index = (index + 1) % dict_size; 9823 index = (index + 1) % dict_size;
9809 entry = dict.At(index); 9824 entry = dict.At(index);
9810 9825
9811 if (entry.IsNull()) break; 9826 if (entry.IsNull()) break;
9812 9827
9813 key = entry.DictionaryName(); 9828 key = entry.DictionaryName();
9814 intptr_t new_index = key.Hash() % dict_size; 9829 intptr_t new_index = key.Hash() % dict_size;
9815 while ((dict.At(new_index) != entry.raw()) && 9830 while ((dict.At(new_index) != entry.raw()) &&
9816 (dict.At(new_index) != Object::null())) { 9831 (dict.At(new_index) != Object::null())) {
9817 new_index = (new_index + 1) % dict_size; 9832 new_index = (new_index + 1) % dict_size;
9818 } 9833 }
9819 9834
9820 if (index != new_index) { 9835 if (index != new_index) {
9821 ASSERT(dict.At(new_index) == Object::null()); 9836 ASSERT(dict.At(new_index) == Object::null());
9822 dict.SetAt(new_index, entry); 9837 dict.SetAt(new_index, entry);
9823 dict.SetAt(index, Object::null_object()); 9838 dict.SetAt(index, Object::null_object());
9824 } 9839 }
9825 } 9840 }
9826 9841
9827 // Update used count. 9842 // Update used count.
9828 intptr_t used_elements = Smi::Value(Smi::RawCast(dict.At(dict_size))) - 1; 9843 intptr_t used_elements = Smi::Value(Smi::RawCast(dict.At(dict_size))) - 1;
9829 dict.SetAt(dict_size, Smi::Handle(Smi::New(used_elements))); 9844 dict.SetAt(dict_size, Smi::Handle(zone, Smi::New(used_elements)));
9830 9845
9831 InvalidateResolvedNamesCache(); 9846 InvalidateResolvedNamesCache();
9832 9847
9833 return true; 9848 return true;
9834 } 9849 }
9835 9850
9836 9851
9837 void Library::AddClass(const Class& cls) const { 9852 void Library::AddClass(const Class& cls) const {
9838 ASSERT(!Compiler::IsBackgroundCompilation()); 9853 ASSERT(!Compiler::IsBackgroundCompilation());
9839 const String& class_name = String::Handle(cls.Name()); 9854 const String& class_name = String::Handle(cls.Name());
(...skipping 17 matching lines...) Expand all
9857 // We already have a reference to this script. 9872 // We already have a reference to this script.
9858 return; 9873 return;
9859 } 9874 }
9860 } 9875 }
9861 // Add script to the list of scripts. 9876 // Add script to the list of scripts.
9862 scripts.Add(candidate); 9877 scripts.Add(candidate);
9863 } 9878 }
9864 9879
9865 9880
9866 RawArray* Library::LoadedScripts() const { 9881 RawArray* Library::LoadedScripts() const {
9882 ASSERT(Thread::Current()->IsMutatorThread());
9867 // We compute the list of loaded scripts lazily. The result is 9883 // We compute the list of loaded scripts lazily. The result is
9868 // cached in loaded_scripts_. 9884 // cached in loaded_scripts_.
9869 if (loaded_scripts() == Array::null()) { 9885 if (loaded_scripts() == Array::null()) {
9870 // Iterate over the library dictionary and collect all scripts. 9886 // Iterate over the library dictionary and collect all scripts.
9871 const GrowableObjectArray& scripts = 9887 const GrowableObjectArray& scripts =
9872 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 9888 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
9873 Object& entry = Object::Handle(); 9889 Object& entry = Object::Handle();
9874 Class& cls = Class::Handle(); 9890 Class& cls = Class::Handle();
9875 Script& owner_script = Script::Handle(); 9891 Script& owner_script = Script::Handle();
9876 DictionaryIterator it(*this); 9892 DictionaryIterator it(*this);
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after
10235 static RawArray* NewDictionary(intptr_t initial_size) { 10251 static RawArray* NewDictionary(intptr_t initial_size) {
10236 const Array& dict = Array::Handle(Array::New(initial_size + 1, Heap::kOld)); 10252 const Array& dict = Array::Handle(Array::New(initial_size + 1, Heap::kOld));
10237 // The last element of the dictionary specifies the number of in use slots. 10253 // The last element of the dictionary specifies the number of in use slots.
10238 dict.SetAt(initial_size, Smi::Handle(Smi::New(0))); 10254 dict.SetAt(initial_size, Smi::Handle(Smi::New(0)));
10239 return dict.raw(); 10255 return dict.raw();
10240 } 10256 }
10241 10257
10242 10258
10243 void Library::InitResolvedNamesCache(intptr_t size, 10259 void Library::InitResolvedNamesCache(intptr_t size,
10244 SnapshotReader* reader) const { 10260 SnapshotReader* reader) const {
10261 ASSERT(Thread::Current()->IsMutatorThread());
10245 if (reader == NULL) { 10262 if (reader == NULL) {
10246 StorePointer(&raw_ptr()->resolved_names_, 10263 StorePointer(&raw_ptr()->resolved_names_,
10247 HashTables::New<ResolvedNamesMap>(size)); 10264 HashTables::New<ResolvedNamesMap>(size));
10248 } else { 10265 } else {
10249 intptr_t len = ResolvedNamesMap::ArrayLengthForNumOccupied(size); 10266 intptr_t len = ResolvedNamesMap::ArrayLengthForNumOccupied(size);
10250 *reader->ArrayHandle() ^= reader->NewArray(len); 10267 *reader->ArrayHandle() ^= reader->NewArray(len);
10251 StorePointer(&raw_ptr()->resolved_names_, 10268 StorePointer(&raw_ptr()->resolved_names_,
10252 HashTables::New<ResolvedNamesMap>(*reader->ArrayHandle())); 10269 HashTables::New<ResolvedNamesMap>(*reader->ArrayHandle()));
10253 } 10270 }
10254 } 10271 }
(...skipping 18 matching lines...) Expand all
10273 ASSERT(Object::library_class() != Class::null()); 10290 ASSERT(Object::library_class() != Class::null());
10274 RawObject* raw = Object::Allocate(Library::kClassId, 10291 RawObject* raw = Object::Allocate(Library::kClassId,
10275 Library::InstanceSize(), 10292 Library::InstanceSize(),
10276 Heap::kOld); 10293 Heap::kOld);
10277 return reinterpret_cast<RawLibrary*>(raw); 10294 return reinterpret_cast<RawLibrary*>(raw);
10278 } 10295 }
10279 10296
10280 10297
10281 RawLibrary* Library::NewLibraryHelper(const String& url, 10298 RawLibrary* Library::NewLibraryHelper(const String& url,
10282 bool import_core_lib) { 10299 bool import_core_lib) {
10283 const Library& result = Library::Handle(Library::New()); 10300 Thread* thread = Thread::Current();
10301 Zone* zone = thread->zone();
10302 ASSERT(thread->IsMutatorThread());
10303 const Library& result = Library::Handle(zone, Library::New());
10284 result.StorePointer(&result.raw_ptr()->name_, Symbols::Empty().raw()); 10304 result.StorePointer(&result.raw_ptr()->name_, Symbols::Empty().raw());
10285 result.StorePointer(&result.raw_ptr()->url_, url.raw()); 10305 result.StorePointer(&result.raw_ptr()->url_, url.raw());
10286 result.StorePointer(&result.raw_ptr()->resolved_names_, 10306 result.StorePointer(&result.raw_ptr()->resolved_names_,
10287 Object::empty_array().raw()); 10307 Object::empty_array().raw());
10288 result.StorePointer(&result.raw_ptr()->dictionary_, 10308 result.StorePointer(&result.raw_ptr()->dictionary_,
10289 Object::empty_array().raw()); 10309 Object::empty_array().raw());
10290 result.StorePointer(&result.raw_ptr()->metadata_, 10310 result.StorePointer(&result.raw_ptr()->metadata_,
10291 GrowableObjectArray::New(4, Heap::kOld)); 10311 GrowableObjectArray::New(4, Heap::kOld));
10292 result.StorePointer(&result.raw_ptr()->toplevel_class_, Class::null()); 10312 result.StorePointer(&result.raw_ptr()->toplevel_class_, Class::null());
10293 result.StorePointer(&result.raw_ptr()->patch_classes_, 10313 result.StorePointer(&result.raw_ptr()->patch_classes_,
(...skipping 13 matching lines...) Expand all
10307 result.set_is_dart_scheme(url.StartsWith(Symbols::DartScheme())); 10327 result.set_is_dart_scheme(url.StartsWith(Symbols::DartScheme()));
10308 result.StoreNonPointer(&result.raw_ptr()->load_state_, 10328 result.StoreNonPointer(&result.raw_ptr()->load_state_,
10309 RawLibrary::kAllocated); 10329 RawLibrary::kAllocated);
10310 result.StoreNonPointer(&result.raw_ptr()->index_, -1); 10330 result.StoreNonPointer(&result.raw_ptr()->index_, -1);
10311 const intptr_t kInitialNameCacheSize = 64; 10331 const intptr_t kInitialNameCacheSize = 64;
10312 result.InitResolvedNamesCache(kInitialNameCacheSize); 10332 result.InitResolvedNamesCache(kInitialNameCacheSize);
10313 result.InitClassDictionary(); 10333 result.InitClassDictionary();
10314 result.InitImportList(); 10334 result.InitImportList();
10315 result.AllocatePrivateKey(); 10335 result.AllocatePrivateKey();
10316 if (import_core_lib) { 10336 if (import_core_lib) {
10317 const Library& core_lib = Library::Handle(Library::CoreLibrary()); 10337 const Library& core_lib = Library::Handle(zone, Library::CoreLibrary());
10318 ASSERT(!core_lib.IsNull()); 10338 ASSERT(!core_lib.IsNull());
10319 const Namespace& ns = Namespace::Handle( 10339 const Namespace& ns = Namespace::Handle(zone,
10320 Namespace::New(core_lib, Object::null_array(), Object::null_array())); 10340 Namespace::New(core_lib, Object::null_array(), Object::null_array()));
10321 result.AddImport(ns); 10341 result.AddImport(ns);
10322 } 10342 }
10323 return result.raw(); 10343 return result.raw();
10324 } 10344 }
10325 10345
10326 10346
10327 RawLibrary* Library::New(const String& url) { 10347 RawLibrary* Library::New(const String& url) {
10328 return NewLibraryHelper(url, false); 10348 return NewLibraryHelper(url, false);
10329 } 10349 }
(...skipping 11703 matching lines...) Expand 10 before | Expand all | Expand 10 after
22033 return UserTag::null(); 22053 return UserTag::null();
22034 } 22054 }
22035 22055
22036 22056
22037 const char* UserTag::ToCString() const { 22057 const char* UserTag::ToCString() const {
22038 const String& tag_label = String::Handle(label()); 22058 const String& tag_label = String::Handle(label());
22039 return tag_label.ToCString(); 22059 return tag_label.ToCString();
22040 } 22060 }
22041 22061
22042 } // namespace dart 22062 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/compiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698