OLD | NEW |
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 6298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6309 | 6309 |
6310 | 6310 |
6311 void Script::PrintToJSONStream(JSONStream* stream, bool ref) const { | 6311 void Script::PrintToJSONStream(JSONStream* stream, bool ref) const { |
6312 stream->OpenObject(); | 6312 stream->OpenObject(); |
6313 stream->CloseObject(); | 6313 stream->CloseObject(); |
6314 } | 6314 } |
6315 | 6315 |
6316 | 6316 |
6317 DictionaryIterator::DictionaryIterator(const Library& library) | 6317 DictionaryIterator::DictionaryIterator(const Library& library) |
6318 : array_(Array::Handle(library.dictionary())), | 6318 : array_(Array::Handle(library.dictionary())), |
6319 // Last element in array is a Smi. | 6319 // Last element in array is a Smi indicating the number of entries used. |
6320 size_(Array::Handle(library.dictionary()).Length() - 1), | 6320 size_(Array::Handle(library.dictionary()).Length() - 1), |
6321 next_ix_(0) { | 6321 next_ix_(0) { |
6322 MoveToNextObject(); | 6322 MoveToNextObject(); |
6323 } | 6323 } |
6324 | 6324 |
6325 | 6325 |
6326 RawObject* DictionaryIterator::GetNext() { | 6326 RawObject* DictionaryIterator::GetNext() { |
6327 ASSERT(HasNext()); | 6327 ASSERT(HasNext()); |
6328 int ix = next_ix_++; | 6328 int ix = next_ix_++; |
6329 MoveToNextObject(); | 6329 MoveToNextObject(); |
6330 ASSERT(array_.At(ix) != Object::null()); | 6330 ASSERT(array_.At(ix) != Object::null()); |
6331 return array_.At(ix); | 6331 return array_.At(ix); |
6332 } | 6332 } |
6333 | 6333 |
6334 | 6334 |
6335 void DictionaryIterator::MoveToNextObject() { | 6335 void DictionaryIterator::MoveToNextObject() { |
6336 Object& obj = Object::Handle(array_.At(next_ix_)); | 6336 Object& obj = Object::Handle(array_.At(next_ix_)); |
6337 while (obj.IsNull() && HasNext()) { | 6337 while (obj.IsNull() && HasNext()) { |
6338 next_ix_++; | 6338 next_ix_++; |
6339 obj = array_.At(next_ix_); | 6339 obj = array_.At(next_ix_); |
6340 } | 6340 } |
6341 } | 6341 } |
6342 | 6342 |
6343 | 6343 |
6344 ClassDictionaryIterator::ClassDictionaryIterator(const Library& library) | 6344 ClassDictionaryIterator::ClassDictionaryIterator(const Library& library, |
6345 : DictionaryIterator(library) { | 6345 IterationKind kind) |
| 6346 : DictionaryIterator(library), |
| 6347 anon_array_((kind == kIteratePrivate) ? |
| 6348 Array::Handle(library.anonymous_classes()) : Object::empty_array()), |
| 6349 anon_size_((kind == kIteratePrivate) ? |
| 6350 library.num_anonymous_classes() : 0), |
| 6351 anon_ix_(0) { |
6346 MoveToNextClass(); | 6352 MoveToNextClass(); |
6347 } | 6353 } |
6348 | 6354 |
6349 | 6355 |
6350 RawClass* ClassDictionaryIterator::GetNextClass() { | 6356 RawClass* ClassDictionaryIterator::GetNextClass() { |
6351 ASSERT(HasNext()); | 6357 ASSERT(HasNext()); |
6352 int ix = next_ix_++; | 6358 Class& cls = Class::Handle(); |
6353 Object& obj = Object::Handle(array_.At(ix)); | 6359 if (next_ix_ < size_) { |
6354 MoveToNextClass(); | 6360 int ix = next_ix_++; |
6355 return Class::Cast(obj).raw(); | 6361 cls ^= array_.At(ix); |
| 6362 MoveToNextClass(); |
| 6363 return cls.raw(); |
| 6364 } |
| 6365 ASSERT(anon_ix_ < anon_size_); |
| 6366 cls ^= anon_array_.At(anon_ix_++); |
| 6367 return cls.raw(); |
6356 } | 6368 } |
6357 | 6369 |
6358 | 6370 |
6359 void ClassDictionaryIterator::MoveToNextClass() { | 6371 void ClassDictionaryIterator::MoveToNextClass() { |
6360 Object& obj = Object::Handle(array_.At(next_ix_)); | 6372 Object& obj = Object::Handle(); |
6361 while (!obj.IsClass() && HasNext()) { | 6373 while (next_ix_ < size_) { |
| 6374 obj = array_.At(next_ix_); |
| 6375 if (obj.IsClass()) { |
| 6376 return; |
| 6377 } |
6362 next_ix_++; | 6378 next_ix_++; |
6363 obj = array_.At(next_ix_); | |
6364 } | 6379 } |
6365 } | 6380 } |
6366 | 6381 |
6367 | 6382 |
6368 LibraryPrefixIterator::LibraryPrefixIterator(const Library& library) | 6383 LibraryPrefixIterator::LibraryPrefixIterator(const Library& library) |
6369 : DictionaryIterator(library) { | 6384 : DictionaryIterator(library) { |
6370 Advance(); | 6385 Advance(); |
6371 } | 6386 } |
6372 | 6387 |
6373 | 6388 |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6740 } | 6755 } |
6741 } | 6756 } |
6742 return Script::null(); | 6757 return Script::null(); |
6743 } | 6758 } |
6744 | 6759 |
6745 | 6760 |
6746 RawFunction* Library::LookupFunctionInScript(const Script& script, | 6761 RawFunction* Library::LookupFunctionInScript(const Script& script, |
6747 intptr_t token_pos) const { | 6762 intptr_t token_pos) const { |
6748 Class& cls = Class::Handle(); | 6763 Class& cls = Class::Handle(); |
6749 Function& func = Function::Handle(); | 6764 Function& func = Function::Handle(); |
6750 ClassDictionaryIterator it(*this); | 6765 ClassDictionaryIterator it(*this, ClassDictionaryIterator::kIteratePrivate); |
6751 while (it.HasNext()) { | 6766 while (it.HasNext()) { |
6752 cls = it.GetNextClass(); | 6767 cls = it.GetNextClass(); |
6753 if (script.raw() == cls.script()) { | 6768 if (script.raw() == cls.script()) { |
6754 func = cls.LookupFunctionAtToken(token_pos); | 6769 func = cls.LookupFunctionAtToken(token_pos); |
6755 if (!func.IsNull()) { | 6770 if (!func.IsNull()) { |
6756 return func.raw(); | 6771 return func.raw(); |
6757 } | 6772 } |
6758 } | 6773 } |
6759 } | 6774 } |
6760 // Look in anonymous classes for toplevel functions. | |
6761 Array& anon_classes = Array::Handle(this->raw_ptr()->anonymous_classes_); | |
6762 intptr_t num_anonymous = raw_ptr()->num_anonymous_; | |
6763 for (int i = 0; i < num_anonymous; i++) { | |
6764 cls ^= anon_classes.At(i); | |
6765 ASSERT(!cls.IsNull()); | |
6766 if (script.raw() == cls.script()) { | |
6767 func = cls.LookupFunctionAtToken(token_pos); | |
6768 if (!func.IsNull()) { | |
6769 return func.raw(); | |
6770 } | |
6771 } | |
6772 } | |
6773 return Function::null(); | 6775 return Function::null(); |
6774 } | 6776 } |
6775 | 6777 |
6776 | 6778 |
6777 RawObject* Library::LookupLocalObject(const String& name) const { | 6779 RawObject* Library::LookupLocalObject(const String& name) const { |
6778 intptr_t index; | 6780 intptr_t index; |
6779 return LookupEntry(name, &index); | 6781 return LookupEntry(name, &index); |
6780 } | 6782 } |
6781 | 6783 |
6782 | 6784 |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7620 | 7622 |
7621 | 7623 |
7622 RawError* Library::CompileAll() { | 7624 RawError* Library::CompileAll() { |
7623 Error& error = Error::Handle(); | 7625 Error& error = Error::Handle(); |
7624 const GrowableObjectArray& libs = GrowableObjectArray::Handle( | 7626 const GrowableObjectArray& libs = GrowableObjectArray::Handle( |
7625 Isolate::Current()->object_store()->libraries()); | 7627 Isolate::Current()->object_store()->libraries()); |
7626 Library& lib = Library::Handle(); | 7628 Library& lib = Library::Handle(); |
7627 Class& cls = Class::Handle(); | 7629 Class& cls = Class::Handle(); |
7628 for (int i = 0; i < libs.Length(); i++) { | 7630 for (int i = 0; i < libs.Length(); i++) { |
7629 lib ^= libs.At(i); | 7631 lib ^= libs.At(i); |
7630 ClassDictionaryIterator it(lib); | 7632 ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate); |
7631 while (it.HasNext()) { | 7633 while (it.HasNext()) { |
7632 cls = it.GetNextClass(); | 7634 cls = it.GetNextClass(); |
7633 error = cls.EnsureIsFinalized(Isolate::Current()); | 7635 error = cls.EnsureIsFinalized(Isolate::Current()); |
7634 if (!error.IsNull()) { | 7636 if (!error.IsNull()) { |
7635 return error.raw(); | 7637 return error.raw(); |
7636 } | 7638 } |
7637 error = Compiler::CompileAllFunctions(cls); | 7639 error = Compiler::CompileAllFunctions(cls); |
7638 if (!error.IsNull()) { | 7640 if (!error.IsNull()) { |
7639 return error.raw(); | 7641 return error.raw(); |
7640 } | 7642 } |
7641 } | 7643 } |
7642 Array& anon_classes = Array::Handle(lib.raw_ptr()->anonymous_classes_); | |
7643 for (int i = 0; i < lib.raw_ptr()->num_anonymous_; i++) { | |
7644 cls ^= anon_classes.At(i); | |
7645 error = Compiler::CompileAllFunctions(cls); | |
7646 if (!error.IsNull()) { | |
7647 return error.raw(); | |
7648 } | |
7649 } | |
7650 } | 7644 } |
7651 return error.raw(); | 7645 return error.raw(); |
7652 } | 7646 } |
7653 | 7647 |
7654 | 7648 |
7655 struct FpDiff { | 7649 struct FpDiff { |
7656 FpDiff(int32_t old_, int32_t new_): old_fp(old_), new_fp(new_) {} | 7650 FpDiff(int32_t old_, int32_t new_): old_fp(old_), new_fp(new_) {} |
7657 int32_t old_fp; | 7651 int32_t old_fp; |
7658 int32_t new_fp; | 7652 int32_t new_fp; |
7659 }; | 7653 }; |
(...skipping 6963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14623 } | 14617 } |
14624 | 14618 |
14625 | 14619 |
14626 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { | 14620 void MirrorReference::PrintToJSONStream(JSONStream* stream, bool ref) const { |
14627 stream->OpenObject(); | 14621 stream->OpenObject(); |
14628 stream->CloseObject(); | 14622 stream->CloseObject(); |
14629 } | 14623 } |
14630 | 14624 |
14631 | 14625 |
14632 } // namespace dart | 14626 } // namespace dart |
OLD | NEW |