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 1158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1169 cls = object_store->array_class(); // Was allocated above. | 1169 cls = object_store->array_class(); // Was allocated above. |
1170 RegisterPrivateClass(cls, Symbols::_List(), core_lib); | 1170 RegisterPrivateClass(cls, Symbols::_List(), core_lib); |
1171 pending_classes.Add(cls); | 1171 pending_classes.Add(cls); |
1172 // We cannot use NewNonParameterizedType(cls), because Array is parameterized. | 1172 // We cannot use NewNonParameterizedType(cls), because Array is parameterized. |
1173 // Warning: class _List has not been patched yet. Its declared number of type | 1173 // Warning: class _List has not been patched yet. Its declared number of type |
1174 // parameters is still 0. It will become 1 after patching. The array type | 1174 // parameters is still 0. It will become 1 after patching. The array type |
1175 // allocated below represents the raw type _List and not _List<E> as we | 1175 // allocated below represents the raw type _List and not _List<E> as we |
1176 // could expect. Use with caution. | 1176 // could expect. Use with caution. |
1177 type ^= Type::New(Object::Handle(zone, cls.raw()), | 1177 type ^= Type::New(Object::Handle(zone, cls.raw()), |
1178 TypeArguments::Handle(zone), | 1178 TypeArguments::Handle(zone), |
1179 Scanner::kNoSourcePos); | 1179 Token::kNoSourcePos); |
1180 type.SetIsFinalized(); | 1180 type.SetIsFinalized(); |
1181 type ^= type.Canonicalize(); | 1181 type ^= type.Canonicalize(); |
1182 object_store->set_array_type(type); | 1182 object_store->set_array_type(type); |
1183 | 1183 |
1184 cls = object_store->growable_object_array_class(); // Was allocated above. | 1184 cls = object_store->growable_object_array_class(); // Was allocated above. |
1185 RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib); | 1185 RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib); |
1186 pending_classes.Add(cls); | 1186 pending_classes.Add(cls); |
1187 | 1187 |
1188 cls = Class::New<Array>(kImmutableArrayCid); | 1188 cls = Class::New<Array>(kImmutableArrayCid); |
1189 object_store->set_immutable_array_class(cls); | 1189 object_store->set_immutable_array_class(cls); |
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 TypeArguments::Handle(zone, type_parameters()); | 1980 TypeArguments::Handle(zone, type_parameters()); |
1981 // Return the still unfinalized signature type. | 1981 // Return the still unfinalized signature type. |
1982 return Type::New(*this, signature_type_arguments, token_pos()); | 1982 return Type::New(*this, signature_type_arguments, token_pos()); |
1983 } | 1983 } |
1984 | 1984 |
1985 | 1985 |
1986 RawAbstractType* Class::RareType() const { | 1986 RawAbstractType* Class::RareType() const { |
1987 const Type& type = Type::Handle(Type::New( | 1987 const Type& type = Type::Handle(Type::New( |
1988 *this, | 1988 *this, |
1989 Object::null_type_arguments(), | 1989 Object::null_type_arguments(), |
1990 Scanner::kNoSourcePos)); | 1990 Token::kNoSourcePos)); |
1991 return ClassFinalizer::FinalizeType(*this, | 1991 return ClassFinalizer::FinalizeType(*this, |
1992 type, | 1992 type, |
1993 ClassFinalizer::kCanonicalize); | 1993 ClassFinalizer::kCanonicalize); |
1994 } | 1994 } |
1995 | 1995 |
1996 | 1996 |
1997 RawAbstractType* Class::DeclarationType() const { | 1997 RawAbstractType* Class::DeclarationType() const { |
1998 const TypeArguments& args = TypeArguments::Handle(type_parameters()); | 1998 const TypeArguments& args = TypeArguments::Handle(type_parameters()); |
1999 const Type& type = Type::Handle(Type::New( | 1999 const Type& type = Type::Handle(Type::New( |
2000 *this, | 2000 *this, |
2001 args, | 2001 args, |
2002 Scanner::kNoSourcePos)); | 2002 Token::kNoSourcePos)); |
2003 return ClassFinalizer::FinalizeType(*this, | 2003 return ClassFinalizer::FinalizeType(*this, |
2004 type, | 2004 type, |
2005 ClassFinalizer::kCanonicalize); | 2005 ClassFinalizer::kCanonicalize); |
2006 } | 2006 } |
2007 | 2007 |
2008 | 2008 |
2009 template <class FakeObject> | 2009 template <class FakeObject> |
2010 RawClass* Class::New() { | 2010 RawClass* Class::New() { |
2011 ASSERT(Object::class_class() != Class::null()); | 2011 ASSERT(Object::class_class() != Class::null()); |
2012 Class& result = Class::Handle(); | 2012 Class& result = Class::Handle(); |
(...skipping 17 matching lines...) Expand all Loading... |
2030 result.set_is_finalized(); | 2030 result.set_is_finalized(); |
2031 } else { | 2031 } else { |
2032 // VM backed classes are almost ready: run checks and resolve class | 2032 // VM backed classes are almost ready: run checks and resolve class |
2033 // references, but do not recompute size. | 2033 // references, but do not recompute size. |
2034 result.set_is_prefinalized(); | 2034 result.set_is_prefinalized(); |
2035 } | 2035 } |
2036 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); | 2036 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); |
2037 result.set_num_type_arguments(0); | 2037 result.set_num_type_arguments(0); |
2038 result.set_num_own_type_arguments(0); | 2038 result.set_num_own_type_arguments(0); |
2039 result.set_num_native_fields(0); | 2039 result.set_num_native_fields(0); |
2040 result.set_token_pos(Scanner::kNoSourcePos); | 2040 result.set_token_pos(Token::kNoSourcePos); |
2041 result.InitEmptyFields(); | 2041 result.InitEmptyFields(); |
2042 Isolate::Current()->RegisterClass(result); | 2042 Isolate::Current()->RegisterClass(result); |
2043 return result.raw(); | 2043 return result.raw(); |
2044 } | 2044 } |
2045 | 2045 |
2046 | 2046 |
2047 | 2047 |
2048 static void ReportTooManyTypeArguments(const Class& cls) { | 2048 static void ReportTooManyTypeArguments(const Class& cls) { |
2049 Report::MessageF(Report::kError, | 2049 Report::MessageF(Report::kError, |
2050 Script::Handle(cls.script()), | 2050 Script::Handle(cls.script()), |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2688 const Class& owner = Class::Handle(closure_function.Owner()); | 2688 const Class& owner = Class::Handle(closure_function.Owner()); |
2689 Function& extractor = Function::Handle( | 2689 Function& extractor = Function::Handle( |
2690 Function::New(String::Handle(Symbols::New(getter_name)), | 2690 Function::New(String::Handle(Symbols::New(getter_name)), |
2691 RawFunction::kMethodExtractor, | 2691 RawFunction::kMethodExtractor, |
2692 false, // Not static. | 2692 false, // Not static. |
2693 false, // Not const. | 2693 false, // Not const. |
2694 false, // Not abstract. | 2694 false, // Not abstract. |
2695 false, // Not external. | 2695 false, // Not external. |
2696 false, // Not native. | 2696 false, // Not native. |
2697 owner, | 2697 owner, |
2698 0)); // token_pos | 2698 ClassifyingTokenPositions::kMethodExtractor)); // token_pos |
2699 | 2699 |
2700 // Initialize signature: receiver is a single fixed parameter. | 2700 // Initialize signature: receiver is a single fixed parameter. |
2701 const intptr_t kNumParameters = 1; | 2701 const intptr_t kNumParameters = 1; |
2702 extractor.set_num_fixed_parameters(kNumParameters); | 2702 extractor.set_num_fixed_parameters(kNumParameters); |
2703 extractor.SetNumOptionalParameters(0, 0); | 2703 extractor.SetNumOptionalParameters(0, 0); |
2704 extractor.set_parameter_types(Object::extractor_parameter_types()); | 2704 extractor.set_parameter_types(Object::extractor_parameter_types()); |
2705 extractor.set_parameter_names(Object::extractor_parameter_names()); | 2705 extractor.set_parameter_names(Object::extractor_parameter_names()); |
2706 extractor.set_result_type(Object::dynamic_type()); | 2706 extractor.set_result_type(Object::dynamic_type()); |
2707 | 2707 |
2708 extractor.set_extracted_method_closure(closure_function); | 2708 extractor.set_extracted_method_closure(closure_function); |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3103 ASSERT(fake.IsInstance()); | 3103 ASSERT(fake.IsInstance()); |
3104 result.set_handle_vtable(fake.vtable()); | 3104 result.set_handle_vtable(fake.vtable()); |
3105 result.set_instance_size(FakeInstance::InstanceSize()); | 3105 result.set_instance_size(FakeInstance::InstanceSize()); |
3106 result.set_next_field_offset(FakeInstance::NextFieldOffset()); | 3106 result.set_next_field_offset(FakeInstance::NextFieldOffset()); |
3107 result.set_id(index); | 3107 result.set_id(index); |
3108 result.set_state_bits(0); | 3108 result.set_state_bits(0); |
3109 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); | 3109 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); |
3110 result.set_num_type_arguments(kUnknownNumTypeArguments); | 3110 result.set_num_type_arguments(kUnknownNumTypeArguments); |
3111 result.set_num_own_type_arguments(kUnknownNumTypeArguments); | 3111 result.set_num_own_type_arguments(kUnknownNumTypeArguments); |
3112 result.set_num_native_fields(0); | 3112 result.set_num_native_fields(0); |
3113 result.set_token_pos(Scanner::kNoSourcePos); | 3113 result.set_token_pos(Token::kNoSourcePos); |
3114 result.InitEmptyFields(); | 3114 result.InitEmptyFields(); |
3115 Isolate::Current()->RegisterClass(result); | 3115 Isolate::Current()->RegisterClass(result); |
3116 return result.raw(); | 3116 return result.raw(); |
3117 } | 3117 } |
3118 | 3118 |
3119 | 3119 |
3120 RawClass* Class::New(const String& name, | 3120 RawClass* Class::New(const String& name, |
3121 const Script& script, | 3121 const Script& script, |
3122 intptr_t token_pos) { | 3122 intptr_t token_pos) { |
3123 Class& result = Class::Handle(New<Instance>(kIllegalCid)); | 3123 Class& result = Class::Handle(New<Instance>(kIllegalCid)); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3193 } | 3193 } |
3194 set_is_prefinalized(); | 3194 set_is_prefinalized(); |
3195 } | 3195 } |
3196 | 3196 |
3197 | 3197 |
3198 RawClass* Class::NewNativeWrapper(const Library& library, | 3198 RawClass* Class::NewNativeWrapper(const Library& library, |
3199 const String& name, | 3199 const String& name, |
3200 int field_count) { | 3200 int field_count) { |
3201 Class& cls = Class::Handle(library.LookupClass(name)); | 3201 Class& cls = Class::Handle(library.LookupClass(name)); |
3202 if (cls.IsNull()) { | 3202 if (cls.IsNull()) { |
3203 cls = New(name, Script::Handle(), Scanner::kNoSourcePos); | 3203 cls = New(name, Script::Handle(), Token::kNoSourcePos); |
3204 cls.SetFields(Object::empty_array()); | 3204 cls.SetFields(Object::empty_array()); |
3205 cls.SetFunctions(Object::empty_array()); | 3205 cls.SetFunctions(Object::empty_array()); |
3206 // Set super class to Object. | 3206 // Set super class to Object. |
3207 cls.set_super_type(Type::Handle(Type::ObjectType())); | 3207 cls.set_super_type(Type::Handle(Type::ObjectType())); |
3208 // Compute instance size. First word contains a pointer to a properly | 3208 // Compute instance size. First word contains a pointer to a properly |
3209 // sized typed array once the first native field has been set. | 3209 // sized typed array once the first native field has been set. |
3210 intptr_t instance_size = sizeof(RawInstance) + kWordSize; | 3210 intptr_t instance_size = sizeof(RawInstance) + kWordSize; |
3211 cls.set_instance_size(RoundedAllocationSize(instance_size)); | 3211 cls.set_instance_size(RoundedAllocationSize(instance_size)); |
3212 cls.set_next_field_offset(instance_size); | 3212 cls.set_next_field_offset(instance_size); |
3213 cls.set_num_native_fields(field_count); | 3213 cls.set_num_native_fields(field_count); |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3445 UNREACHABLE(); | 3445 UNREACHABLE(); |
3446 } | 3446 } |
3447 | 3447 |
3448 | 3448 |
3449 void Class::set_script(const Script& value) const { | 3449 void Class::set_script(const Script& value) const { |
3450 StorePointer(&raw_ptr()->script_, value.raw()); | 3450 StorePointer(&raw_ptr()->script_, value.raw()); |
3451 } | 3451 } |
3452 | 3452 |
3453 | 3453 |
3454 void Class::set_token_pos(intptr_t token_pos) const { | 3454 void Class::set_token_pos(intptr_t token_pos) const { |
3455 ASSERT(Scanner::ValidSourcePosition(token_pos)); | 3455 ASSERT(!Token::IsClassifying(token_pos)); |
3456 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 3456 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
3457 } | 3457 } |
3458 | 3458 |
3459 | 3459 |
3460 intptr_t Class::ComputeEndTokenPos() const { | 3460 intptr_t Class::ComputeEndTokenPos() const { |
3461 // Return the begin token for synthetic classes. | 3461 // Return the begin token for synthetic classes. |
3462 if (IsSignatureClass() || IsMixinApplication() || IsTopLevel()) { | 3462 if (IsSignatureClass() || IsMixinApplication() || IsTopLevel()) { |
3463 return token_pos(); | 3463 return token_pos(); |
3464 } | 3464 } |
3465 const Script& scr = Script::Handle(script()); | 3465 const Script& scr = Script::Handle(script()); |
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4381 RawUnresolvedClass* UnresolvedClass::New() { | 4381 RawUnresolvedClass* UnresolvedClass::New() { |
4382 ASSERT(Object::unresolved_class_class() != Class::null()); | 4382 ASSERT(Object::unresolved_class_class() != Class::null()); |
4383 RawObject* raw = Object::Allocate(UnresolvedClass::kClassId, | 4383 RawObject* raw = Object::Allocate(UnresolvedClass::kClassId, |
4384 UnresolvedClass::InstanceSize(), | 4384 UnresolvedClass::InstanceSize(), |
4385 Heap::kOld); | 4385 Heap::kOld); |
4386 return reinterpret_cast<RawUnresolvedClass*>(raw); | 4386 return reinterpret_cast<RawUnresolvedClass*>(raw); |
4387 } | 4387 } |
4388 | 4388 |
4389 | 4389 |
4390 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { | 4390 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { |
4391 ASSERT(Scanner::ValidSourcePosition(token_pos)); | 4391 ASSERT(!Token::IsClassifying(token_pos)); |
4392 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 4392 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
4393 } | 4393 } |
4394 | 4394 |
4395 | 4395 |
4396 void UnresolvedClass::set_ident(const String& ident) const { | 4396 void UnresolvedClass::set_ident(const String& ident) const { |
4397 StorePointer(&raw_ptr()->ident_, ident.raw()); | 4397 StorePointer(&raw_ptr()->ident_, ident.raw()); |
4398 } | 4398 } |
4399 | 4399 |
4400 | 4400 |
4401 void UnresolvedClass::set_library_prefix( | 4401 void UnresolvedClass::set_library_prefix( |
(...skipping 1381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5783 | 5783 |
5784 | 5784 |
5785 void Function::set_recognized_kind(MethodRecognizer::Kind value) const { | 5785 void Function::set_recognized_kind(MethodRecognizer::Kind value) const { |
5786 // Prevent multiple settings of kind. | 5786 // Prevent multiple settings of kind. |
5787 ASSERT((value == MethodRecognizer::kUnknown) || !IsRecognized()); | 5787 ASSERT((value == MethodRecognizer::kUnknown) || !IsRecognized()); |
5788 set_kind_tag(RecognizedBits::update(value, raw_ptr()->kind_tag_)); | 5788 set_kind_tag(RecognizedBits::update(value, raw_ptr()->kind_tag_)); |
5789 } | 5789 } |
5790 | 5790 |
5791 | 5791 |
5792 void Function::set_token_pos(intptr_t token_pos) const { | 5792 void Function::set_token_pos(intptr_t token_pos) const { |
5793 ASSERT(token_pos >= 0); | 5793 ASSERT(!Token::IsClassifying(token_pos) || IsMethodExtractor()); |
5794 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 5794 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
5795 } | 5795 } |
5796 | 5796 |
5797 | 5797 |
5798 void Function::set_kind_tag(intptr_t value) const { | 5798 void Function::set_kind_tag(intptr_t value) const { |
5799 StoreNonPointer(&raw_ptr()->kind_tag_, static_cast<uint32_t>(value)); | 5799 StoreNonPointer(&raw_ptr()->kind_tag_, static_cast<uint32_t>(value)); |
5800 } | 5800 } |
5801 | 5801 |
5802 | 5802 |
5803 void Function::set_num_fixed_parameters(intptr_t value) const { | 5803 void Function::set_num_fixed_parameters(intptr_t value) const { |
(...skipping 2740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8544 : tokens_(TokenStream::Handle(tokens.raw())), | 8544 : tokens_(TokenStream::Handle(tokens.raw())), |
8545 data_(ExternalTypedData::Handle(tokens.GetStream())), | 8545 data_(ExternalTypedData::Handle(tokens.GetStream())), |
8546 stream_(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), data_.Length()), | 8546 stream_(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), data_.Length()), |
8547 token_objects_(Array::Handle( | 8547 token_objects_(Array::Handle( |
8548 GrowableObjectArray::Handle(tokens.TokenObjects()).data())), | 8548 GrowableObjectArray::Handle(tokens.TokenObjects()).data())), |
8549 obj_(Object::Handle()), | 8549 obj_(Object::Handle()), |
8550 cur_token_pos_(token_pos), | 8550 cur_token_pos_(token_pos), |
8551 cur_token_kind_(Token::kILLEGAL), | 8551 cur_token_kind_(Token::kILLEGAL), |
8552 cur_token_obj_index_(-1), | 8552 cur_token_obj_index_(-1), |
8553 stream_type_(stream_type) { | 8553 stream_type_(stream_type) { |
8554 SetCurrentPosition(token_pos); | 8554 ASSERT(token_pos != Token::kNoSourcePos); |
| 8555 if (token_pos >= 0) { |
| 8556 SetCurrentPosition(token_pos); |
| 8557 } |
8555 } | 8558 } |
8556 | 8559 |
8557 | 8560 |
8558 void TokenStream::Iterator::SetStream(const TokenStream& tokens, | 8561 void TokenStream::Iterator::SetStream(const TokenStream& tokens, |
8559 intptr_t token_pos) { | 8562 intptr_t token_pos) { |
8560 tokens_ = tokens.raw(); | 8563 tokens_ = tokens.raw(); |
8561 data_ = tokens.GetStream(); | 8564 data_ = tokens.GetStream(); |
8562 stream_.SetStream(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), | 8565 stream_.SetStream(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), |
8563 data_.Length()); | 8566 data_.Length()); |
8564 token_objects_ = GrowableObjectArray::Handle(tokens.TokenObjects()).data(); | 8567 token_objects_ = GrowableObjectArray::Handle(tokens.TokenObjects()).data(); |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9236 next_ix_++; | 9239 next_ix_++; |
9237 obj = array_.At(next_ix_); | 9240 obj = array_.At(next_ix_); |
9238 } | 9241 } |
9239 } | 9242 } |
9240 | 9243 |
9241 | 9244 |
9242 static void ReportTooManyImports(const Library& lib) { | 9245 static void ReportTooManyImports(const Library& lib) { |
9243 const String& url = String::Handle(lib.url()); | 9246 const String& url = String::Handle(lib.url()); |
9244 Report::MessageF(Report::kError, | 9247 Report::MessageF(Report::kError, |
9245 Script::Handle(lib.LookupScript(url)), | 9248 Script::Handle(lib.LookupScript(url)), |
9246 Scanner::kNoSourcePos, | 9249 Token::kNoSourcePos, |
9247 Report::AtLocation, | 9250 Report::AtLocation, |
9248 "too many imports in library '%s'", | 9251 "too many imports in library '%s'", |
9249 url.ToCString()); | 9252 url.ToCString()); |
9250 UNREACHABLE(); | 9253 UNREACHABLE(); |
9251 } | 9254 } |
9252 | 9255 |
9253 | 9256 |
9254 void Library::set_num_imports(intptr_t value) const { | 9257 void Library::set_num_imports(intptr_t value) const { |
9255 if (!Utils::IsUint(16, value)) { | 9258 if (!Utils::IsUint(16, value)) { |
9256 ReportTooManyImports(*this); | 9259 ReportTooManyImports(*this); |
(...skipping 2000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11257 return; | 11260 return; |
11258 } | 11261 } |
11259 } | 11262 } |
11260 | 11263 |
11261 | 11264 |
11262 // Encode integer in SLEB128 format. | 11265 // Encode integer in SLEB128 format. |
11263 void PcDescriptors::EncodeInteger(GrowableArray<uint8_t>* data, | 11266 void PcDescriptors::EncodeInteger(GrowableArray<uint8_t>* data, |
11264 intptr_t value) { | 11267 intptr_t value) { |
11265 bool is_last_part = false; | 11268 bool is_last_part = false; |
11266 while (!is_last_part) { | 11269 while (!is_last_part) { |
11267 intptr_t part = value & 0x7f; | 11270 uint8_t part = value & 0x7f; |
11268 value >>= 7; | 11271 value >>= 7; |
11269 if ((value == 0 && (part & 0x40) == 0) || | 11272 if ((value == 0 && (part & 0x40) == 0) || |
11270 (value == -1 && (part & 0x40) != 0)) { | 11273 (value == static_cast<intptr_t>(-1) && (part & 0x40) != 0)) { |
11271 is_last_part = true; | 11274 is_last_part = true; |
11272 } else { | 11275 } else { |
11273 part |= 0x80; | 11276 part |= 0x80; |
11274 } | 11277 } |
11275 data->Add(part); | 11278 data->Add(part); |
11276 } | 11279 } |
11277 } | 11280 } |
11278 | 11281 |
11279 | 11282 |
11280 // Decode SLEB128 encoded integer. Update byte_index to the next integer. | 11283 // Decode SLEB128 encoded integer. Update byte_index to the next integer. |
11281 intptr_t PcDescriptors::DecodeInteger(intptr_t* byte_index) const { | 11284 intptr_t PcDescriptors::DecodeInteger(intptr_t* byte_index) const { |
11282 NoSafepointScope no_safepoint; | 11285 NoSafepointScope no_safepoint; |
11283 const uint8_t* data = raw_ptr()->data(); | 11286 const uint8_t* data = raw_ptr()->data(); |
11284 ASSERT(*byte_index < Length()); | 11287 ASSERT(*byte_index < Length()); |
11285 uword shift = 0; | 11288 uword shift = 0; |
11286 intptr_t value = 0; | 11289 intptr_t value = 0; |
11287 intptr_t part = 0; | 11290 uint8_t part = 0; |
11288 do { | 11291 do { |
11289 part = data[(*byte_index)++]; | 11292 part = data[(*byte_index)++]; |
11290 value |= (part & 0x7f) << shift; | 11293 value |= static_cast<intptr_t>(part & 0x7f) << shift; |
11291 shift += 7; | 11294 shift += 7; |
11292 } while ((part & 0x80) != 0); | 11295 } while ((part & 0x80) != 0); |
11293 | 11296 |
11294 if (shift < sizeof(value) * 8 && (part & 0x40) != 0) { | 11297 if ((shift < (sizeof(value) * 8)) && ((part & 0x40) != 0)) { |
11295 value |= -(1 << shift); | 11298 value |= static_cast<intptr_t>(-1) << shift; |
11296 } | 11299 } |
11297 return value; | 11300 return value; |
11298 } | 11301 } |
11299 | 11302 |
11300 | 11303 |
11301 RawObjectPool* ObjectPool::New(intptr_t len) { | 11304 RawObjectPool* ObjectPool::New(intptr_t len) { |
11302 ASSERT(Object::object_pool_class() != Class::null()); | 11305 ASSERT(Object::object_pool_class() != Class::null()); |
11303 if (len < 0 || len > kMaxElements) { | 11306 if (len < 0 || len > kMaxElements) { |
11304 // This should be caught before we reach here. | 11307 // This should be caught before we reach here. |
11305 FATAL1("Fatal error in ObjectPool::New: invalid length %" Pd "\n", len); | 11308 FATAL1("Fatal error in ObjectPool::New: invalid length %" Pd "\n", len); |
(...skipping 3275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14581 StorePointer(&raw_ptr()->previous_error_, value.raw()); | 14584 StorePointer(&raw_ptr()->previous_error_, value.raw()); |
14582 } | 14585 } |
14583 | 14586 |
14584 | 14587 |
14585 void LanguageError::set_script(const Script& value) const { | 14588 void LanguageError::set_script(const Script& value) const { |
14586 StorePointer(&raw_ptr()->script_, value.raw()); | 14589 StorePointer(&raw_ptr()->script_, value.raw()); |
14587 } | 14590 } |
14588 | 14591 |
14589 | 14592 |
14590 void LanguageError::set_token_pos(intptr_t token_pos) const { | 14593 void LanguageError::set_token_pos(intptr_t token_pos) const { |
14591 ASSERT(Scanner::ValidSourcePosition(token_pos)); | 14594 ASSERT(!Token::IsClassifying(token_pos)); |
14592 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 14595 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
14593 } | 14596 } |
14594 | 14597 |
14595 | 14598 |
14596 void LanguageError::set_report_after_token(bool value) { | 14599 void LanguageError::set_report_after_token(bool value) { |
14597 StoreNonPointer(&raw_ptr()->report_after_token_, value); | 14600 StoreNonPointer(&raw_ptr()->report_after_token_, value); |
14598 } | 14601 } |
14599 | 14602 |
14600 | 14603 |
14601 void LanguageError::set_kind(uint8_t value) const { | 14604 void LanguageError::set_kind(uint8_t value) const { |
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14985 const Class& cls = Class::Handle(clazz()); | 14988 const Class& cls = Class::Handle(clazz()); |
14986 Type& type = Type::Handle(); | 14989 Type& type = Type::Handle(); |
14987 if (!cls.IsGeneric()) { | 14990 if (!cls.IsGeneric()) { |
14988 type = cls.CanonicalType(); | 14991 type = cls.CanonicalType(); |
14989 } | 14992 } |
14990 if (type.IsNull()) { | 14993 if (type.IsNull()) { |
14991 TypeArguments& type_arguments = TypeArguments::Handle(); | 14994 TypeArguments& type_arguments = TypeArguments::Handle(); |
14992 if (cls.NumTypeArguments() > 0) { | 14995 if (cls.NumTypeArguments() > 0) { |
14993 type_arguments = GetTypeArguments(); | 14996 type_arguments = GetTypeArguments(); |
14994 } | 14997 } |
14995 type = Type::New(cls, type_arguments, Scanner::kNoSourcePos); | 14998 type = Type::New(cls, type_arguments, Token::kNoSourcePos); |
14996 type.SetIsFinalized(); | 14999 type.SetIsFinalized(); |
14997 type ^= type.Canonicalize(); | 15000 type ^= type.Canonicalize(); |
14998 } | 15001 } |
14999 return type.raw(); | 15002 return type.raw(); |
15000 } | 15003 } |
15001 | 15004 |
15002 | 15005 |
15003 RawTypeArguments* Instance::GetTypeArguments() const { | 15006 RawTypeArguments* Instance::GetTypeArguments() const { |
15004 const Class& cls = Class::Handle(clazz()); | 15007 const Class& cls = Class::Handle(clazz()); |
15005 intptr_t field_offset = cls.type_arguments_field_offset(); | 15008 intptr_t field_offset = cls.type_arguments_field_offset(); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15244 if (IsClosure()) { | 15247 if (IsClosure()) { |
15245 return Closure::ToCString(*this); | 15248 return Closure::ToCString(*this); |
15246 } | 15249 } |
15247 const Class& cls = Class::Handle(clazz()); | 15250 const Class& cls = Class::Handle(clazz()); |
15248 TypeArguments& type_arguments = TypeArguments::Handle(); | 15251 TypeArguments& type_arguments = TypeArguments::Handle(); |
15249 const intptr_t num_type_arguments = cls.NumTypeArguments(); | 15252 const intptr_t num_type_arguments = cls.NumTypeArguments(); |
15250 if (num_type_arguments > 0) { | 15253 if (num_type_arguments > 0) { |
15251 type_arguments = GetTypeArguments(); | 15254 type_arguments = GetTypeArguments(); |
15252 } | 15255 } |
15253 const Type& type = | 15256 const Type& type = |
15254 Type::Handle(Type::New(cls, type_arguments, Scanner::kNoSourcePos)); | 15257 Type::Handle(Type::New(cls, type_arguments, Token::kNoSourcePos)); |
15255 const String& type_name = String::Handle(type.UserVisibleName()); | 15258 const String& type_name = String::Handle(type.UserVisibleName()); |
15256 return OS::SCreate(Thread::Current()->zone(), | 15259 return OS::SCreate(Thread::Current()->zone(), |
15257 "Instance of '%s'", type_name.ToCString()); | 15260 "Instance of '%s'", type_name.ToCString()); |
15258 } | 15261 } |
15259 } | 15262 } |
15260 | 15263 |
15261 | 15264 |
15262 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, | 15265 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, |
15263 bool ref) const { | 15266 bool ref) const { |
15264 AddCommonObjectProperties(jsobj, "Instance", ref); | 15267 AddCommonObjectProperties(jsobj, "Instance", ref); |
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15906 } | 15909 } |
15907 | 15910 |
15908 | 15911 |
15909 RawType* Type::NewNonParameterizedType(const Class& type_class) { | 15912 RawType* Type::NewNonParameterizedType(const Class& type_class) { |
15910 ASSERT(type_class.NumTypeArguments() == 0); | 15913 ASSERT(type_class.NumTypeArguments() == 0); |
15911 Type& type = Type::Handle(type_class.CanonicalType()); | 15914 Type& type = Type::Handle(type_class.CanonicalType()); |
15912 if (type.IsNull()) { | 15915 if (type.IsNull()) { |
15913 const TypeArguments& no_type_arguments = TypeArguments::Handle(); | 15916 const TypeArguments& no_type_arguments = TypeArguments::Handle(); |
15914 type ^= Type::New(Object::Handle(type_class.raw()), | 15917 type ^= Type::New(Object::Handle(type_class.raw()), |
15915 no_type_arguments, | 15918 no_type_arguments, |
15916 Scanner::kNoSourcePos); | 15919 Token::kNoSourcePos); |
15917 type.SetIsFinalized(); | 15920 type.SetIsFinalized(); |
15918 type ^= type.Canonicalize(); | 15921 type ^= type.Canonicalize(); |
15919 } | 15922 } |
15920 ASSERT(type.IsFinalized()); | 15923 ASSERT(type.IsFinalized()); |
15921 return type.raw(); | 15924 return type.raw(); |
15922 } | 15925 } |
15923 | 15926 |
15924 | 15927 |
15925 void Type::SetIsFinalized() const { | 15928 void Type::SetIsFinalized() const { |
15926 ASSERT(!IsFinalized()); | 15929 ASSERT(!IsFinalized()); |
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16415 const Type& result = Type::Handle(Type::New(space)); | 16418 const Type& result = Type::Handle(Type::New(space)); |
16416 result.set_type_class(clazz); | 16419 result.set_type_class(clazz); |
16417 result.set_arguments(arguments); | 16420 result.set_arguments(arguments); |
16418 result.set_token_pos(token_pos); | 16421 result.set_token_pos(token_pos); |
16419 result.StoreNonPointer(&result.raw_ptr()->type_state_, RawType::kAllocated); | 16422 result.StoreNonPointer(&result.raw_ptr()->type_state_, RawType::kAllocated); |
16420 return result.raw(); | 16423 return result.raw(); |
16421 } | 16424 } |
16422 | 16425 |
16423 | 16426 |
16424 void Type::set_token_pos(intptr_t token_pos) const { | 16427 void Type::set_token_pos(intptr_t token_pos) const { |
16425 ASSERT(Scanner::ValidSourcePosition(token_pos)); | 16428 ASSERT(!Token::IsClassifying(token_pos)); |
16426 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 16429 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
16427 } | 16430 } |
16428 | 16431 |
16429 | 16432 |
16430 void Type::set_type_state(int8_t state) const { | 16433 void Type::set_type_state(int8_t state) const { |
16431 ASSERT((state >= RawType::kAllocated) && | 16434 ASSERT((state >= RawType::kAllocated) && |
16432 (state <= RawType::kFinalizedUninstantiated)); | 16435 (state <= RawType::kFinalizedUninstantiated)); |
16433 StoreNonPointer(&raw_ptr()->type_state_, state); | 16436 StoreNonPointer(&raw_ptr()->type_state_, state); |
16434 } | 16437 } |
16435 | 16438 |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
16847 result.set_name(name); | 16850 result.set_name(name); |
16848 result.set_bound(bound); | 16851 result.set_bound(bound); |
16849 result.set_token_pos(token_pos); | 16852 result.set_token_pos(token_pos); |
16850 result.StoreNonPointer(&result.raw_ptr()->type_state_, | 16853 result.StoreNonPointer(&result.raw_ptr()->type_state_, |
16851 RawTypeParameter::kAllocated); | 16854 RawTypeParameter::kAllocated); |
16852 return result.raw(); | 16855 return result.raw(); |
16853 } | 16856 } |
16854 | 16857 |
16855 | 16858 |
16856 void TypeParameter::set_token_pos(intptr_t token_pos) const { | 16859 void TypeParameter::set_token_pos(intptr_t token_pos) const { |
16857 ASSERT(Scanner::ValidSourcePosition(token_pos)); | 16860 ASSERT(!Token::IsClassifying(token_pos)); |
16858 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 16861 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
16859 } | 16862 } |
16860 | 16863 |
16861 | 16864 |
16862 void TypeParameter::set_type_state(int8_t state) const { | 16865 void TypeParameter::set_type_state(int8_t state) const { |
16863 ASSERT((state == RawTypeParameter::kAllocated) || | 16866 ASSERT((state == RawTypeParameter::kAllocated) || |
16864 (state == RawTypeParameter::kBeingFinalized) || | 16867 (state == RawTypeParameter::kBeingFinalized) || |
16865 (state == RawTypeParameter::kFinalizedUninstantiated)); | 16868 (state == RawTypeParameter::kFinalizedUninstantiated)); |
16866 StoreNonPointer(&raw_ptr()->type_state_, state); | 16869 StoreNonPointer(&raw_ptr()->type_state_, state); |
16867 } | 16870 } |
(...skipping 5256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
22124 return tag_label.ToCString(); | 22127 return tag_label.ToCString(); |
22125 } | 22128 } |
22126 | 22129 |
22127 | 22130 |
22128 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 22131 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
22129 Instance::PrintJSONImpl(stream, ref); | 22132 Instance::PrintJSONImpl(stream, ref); |
22130 } | 22133 } |
22131 | 22134 |
22132 | 22135 |
22133 } // namespace dart | 22136 } // namespace dart |
OLD | NEW |