| 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 |