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

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

Issue 1644793002: Replace intptr_t with TokenDescriptor (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
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 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 cls = object_store->array_class(); // Was allocated above. 1177 cls = object_store->array_class(); // Was allocated above.
1178 RegisterPrivateClass(cls, Symbols::_List(), core_lib); 1178 RegisterPrivateClass(cls, Symbols::_List(), core_lib);
1179 pending_classes.Add(cls); 1179 pending_classes.Add(cls);
1180 // We cannot use NewNonParameterizedType(cls), because Array is parameterized. 1180 // We cannot use NewNonParameterizedType(cls), because Array is parameterized.
1181 // Warning: class _List has not been patched yet. Its declared number of type 1181 // Warning: class _List has not been patched yet. Its declared number of type
1182 // parameters is still 0. It will become 1 after patching. The array type 1182 // parameters is still 0. It will become 1 after patching. The array type
1183 // allocated below represents the raw type _List and not _List<E> as we 1183 // allocated below represents the raw type _List and not _List<E> as we
1184 // could expect. Use with caution. 1184 // could expect. Use with caution.
1185 type ^= Type::New(Object::Handle(zone, cls.raw()), 1185 type ^= Type::New(Object::Handle(zone, cls.raw()),
1186 TypeArguments::Handle(zone), 1186 TypeArguments::Handle(zone),
1187 Token::kNoSourcePos); 1187 TokenDescriptor::kNoSource);
1188 type.SetIsFinalized(); 1188 type.SetIsFinalized();
1189 type ^= type.Canonicalize(); 1189 type ^= type.Canonicalize();
1190 object_store->set_array_type(type); 1190 object_store->set_array_type(type);
1191 1191
1192 cls = object_store->growable_object_array_class(); // Was allocated above. 1192 cls = object_store->growable_object_array_class(); // Was allocated above.
1193 RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib); 1193 RegisterPrivateClass(cls, Symbols::_GrowableList(), core_lib);
1194 pending_classes.Add(cls); 1194 pending_classes.Add(cls);
1195 1195
1196 cls = Class::New<Array>(kImmutableArrayCid); 1196 cls = Class::New<Array>(kImmutableArrayCid);
1197 object_store->set_immutable_array_class(cls); 1197 object_store->set_immutable_array_class(cls);
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
1578 Smi& value = Smi::Handle(zone); 1578 Smi& value = Smi::Handle(zone);
1579 String& field_name = String::Handle(zone); 1579 String& field_name = String::Handle(zone);
1580 1580
1581 #define CLASS_LIST_WITH_NULL(V) \ 1581 #define CLASS_LIST_WITH_NULL(V) \
1582 V(Null) \ 1582 V(Null) \
1583 CLASS_LIST_NO_OBJECT(V) 1583 CLASS_LIST_NO_OBJECT(V)
1584 1584
1585 #define ADD_SET_FIELD(clazz) \ 1585 #define ADD_SET_FIELD(clazz) \
1586 field_name = Symbols::New("cid"#clazz); \ 1586 field_name = Symbols::New("cid"#clazz); \
1587 field = Field::New(field_name, true, false, true, false, cls, \ 1587 field = Field::New(field_name, true, false, true, false, cls, \
1588 Type::Handle(Type::IntType()), 0); \ 1588 Type::Handle(Type::IntType()), TokenDescriptor::kMinSource); \
1589 value = Smi::New(k##clazz##Cid); \ 1589 value = Smi::New(k##clazz##Cid); \
1590 field.SetStaticValue(value, true); \ 1590 field.SetStaticValue(value, true); \
1591 cls.AddField(field); \ 1591 cls.AddField(field); \
1592 1592
1593 CLASS_LIST_WITH_NULL(ADD_SET_FIELD) 1593 CLASS_LIST_WITH_NULL(ADD_SET_FIELD)
1594 #undef ADD_SET_FIELD 1594 #undef ADD_SET_FIELD
1595 1595
1596 isolate->object_store()->InitKnownObjects(); 1596 isolate->object_store()->InitKnownObjects();
1597 1597
1598 return Error::null(); 1598 return Error::null();
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 bool Class::IsInFullSnapshot() const { 1964 bool Class::IsInFullSnapshot() const {
1965 NoSafepointScope no_safepoint; 1965 NoSafepointScope no_safepoint;
1966 return raw_ptr()->library_->ptr()->is_in_fullsnapshot_; 1966 return raw_ptr()->library_->ptr()->is_in_fullsnapshot_;
1967 } 1967 }
1968 1968
1969 1969
1970 RawAbstractType* Class::RareType() const { 1970 RawAbstractType* Class::RareType() const {
1971 const Type& type = Type::Handle(Type::New( 1971 const Type& type = Type::Handle(Type::New(
1972 *this, 1972 *this,
1973 Object::null_type_arguments(), 1973 Object::null_type_arguments(),
1974 Token::kNoSourcePos)); 1974 TokenDescriptor::kNoSource));
1975 return ClassFinalizer::FinalizeType(*this, 1975 return ClassFinalizer::FinalizeType(*this,
1976 type, 1976 type,
1977 ClassFinalizer::kCanonicalize); 1977 ClassFinalizer::kCanonicalize);
1978 } 1978 }
1979 1979
1980 1980
1981 RawAbstractType* Class::DeclarationType() const { 1981 RawAbstractType* Class::DeclarationType() const {
1982 const TypeArguments& args = TypeArguments::Handle(type_parameters()); 1982 const TypeArguments& args = TypeArguments::Handle(type_parameters());
1983 const Type& type = Type::Handle(Type::New( 1983 const Type& type = Type::Handle(Type::New(
1984 *this, 1984 *this,
1985 args, 1985 args,
1986 Token::kNoSourcePos)); 1986 TokenDescriptor::kNoSource));
1987 return ClassFinalizer::FinalizeType(*this, 1987 return ClassFinalizer::FinalizeType(*this,
1988 type, 1988 type,
1989 ClassFinalizer::kCanonicalize); 1989 ClassFinalizer::kCanonicalize);
1990 } 1990 }
1991 1991
1992 1992
1993 template <class FakeObject> 1993 template <class FakeObject>
1994 RawClass* Class::New() { 1994 RawClass* Class::New() {
1995 ASSERT(Object::class_class() != Class::null()); 1995 ASSERT(Object::class_class() != Class::null());
1996 Class& result = Class::Handle(); 1996 Class& result = Class::Handle();
(...skipping 17 matching lines...) Expand all
2014 result.set_is_finalized(); 2014 result.set_is_finalized();
2015 } else { 2015 } else {
2016 // VM backed classes are almost ready: run checks and resolve class 2016 // VM backed classes are almost ready: run checks and resolve class
2017 // references, but do not recompute size. 2017 // references, but do not recompute size.
2018 result.set_is_prefinalized(); 2018 result.set_is_prefinalized();
2019 } 2019 }
2020 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); 2020 result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
2021 result.set_num_type_arguments(0); 2021 result.set_num_type_arguments(0);
2022 result.set_num_own_type_arguments(0); 2022 result.set_num_own_type_arguments(0);
2023 result.set_num_native_fields(0); 2023 result.set_num_native_fields(0);
2024 result.set_token_pos(Token::kNoSourcePos); 2024 result.set_token_pos(TokenDescriptor::kNoSource);
2025 result.InitEmptyFields(); 2025 result.InitEmptyFields();
2026 Isolate::Current()->RegisterClass(result); 2026 Isolate::Current()->RegisterClass(result);
2027 return result.raw(); 2027 return result.raw();
2028 } 2028 }
2029 2029
2030 2030
2031 2031
2032 static void ReportTooManyTypeArguments(const Class& cls) { 2032 static void ReportTooManyTypeArguments(const Class& cls) {
2033 Report::MessageF(Report::kError, 2033 Report::MessageF(Report::kError,
2034 Script::Handle(cls.script()), 2034 Script::Handle(cls.script()),
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
2614 RawFunction::Kind kind) const { 2614 RawFunction::Kind kind) const {
2615 Function& invocation = Function::Handle( 2615 Function& invocation = Function::Handle(
2616 Function::New(String::Handle(Symbols::New(target_name)), 2616 Function::New(String::Handle(Symbols::New(target_name)),
2617 kind, 2617 kind,
2618 false, // Not static. 2618 false, // Not static.
2619 false, // Not const. 2619 false, // Not const.
2620 false, // Not abstract. 2620 false, // Not abstract.
2621 false, // Not external. 2621 false, // Not external.
2622 false, // Not native. 2622 false, // Not native.
2623 *this, 2623 *this,
2624 0)); // token_pos 2624 TokenDescriptor::kMinSource));
2625 ArgumentsDescriptor desc(args_desc); 2625 ArgumentsDescriptor desc(args_desc);
2626 invocation.set_num_fixed_parameters(desc.PositionalCount()); 2626 invocation.set_num_fixed_parameters(desc.PositionalCount());
2627 invocation.SetNumOptionalParameters(desc.NamedCount(), 2627 invocation.SetNumOptionalParameters(desc.NamedCount(),
2628 false); // Not positional. 2628 false); // Not positional.
2629 invocation.set_parameter_types(Array::Handle(Array::New(desc.Count(), 2629 invocation.set_parameter_types(Array::Handle(Array::New(desc.Count(),
2630 Heap::kOld))); 2630 Heap::kOld)));
2631 invocation.set_parameter_names(Array::Handle(Array::New(desc.Count(), 2631 invocation.set_parameter_names(Array::Handle(Array::New(desc.Count(),
2632 Heap::kOld))); 2632 Heap::kOld)));
2633 // Receiver. 2633 // Receiver.
2634 invocation.SetParameterTypeAt(0, Object::dynamic_type()); 2634 invocation.SetParameterTypeAt(0, Object::dynamic_type());
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2671 const Class& owner = Class::Handle(closure_function.Owner()); 2671 const Class& owner = Class::Handle(closure_function.Owner());
2672 Function& extractor = Function::Handle( 2672 Function& extractor = Function::Handle(
2673 Function::New(String::Handle(Symbols::New(getter_name)), 2673 Function::New(String::Handle(Symbols::New(getter_name)),
2674 RawFunction::kMethodExtractor, 2674 RawFunction::kMethodExtractor,
2675 false, // Not static. 2675 false, // Not static.
2676 false, // Not const. 2676 false, // Not const.
2677 false, // Not abstract. 2677 false, // Not abstract.
2678 false, // Not external. 2678 false, // Not external.
2679 false, // Not native. 2679 false, // Not native.
2680 owner, 2680 owner,
2681 ClassifyingTokenPositions::kMethodExtractor)); // token_pos 2681 TokenDescriptor::kMethodExtractor));
2682 2682
2683 // Initialize signature: receiver is a single fixed parameter. 2683 // Initialize signature: receiver is a single fixed parameter.
2684 const intptr_t kNumParameters = 1; 2684 const intptr_t kNumParameters = 1;
2685 extractor.set_num_fixed_parameters(kNumParameters); 2685 extractor.set_num_fixed_parameters(kNumParameters);
2686 extractor.SetNumOptionalParameters(0, 0); 2686 extractor.SetNumOptionalParameters(0, 0);
2687 extractor.set_parameter_types(Object::extractor_parameter_types()); 2687 extractor.set_parameter_types(Object::extractor_parameter_types());
2688 extractor.set_parameter_names(Object::extractor_parameter_names()); 2688 extractor.set_parameter_names(Object::extractor_parameter_names());
2689 extractor.set_result_type(Object::dynamic_type()); 2689 extractor.set_result_type(Object::dynamic_type());
2690 2690
2691 extractor.set_extracted_method_closure(closure_function); 2691 extractor.set_extracted_method_closure(closure_function);
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
3084 ASSERT(fake.IsInstance()); 3084 ASSERT(fake.IsInstance());
3085 result.set_handle_vtable(fake.vtable()); 3085 result.set_handle_vtable(fake.vtable());
3086 result.set_instance_size(FakeInstance::InstanceSize()); 3086 result.set_instance_size(FakeInstance::InstanceSize());
3087 result.set_next_field_offset(FakeInstance::NextFieldOffset()); 3087 result.set_next_field_offset(FakeInstance::NextFieldOffset());
3088 result.set_id(index); 3088 result.set_id(index);
3089 result.set_state_bits(0); 3089 result.set_state_bits(0);
3090 result.set_type_arguments_field_offset_in_words(kNoTypeArguments); 3090 result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
3091 result.set_num_type_arguments(kUnknownNumTypeArguments); 3091 result.set_num_type_arguments(kUnknownNumTypeArguments);
3092 result.set_num_own_type_arguments(kUnknownNumTypeArguments); 3092 result.set_num_own_type_arguments(kUnknownNumTypeArguments);
3093 result.set_num_native_fields(0); 3093 result.set_num_native_fields(0);
3094 result.set_token_pos(Token::kNoSourcePos); 3094 result.set_token_pos(TokenDescriptor::kNoSource);
3095 result.InitEmptyFields(); 3095 result.InitEmptyFields();
3096 Isolate::Current()->RegisterClass(result); 3096 Isolate::Current()->RegisterClass(result);
3097 return result.raw(); 3097 return result.raw();
3098 } 3098 }
3099 3099
3100 3100
3101 RawClass* Class::New(const String& name, 3101 RawClass* Class::New(const String& name,
3102 const Script& script, 3102 const Script& script,
3103 intptr_t token_pos) { 3103 TokenDescriptor token_pos) {
3104 Class& result = Class::Handle(New<Instance>(kIllegalCid)); 3104 Class& result = Class::Handle(New<Instance>(kIllegalCid));
3105 result.set_name(name); 3105 result.set_name(name);
3106 result.set_script(script); 3106 result.set_script(script);
3107 result.set_token_pos(token_pos); 3107 result.set_token_pos(token_pos);
3108 return result.raw(); 3108 return result.raw();
3109 } 3109 }
3110 3110
3111 3111
3112 RawClass* Class::NewNativeWrapper(const Library& library, 3112 RawClass* Class::NewNativeWrapper(const Library& library,
3113 const String& name, 3113 const String& name,
3114 int field_count) { 3114 int field_count) {
3115 Class& cls = Class::Handle(library.LookupClass(name)); 3115 Class& cls = Class::Handle(library.LookupClass(name));
3116 if (cls.IsNull()) { 3116 if (cls.IsNull()) {
3117 cls = New(name, Script::Handle(), Token::kNoSourcePos); 3117 cls = New(name, Script::Handle(), TokenDescriptor::kNoSource);
3118 cls.SetFields(Object::empty_array()); 3118 cls.SetFields(Object::empty_array());
3119 cls.SetFunctions(Object::empty_array()); 3119 cls.SetFunctions(Object::empty_array());
3120 // Set super class to Object. 3120 // Set super class to Object.
3121 cls.set_super_type(Type::Handle(Type::ObjectType())); 3121 cls.set_super_type(Type::Handle(Type::ObjectType()));
3122 // Compute instance size. First word contains a pointer to a properly 3122 // Compute instance size. First word contains a pointer to a properly
3123 // sized typed array once the first native field has been set. 3123 // sized typed array once the first native field has been set.
3124 intptr_t instance_size = sizeof(RawInstance) + kWordSize; 3124 intptr_t instance_size = sizeof(RawInstance) + kWordSize;
3125 cls.set_instance_size(RoundedAllocationSize(instance_size)); 3125 cls.set_instance_size(RoundedAllocationSize(instance_size));
3126 cls.set_next_field_offset(instance_size); 3126 cls.set_next_field_offset(instance_size);
3127 cls.set_num_native_fields(field_count); 3127 cls.set_num_native_fields(field_count);
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
3352 } 3352 }
3353 UNREACHABLE(); 3353 UNREACHABLE();
3354 } 3354 }
3355 3355
3356 3356
3357 void Class::set_script(const Script& value) const { 3357 void Class::set_script(const Script& value) const {
3358 StorePointer(&raw_ptr()->script_, value.raw()); 3358 StorePointer(&raw_ptr()->script_, value.raw());
3359 } 3359 }
3360 3360
3361 3361
3362 void Class::set_token_pos(intptr_t token_pos) const { 3362 void Class::set_token_pos(TokenDescriptor token_pos) const {
3363 ASSERT(!Token::IsClassifying(token_pos)); 3363 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
3364 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 3364 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
3365 } 3365 }
3366 3366
3367 3367
3368 intptr_t Class::ComputeEndTokenPos() const { 3368 TokenDescriptor Class::ComputeEndTokenPos() const {
3369 // Return the begin token for synthetic classes. 3369 // Return the begin token for synthetic classes.
3370 if (IsMixinApplication() || IsTopLevel()) { 3370 if (IsMixinApplication() || IsTopLevel()) {
3371 return token_pos(); 3371 return token_pos();
3372 } 3372 }
3373 const Script& scr = Script::Handle(script()); 3373 const Script& scr = Script::Handle(script());
3374 ASSERT(!scr.IsNull()); 3374 ASSERT(!scr.IsNull());
3375 const TokenStream& tkns = TokenStream::Handle(scr.tokens()); 3375 const TokenStream& tkns = TokenStream::Handle(scr.tokens());
3376 TokenStream::Iterator tkit( 3376 TokenStream::Iterator tkit(tkns,
3377 tkns, token_pos(), TokenStream::Iterator::kNoNewlines); 3377 token_pos().value(),
3378 TokenStream::Iterator::kNoNewlines);
3378 intptr_t level = 0; 3379 intptr_t level = 0;
3379 while (tkit.CurrentTokenKind() != Token::kEOS) { 3380 while (tkit.CurrentTokenKind() != Token::kEOS) {
3380 if (tkit.CurrentTokenKind() == Token::kLBRACE) { 3381 if (tkit.CurrentTokenKind() == Token::kLBRACE) {
3381 level++; 3382 level++;
3382 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) { 3383 } else if (tkit.CurrentTokenKind() == Token::kRBRACE) {
3383 if (--level == 0) { 3384 if (--level == 0) {
3384 return tkit.CurrentPosition(); 3385 return TokenDescriptor(tkit.CurrentPosition());
3385 } 3386 }
3386 } 3387 }
3387 tkit.Advance(); 3388 tkit.Advance();
3388 } 3389 }
3389 UNREACHABLE(); 3390 UNREACHABLE();
3390 return 0; 3391 return TokenDescriptor::kNoSource;
3391 } 3392 }
3392 3393
3393 3394
3394 void Class::set_is_implemented() const { 3395 void Class::set_is_implemented() const {
3395 set_state_bits(ImplementedBit::update(true, raw_ptr()->state_bits_)); 3396 set_state_bits(ImplementedBit::update(true, raw_ptr()->state_bits_));
3396 } 3397 }
3397 3398
3398 3399
3399 void Class::set_is_abstract() const { 3400 void Class::set_is_abstract() const {
3400 set_state_bits(AbstractBit::update(true, raw_ptr()->state_bits_)); 3401 set_state_bits(AbstractBit::update(true, raw_ptr()->state_bits_));
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after
4239 set_constants(new_canonical_list); 4240 set_constants(new_canonical_list);
4240 new_canonical_list.SetAt(index, constant); 4241 new_canonical_list.SetAt(index, constant);
4241 } else { 4242 } else {
4242 canonical_list.SetAt(index, constant); 4243 canonical_list.SetAt(index, constant);
4243 } 4244 }
4244 } 4245 }
4245 4246
4246 4247
4247 RawUnresolvedClass* UnresolvedClass::New(const LibraryPrefix& library_prefix, 4248 RawUnresolvedClass* UnresolvedClass::New(const LibraryPrefix& library_prefix,
4248 const String& ident, 4249 const String& ident,
4249 intptr_t token_pos) { 4250 TokenDescriptor token_pos) {
4250 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New()); 4251 const UnresolvedClass& type = UnresolvedClass::Handle(UnresolvedClass::New());
4251 type.set_library_prefix(library_prefix); 4252 type.set_library_prefix(library_prefix);
4252 type.set_ident(ident); 4253 type.set_ident(ident);
4253 type.set_token_pos(token_pos); 4254 type.set_token_pos(token_pos);
4254 return type.raw(); 4255 return type.raw();
4255 } 4256 }
4256 4257
4257 4258
4258 RawUnresolvedClass* UnresolvedClass::New() { 4259 RawUnresolvedClass* UnresolvedClass::New() {
4259 ASSERT(Object::unresolved_class_class() != Class::null()); 4260 ASSERT(Object::unresolved_class_class() != Class::null());
4260 RawObject* raw = Object::Allocate(UnresolvedClass::kClassId, 4261 RawObject* raw = Object::Allocate(UnresolvedClass::kClassId,
4261 UnresolvedClass::InstanceSize(), 4262 UnresolvedClass::InstanceSize(),
4262 Heap::kOld); 4263 Heap::kOld);
4263 return reinterpret_cast<RawUnresolvedClass*>(raw); 4264 return reinterpret_cast<RawUnresolvedClass*>(raw);
4264 } 4265 }
4265 4266
4266 4267
4267 void UnresolvedClass::set_token_pos(intptr_t token_pos) const { 4268 void UnresolvedClass::set_token_pos(TokenDescriptor token_pos) const {
4268 ASSERT(!Token::IsClassifying(token_pos)); 4269 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
4269 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 4270 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
4270 } 4271 }
4271 4272
4272 4273
4273 void UnresolvedClass::set_ident(const String& ident) const { 4274 void UnresolvedClass::set_ident(const String& ident) const {
4274 StorePointer(&raw_ptr()->ident_, ident.raw()); 4275 StorePointer(&raw_ptr()->ident_, ident.raw());
4275 } 4276 }
4276 4277
4277 4278
4278 void UnresolvedClass::set_library_prefix( 4279 void UnresolvedClass::set_library_prefix(
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after
5252 RawScript* Function::eval_script() const { 5253 RawScript* Function::eval_script() const {
5253 const Object& obj = Object::Handle(raw_ptr()->data_); 5254 const Object& obj = Object::Handle(raw_ptr()->data_);
5254 if (obj.IsScript()) { 5255 if (obj.IsScript()) {
5255 return Script::Cast(obj).raw(); 5256 return Script::Cast(obj).raw();
5256 } 5257 }
5257 return Script::null(); 5258 return Script::null();
5258 } 5259 }
5259 5260
5260 5261
5261 void Function::set_eval_script(const Script& script) const { 5262 void Function::set_eval_script(const Script& script) const {
5262 ASSERT(token_pos() == 0); 5263 ASSERT(token_pos() == TokenDescriptor::kMinSource);
5263 ASSERT(raw_ptr()->data_ == Object::null()); 5264 ASSERT(raw_ptr()->data_ == Object::null());
5264 set_data(script); 5265 set_data(script);
5265 } 5266 }
5266 5267
5267 5268
5268 RawFunction* Function::extracted_method_closure() const { 5269 RawFunction* Function::extracted_method_closure() const {
5269 ASSERT(kind() == RawFunction::kMethodExtractor); 5270 ASSERT(kind() == RawFunction::kMethodExtractor);
5270 const Object& obj = Object::Handle(raw_ptr()->data_); 5271 const Object& obj = Object::Handle(raw_ptr()->data_);
5271 ASSERT(obj.IsFunction()); 5272 ASSERT(obj.IsFunction());
5272 return Function::Cast(obj).raw(); 5273 return Function::Cast(obj).raw();
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
5402 // class may be. In this case, the scope class of the function type is reset 5403 // class may be. In this case, the scope class of the function type is reset
5403 // to _Closure class as well as the owner of the signature function. 5404 // to _Closure class as well as the owner of the signature function.
5404 Class& scope_class = Class::Handle(Owner()); 5405 Class& scope_class = Class::Handle(Owner());
5405 if (!scope_class.IsTypedefClass() && 5406 if (!scope_class.IsTypedefClass() &&
5406 (is_static() || 5407 (is_static() ||
5407 !scope_class.IsGeneric() || 5408 !scope_class.IsGeneric() ||
5408 HasInstantiatedSignature())) { 5409 HasInstantiatedSignature())) {
5409 scope_class = Isolate::Current()->object_store()->closure_class(); 5410 scope_class = Isolate::Current()->object_store()->closure_class();
5410 if (IsSignatureFunction()) { 5411 if (IsSignatureFunction()) {
5411 set_owner(scope_class); 5412 set_owner(scope_class);
5412 set_token_pos(Token::kNoSourcePos); 5413 set_token_pos(TokenDescriptor::kNoSource);
5413 } 5414 }
5414 } 5415 }
5415 const TypeArguments& signature_type_arguments = 5416 const TypeArguments& signature_type_arguments =
5416 TypeArguments::Handle(scope_class.type_parameters()); 5417 TypeArguments::Handle(scope_class.type_parameters());
5417 // Return the still unfinalized signature type. 5418 // Return the still unfinalized signature type.
5418 type = FunctionType::New(scope_class, 5419 type = FunctionType::New(scope_class,
5419 signature_type_arguments, 5420 signature_type_arguments,
5420 *this, 5421 *this,
5421 token_pos()); 5422 token_pos());
5422 5423
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
5694 } 5695 }
5695 5696
5696 5697
5697 void Function::set_recognized_kind(MethodRecognizer::Kind value) const { 5698 void Function::set_recognized_kind(MethodRecognizer::Kind value) const {
5698 // Prevent multiple settings of kind. 5699 // Prevent multiple settings of kind.
5699 ASSERT((value == MethodRecognizer::kUnknown) || !IsRecognized()); 5700 ASSERT((value == MethodRecognizer::kUnknown) || !IsRecognized());
5700 set_kind_tag(RecognizedBits::update(value, raw_ptr()->kind_tag_)); 5701 set_kind_tag(RecognizedBits::update(value, raw_ptr()->kind_tag_));
5701 } 5702 }
5702 5703
5703 5704
5704 void Function::set_token_pos(intptr_t token_pos) const { 5705 void Function::set_token_pos(TokenDescriptor token_pos) const {
5705 ASSERT(!Token::IsClassifying(token_pos) || IsMethodExtractor()); 5706 ASSERT(!TokenDescriptor(token_pos).IsClassifying() || IsMethodExtractor());
5706 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 5707 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
5707 } 5708 }
5708 5709
5709 5710
5710 void Function::set_kind_tag(intptr_t value) const { 5711 void Function::set_kind_tag(intptr_t value) const {
5711 StoreNonPointer(&raw_ptr()->kind_tag_, static_cast<uint32_t>(value)); 5712 StoreNonPointer(&raw_ptr()->kind_tag_, static_cast<uint32_t>(value));
5712 } 5713 }
5713 5714
5714 5715
5715 void Function::set_num_fixed_parameters(intptr_t value) const { 5716 void Function::set_num_fixed_parameters(intptr_t value) const {
(...skipping 23 matching lines...) Expand all
5739 5740
5740 bool Function::IsOptimizable() const { 5741 bool Function::IsOptimizable() const {
5741 if (FLAG_coverage_dir != NULL) { 5742 if (FLAG_coverage_dir != NULL) {
5742 // Do not optimize if collecting coverage data. 5743 // Do not optimize if collecting coverage data.
5743 return false; 5744 return false;
5744 } 5745 }
5745 if (is_native()) { 5746 if (is_native()) {
5746 // Native methods don't need to be optimized. 5747 // Native methods don't need to be optimized.
5747 return false; 5748 return false;
5748 } 5749 }
5750 const intptr_t function_length =
5751 end_token_pos().value() - token_pos().value();
5749 if (is_optimizable() && (script() != Script::null()) && 5752 if (is_optimizable() && (script() != Script::null()) &&
5750 ((end_token_pos() - token_pos()) < FLAG_huge_method_cutoff_in_tokens)) { 5753 (function_length < FLAG_huge_method_cutoff_in_tokens)) {
5751 // Additional check needed for implicit getters. 5754 // Additional check needed for implicit getters.
5752 return (unoptimized_code() == Object::null()) || 5755 return (unoptimized_code() == Object::null()) ||
5753 (Code::Handle(unoptimized_code()).Size() < 5756 (Code::Handle(unoptimized_code()).Size() <
5754 FLAG_huge_method_cutoff_in_code_size); 5757 FLAG_huge_method_cutoff_in_code_size);
5755 } 5758 }
5756 return false; 5759 return false;
5757 } 5760 }
5758 5761
5759 5762
5760 bool Function::IsNativeAutoSetupScope() const { 5763 bool Function::IsNativeAutoSetupScope() const {
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
6314 6317
6315 6318
6316 RawFunction* Function::New(const String& name, 6319 RawFunction* Function::New(const String& name,
6317 RawFunction::Kind kind, 6320 RawFunction::Kind kind,
6318 bool is_static, 6321 bool is_static,
6319 bool is_const, 6322 bool is_const,
6320 bool is_abstract, 6323 bool is_abstract,
6321 bool is_external, 6324 bool is_external,
6322 bool is_native, 6325 bool is_native,
6323 const Object& owner, 6326 const Object& owner,
6324 intptr_t token_pos) { 6327 TokenDescriptor token_pos) {
6325 ASSERT(!owner.IsNull()); 6328 ASSERT(!owner.IsNull());
6326 const Function& result = Function::Handle(Function::New()); 6329 const Function& result = Function::Handle(Function::New());
6327 result.set_parameter_types(Object::empty_array()); 6330 result.set_parameter_types(Object::empty_array());
6328 result.set_parameter_names(Object::empty_array()); 6331 result.set_parameter_names(Object::empty_array());
6329 result.set_name(name); 6332 result.set_name(name);
6330 result.set_kind(kind); 6333 result.set_kind(kind);
6331 result.set_recognized_kind(MethodRecognizer::kUnknown); 6334 result.set_recognized_kind(MethodRecognizer::kUnknown);
6332 result.set_modifier(RawFunction::kNoModifier); 6335 result.set_modifier(RawFunction::kNoModifier);
6333 result.set_is_static(is_static); 6336 result.set_is_static(is_static);
6334 result.set_is_const(is_const); 6337 result.set_is_const(is_const);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
6394 type ^= type.CloneUninstantiated(new_owner); 6397 type ^= type.CloneUninstantiated(new_owner);
6395 clone.SetParameterTypeAt(i, type); 6398 clone.SetParameterTypeAt(i, type);
6396 } 6399 }
6397 } 6400 }
6398 return clone.raw(); 6401 return clone.raw();
6399 } 6402 }
6400 6403
6401 6404
6402 RawFunction* Function::NewClosureFunction(const String& name, 6405 RawFunction* Function::NewClosureFunction(const String& name,
6403 const Function& parent, 6406 const Function& parent,
6404 intptr_t token_pos) { 6407 TokenDescriptor token_pos) {
6405 ASSERT(!parent.IsNull()); 6408 ASSERT(!parent.IsNull());
6406 // Use the owner defining the parent function and not the class containing it. 6409 // Use the owner defining the parent function and not the class containing it.
6407 const Object& parent_owner = Object::Handle(parent.raw_ptr()->owner_); 6410 const Object& parent_owner = Object::Handle(parent.raw_ptr()->owner_);
6408 ASSERT(!parent_owner.IsNull()); 6411 ASSERT(!parent_owner.IsNull());
6409 const Function& result = Function::Handle( 6412 const Function& result = Function::Handle(
6410 Function::New(name, 6413 Function::New(name,
6411 RawFunction::kClosureFunction, 6414 RawFunction::kClosureFunction,
6412 /* is_static = */ parent.is_static(), 6415 /* is_static = */ parent.is_static(),
6413 /* is_const = */ false, 6416 /* is_const = */ false,
6414 /* is_abstract = */ false, 6417 /* is_abstract = */ false,
6415 /* is_external = */ false, 6418 /* is_external = */ false,
6416 parent.is_native(), 6419 parent.is_native(),
6417 parent_owner, 6420 parent_owner,
6418 token_pos)); 6421 token_pos));
6419 result.set_parent_function(parent); 6422 result.set_parent_function(parent);
6420 return result.raw(); 6423 return result.raw();
6421 } 6424 }
6422 6425
6423 6426
6424 RawFunction* Function::NewSignatureFunction(const Class& owner, 6427 RawFunction* Function::NewSignatureFunction(const Class& owner,
6425 intptr_t token_pos) { 6428 TokenDescriptor token_pos) {
6426 const Function& result = Function::Handle(Function::New( 6429 const Function& result = Function::Handle(Function::New(
6427 Symbols::AnonymousSignature(), 6430 Symbols::AnonymousSignature(),
6428 RawFunction::kSignatureFunction, 6431 RawFunction::kSignatureFunction,
6429 /* is_static = */ false, 6432 /* is_static = */ false,
6430 /* is_const = */ false, 6433 /* is_const = */ false,
6431 /* is_abstract = */ false, 6434 /* is_abstract = */ false,
6432 /* is_external = */ false, 6435 /* is_external = */ false,
6433 /* is_native = */ false, 6436 /* is_native = */ false,
6434 owner, // Same as function type scope class. 6437 owner, // Same as function type scope class.
6435 token_pos)); 6438 token_pos));
6436 result.set_is_reflectable(false); 6439 result.set_is_reflectable(false);
6437 result.set_is_visible(false); 6440 result.set_is_visible(false);
6438 result.set_is_debuggable(false); 6441 result.set_is_debuggable(false);
6439 return result.raw(); 6442 return result.raw();
6440 } 6443 }
6441 6444
6442 6445
6443 RawFunction* Function::NewEvalFunction(const Class& owner, 6446 RawFunction* Function::NewEvalFunction(const Class& owner,
6444 const Script& script, 6447 const Script& script,
6445 bool is_static) { 6448 bool is_static) {
6446 const Function& result = Function::Handle( 6449 const Function& result = Function::Handle(
6447 Function::New(String::Handle(Symbols::New(":Eval")), 6450 Function::New(String::Handle(Symbols::New(":Eval")),
6448 RawFunction::kRegularFunction, 6451 RawFunction::kRegularFunction,
6449 is_static, 6452 is_static,
6450 /* is_const = */ false, 6453 /* is_const = */ false,
6451 /* is_abstract = */ false, 6454 /* is_abstract = */ false,
6452 /* is_external = */ false, 6455 /* is_external = */ false,
6453 /* is_native = */ false, 6456 /* is_native = */ false,
6454 owner, 6457 owner,
6455 /* token_pos = */ 0)); 6458 TokenDescriptor::kMinSource));
6456 ASSERT(!script.IsNull()); 6459 ASSERT(!script.IsNull());
6457 result.set_is_debuggable(false); 6460 result.set_is_debuggable(false);
6458 result.set_is_visible(true); 6461 result.set_is_visible(true);
6459 result.set_eval_script(script); 6462 result.set_eval_script(script);
6460 return result.raw(); 6463 return result.raw();
6461 } 6464 }
6462 6465
6463 RawFunction* Function::ImplicitClosureFunction() const { 6466 RawFunction* Function::ImplicitClosureFunction() const {
6464 // Return the existing implicit closure function if any. 6467 // Return the existing implicit closure function if any.
6465 if (implicit_closure_function() != Function::null()) { 6468 if (implicit_closure_function() != Function::null()) {
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
6736 const Object& obj = Object::Handle(raw_ptr()->owner_); 6739 const Object& obj = Object::Handle(raw_ptr()->owner_);
6737 if (obj.IsClass()) { 6740 if (obj.IsClass()) {
6738 return Class::Cast(obj).raw(); 6741 return Class::Cast(obj).raw();
6739 } 6742 }
6740 ASSERT(obj.IsPatchClass()); 6743 ASSERT(obj.IsPatchClass());
6741 return PatchClass::Cast(obj).origin_class(); 6744 return PatchClass::Cast(obj).origin_class();
6742 } 6745 }
6743 6746
6744 6747
6745 RawScript* Function::script() const { 6748 RawScript* Function::script() const {
6746 if (token_pos() == 0) { 6749 if (token_pos() == TokenDescriptor::kMinSource) {
6747 // Testing for position 0 is an optimization that relies on temporary 6750 // Testing for position 0 is an optimization that relies on temporary
6748 // eval functions having token position 0. 6751 // eval functions having token position 0.
6749 const Script& script = Script::Handle(eval_script()); 6752 const Script& script = Script::Handle(eval_script());
6750 if (!script.IsNull()) { 6753 if (!script.IsNull()) {
6751 return script.raw(); 6754 return script.raw();
6752 } 6755 }
6753 } 6756 }
6754 if (IsClosureFunction()) { 6757 if (IsClosureFunction()) {
6755 return Function::Handle(parent_function()).script(); 6758 return Function::Handle(parent_function()).script();
6756 } 6759 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
6839 // relaxed. In particular we might start associating some source with the 6842 // relaxed. In particular we might start associating some source with the
6840 // forwarding constructors when it becomes possible to specify a particular 6843 // forwarding constructors when it becomes possible to specify a particular
6841 // constructor from the mixin to use. 6844 // constructor from the mixin to use.
6842 return String::null(); 6845 return String::null();
6843 } 6846 }
6844 const Script& func_script = Script::Handle(script()); 6847 const Script& func_script = Script::Handle(script());
6845 const TokenStream& stream = TokenStream::Handle(func_script.tokens()); 6848 const TokenStream& stream = TokenStream::Handle(func_script.tokens());
6846 if (!func_script.HasSource()) { 6849 if (!func_script.HasSource()) {
6847 // When source is not available, avoid printing the whole token stream and 6850 // When source is not available, avoid printing the whole token stream and
6848 // doing expensive position calculations. 6851 // doing expensive position calculations.
6849 return stream.GenerateSource(token_pos(), end_token_pos() + 1); 6852 return stream.GenerateSource(token_pos(),
6853 TokenDescriptor(end_token_pos().value() + 1));
6850 } 6854 }
6851 6855
6852 const TokenStream::Iterator tkit(stream, end_token_pos()); 6856 const TokenStream::Iterator tkit(stream, end_token_pos().value());
6853 intptr_t from_line; 6857 intptr_t from_line;
6854 intptr_t from_col; 6858 intptr_t from_col;
6855 intptr_t to_line; 6859 intptr_t to_line;
6856 intptr_t to_col; 6860 intptr_t to_col;
6857 func_script.GetTokenLocation(token_pos(), &from_line, &from_col); 6861 func_script.GetTokenLocation(token_pos(), &from_line, &from_col);
6858 func_script.GetTokenLocation(end_token_pos(), &to_line, &to_col); 6862 func_script.GetTokenLocation(end_token_pos(), &to_line, &to_col);
6859 intptr_t last_tok_len = String::Handle(tkit.CurrentLiteral()).Length(); 6863 intptr_t last_tok_len = String::Handle(tkit.CurrentLiteral()).Length();
6860 // Handle special cases for end tokens of closures (where we exclude the last 6864 // Handle special cases for end tokens of closures (where we exclude the last
6861 // token): 6865 // token):
6862 // (1) "foo(() => null, bar);": End token is `,', but we don't print it. 6866 // (1) "foo(() => null, bar);": End token is `,', but we don't print it.
(...skipping 16 matching lines...) Expand all
6879 // Construct fingerprint from token stream. The token stream contains also 6883 // Construct fingerprint from token stream. The token stream contains also
6880 // arguments. 6884 // arguments.
6881 int32_t Function::SourceFingerprint() const { 6885 int32_t Function::SourceFingerprint() const {
6882 uint32_t result = IsImplicitClosureFunction() 6886 uint32_t result = IsImplicitClosureFunction()
6883 ? String::Handle(Function::Handle(parent_function()).Signature()).Hash() 6887 ? String::Handle(Function::Handle(parent_function()).Signature()).Hash()
6884 : String::Handle(Signature()).Hash(); 6888 : String::Handle(Signature()).Hash();
6885 TokenStream::Iterator tokens_iterator(TokenStream::Handle( 6889 TokenStream::Iterator tokens_iterator(TokenStream::Handle(
6886 Script::Handle(script()).tokens()), token_pos()); 6890 Script::Handle(script()).tokens()), token_pos());
6887 Object& obj = Object::Handle(); 6891 Object& obj = Object::Handle();
6888 String& literal = String::Handle(); 6892 String& literal = String::Handle();
6889 while (tokens_iterator.CurrentPosition() < end_token_pos()) { 6893 while (tokens_iterator.CurrentPosition() < end_token_pos().value()) {
6890 uint32_t val = 0; 6894 uint32_t val = 0;
6891 obj = tokens_iterator.CurrentToken(); 6895 obj = tokens_iterator.CurrentToken();
6892 if (obj.IsSmi()) { 6896 if (obj.IsSmi()) {
6893 val = Smi::Cast(obj).Value(); 6897 val = Smi::Cast(obj).Value();
6894 } else { 6898 } else {
6895 literal = tokens_iterator.MakeLiteralToken(obj); 6899 literal = tokens_iterator.MakeLiteralToken(obj);
6896 val = literal.Hash(); 6900 val = literal.Hash();
6897 } 6901 }
6898 result = 31 * result + val; 6902 result = 31 * result + val;
6899 tokens_iterator.Advance(); 6903 tokens_iterator.Advance();
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
7346 } 7350 }
7347 7351
7348 7352
7349 RawField* Field::New(const String& name, 7353 RawField* Field::New(const String& name,
7350 bool is_static, 7354 bool is_static,
7351 bool is_final, 7355 bool is_final,
7352 bool is_const, 7356 bool is_const,
7353 bool is_reflectable, 7357 bool is_reflectable,
7354 const Class& owner, 7358 const Class& owner,
7355 const AbstractType& type, 7359 const AbstractType& type,
7356 intptr_t token_pos) { 7360 TokenDescriptor token_pos) {
7357 ASSERT(!owner.IsNull()); 7361 ASSERT(!owner.IsNull());
7358 const Field& result = Field::Handle(Field::New()); 7362 const Field& result = Field::Handle(Field::New());
7359 result.set_name(name); 7363 result.set_name(name);
7360 result.set_is_static(is_static); 7364 result.set_is_static(is_static);
7361 if (!is_static) { 7365 if (!is_static) {
7362 result.SetOffset(0); 7366 result.SetOffset(0);
7363 } 7367 }
7364 result.set_is_final(is_final); 7368 result.set_is_final(is_final);
7365 result.set_is_const(is_const); 7369 result.set_is_const(is_const);
7366 result.set_is_reflectable(is_reflectable); 7370 result.set_is_reflectable(is_reflectable);
(...skipping 13 matching lines...) Expand all
7380 result.set_guarded_list_length(Field::kNoFixedLength); 7384 result.set_guarded_list_length(Field::kNoFixedLength);
7381 } 7385 }
7382 return result.raw(); 7386 return result.raw();
7383 } 7387 }
7384 7388
7385 7389
7386 RawField* Field::NewTopLevel(const String& name, 7390 RawField* Field::NewTopLevel(const String& name,
7387 bool is_final, 7391 bool is_final,
7388 bool is_const, 7392 bool is_const,
7389 const Object& owner, 7393 const Object& owner,
7390 intptr_t token_pos) { 7394 TokenDescriptor token_pos) {
7391 ASSERT(!owner.IsNull()); 7395 ASSERT(!owner.IsNull());
7392 const Field& result = Field::Handle(Field::New()); 7396 const Field& result = Field::Handle(Field::New());
7393 result.set_name(name); 7397 result.set_name(name);
7394 result.set_is_static(true); 7398 result.set_is_static(true);
7395 result.set_is_final(is_final); 7399 result.set_is_final(is_final);
7396 result.set_is_const(is_const); 7400 result.set_is_const(is_const);
7397 result.set_is_reflectable(true); 7401 result.set_is_reflectable(true);
7398 result.set_is_double_initialized(false); 7402 result.set_is_double_initialized(false);
7399 result.set_owner(owner); 7403 result.set_owner(owner);
7400 result.set_token_pos(token_pos); 7404 result.set_token_pos(token_pos);
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
7979 RawString* TokenStream::PrivateKey() const { 7983 RawString* TokenStream::PrivateKey() const {
7980 return raw_ptr()->private_key_; 7984 return raw_ptr()->private_key_;
7981 } 7985 }
7982 7986
7983 7987
7984 void TokenStream::SetPrivateKey(const String& value) const { 7988 void TokenStream::SetPrivateKey(const String& value) const {
7985 StorePointer(&raw_ptr()->private_key_, value.raw()); 7989 StorePointer(&raw_ptr()->private_key_, value.raw());
7986 } 7990 }
7987 7991
7988 RawString* TokenStream::GenerateSource() const { 7992 RawString* TokenStream::GenerateSource() const {
7989 return GenerateSource(0, kMaxElements); 7993 return GenerateSource(TokenDescriptor::kMinSource,
7994 TokenDescriptor::kMaxSource);
7990 } 7995 }
7991 7996
7992 RawString* TokenStream::GenerateSource(intptr_t start_pos, 7997 RawString* TokenStream::GenerateSource(TokenDescriptor start_pos,
7993 intptr_t end_pos) const { 7998 TokenDescriptor end_pos) const {
7994 Iterator iterator(*this, start_pos, Iterator::kAllTokens); 7999 Iterator iterator(*this, start_pos, Iterator::kAllTokens);
7995 const ExternalTypedData& data = ExternalTypedData::Handle(GetStream()); 8000 const ExternalTypedData& data = ExternalTypedData::Handle(GetStream());
7996 const GrowableObjectArray& literals = 8001 const GrowableObjectArray& literals =
7997 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length())); 8002 GrowableObjectArray::Handle(GrowableObjectArray::New(data.Length()));
7998 const String& private_key = String::Handle(PrivateKey()); 8003 const String& private_key = String::Handle(PrivateKey());
7999 intptr_t private_len = private_key.Length(); 8004 intptr_t private_len = private_key.Length();
8000 8005
8001 Token::Kind curr = iterator.CurrentTokenKind(); 8006 Token::Kind curr = iterator.CurrentTokenKind();
8002 Token::Kind prev = Token::kILLEGAL; 8007 Token::Kind prev = Token::kILLEGAL;
8003 // Handles used in the loop. 8008 // Handles used in the loop.
8004 Object& obj = Object::Handle(); 8009 Object& obj = Object::Handle();
8005 String& literal = String::Handle(); 8010 String& literal = String::Handle();
8006 // Current indentation level. 8011 // Current indentation level.
8007 int indent = 0; 8012 int indent = 0;
8008 8013
8009 while ((curr != Token::kEOS) && (iterator.CurrentPosition() < end_pos)) { 8014 while ((curr != Token::kEOS) &&
8015 (iterator.CurrentPosition() < end_pos.value())) {
8010 // Remember current values for this token. 8016 // Remember current values for this token.
8011 obj = iterator.CurrentToken(); 8017 obj = iterator.CurrentToken();
8012 literal = iterator.MakeLiteralToken(obj); 8018 literal = iterator.MakeLiteralToken(obj);
8013 // Advance to be able to use next token kind. 8019 // Advance to be able to use next token kind.
8014 iterator.Advance(); 8020 iterator.Advance();
8015 Token::Kind next = iterator.CurrentTokenKind(); 8021 Token::Kind next = iterator.CurrentTokenKind();
8016 8022
8017 // Handle the current token. 8023 // Handle the current token.
8018 if (curr == Token::kSTRING) { 8024 if (curr == Token::kSTRING) {
8019 bool escape_characters = false; 8025 bool escape_characters = false;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
8157 8163
8158 // Setup for next iteration. 8164 // Setup for next iteration.
8159 prev = curr; 8165 prev = curr;
8160 curr = next; 8166 curr = next;
8161 } 8167 }
8162 const Array& source = Array::Handle(Array::MakeArray(literals)); 8168 const Array& source = Array::Handle(Array::MakeArray(literals));
8163 return String::ConcatAll(source); 8169 return String::ConcatAll(source);
8164 } 8170 }
8165 8171
8166 8172
8167 intptr_t TokenStream::ComputeSourcePosition(intptr_t tok_pos) const { 8173 TokenDescriptor TokenStream::ComputeSourcePosition(
8168 Iterator iterator(*this, 0, Iterator::kAllTokens); 8174 TokenDescriptor tok_pos) const {
8169 intptr_t src_pos = 0; 8175 Iterator iterator(*this, TokenDescriptor::kMinSource, Iterator::kAllTokens);
8176 TokenDescriptor src_pos = TokenDescriptor::kMinSource;
8170 Token::Kind kind = iterator.CurrentTokenKind(); 8177 Token::Kind kind = iterator.CurrentTokenKind();
8171 while (iterator.CurrentPosition() < tok_pos && kind != Token::kEOS) { 8178 while (iterator.CurrentPosition() < tok_pos.value() && kind != Token::kEOS) {
8172 iterator.Advance(); 8179 iterator.Advance();
8173 kind = iterator.CurrentTokenKind(); 8180 kind = iterator.CurrentTokenKind();
8174 src_pos += 1; 8181 src_pos.Next();
8175 } 8182 }
8176 return src_pos; 8183 return src_pos;
8177 } 8184 }
8178 8185
8179 8186
8180 RawTokenStream* TokenStream::New() { 8187 RawTokenStream* TokenStream::New() {
8181 ASSERT(Object::token_stream_class() != Class::null()); 8188 ASSERT(Object::token_stream_class() != Class::null());
8182 RawObject* raw = Object::Allocate(TokenStream::kClassId, 8189 RawObject* raw = Object::Allocate(TokenStream::kClassId,
8183 TokenStream::InstanceSize(), 8190 TokenStream::InstanceSize(),
8184 Heap::kOld); 8191 Heap::kOld);
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
8449 : tokens_(TokenStream::Handle(tokens.raw())), 8456 : tokens_(TokenStream::Handle(tokens.raw())),
8450 data_(ExternalTypedData::Handle(tokens.GetStream())), 8457 data_(ExternalTypedData::Handle(tokens.GetStream())),
8451 stream_(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), data_.Length()), 8458 stream_(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), data_.Length()),
8452 token_objects_(Array::Handle( 8459 token_objects_(Array::Handle(
8453 GrowableObjectArray::Handle(tokens.TokenObjects()).data())), 8460 GrowableObjectArray::Handle(tokens.TokenObjects()).data())),
8454 obj_(Object::Handle()), 8461 obj_(Object::Handle()),
8455 cur_token_pos_(token_pos), 8462 cur_token_pos_(token_pos),
8456 cur_token_kind_(Token::kILLEGAL), 8463 cur_token_kind_(Token::kILLEGAL),
8457 cur_token_obj_index_(-1), 8464 cur_token_obj_index_(-1),
8458 stream_type_(stream_type) { 8465 stream_type_(stream_type) {
8459 ASSERT(token_pos != Token::kNoSourcePos); 8466 ASSERT(token_pos != TokenDescriptor::kNoSource.value());
8460 if (token_pos >= 0) { 8467 if (TokenDescriptor(token_pos).IsReal()) {
8461 SetCurrentPosition(token_pos); 8468 SetCurrentPosition(token_pos);
8462 } 8469 }
8463 } 8470 }
8464 8471
8465 8472
8473 TokenStream::Iterator::Iterator(const TokenStream& tokens,
8474 TokenDescriptor token_pos,
8475 Iterator::StreamType stream_type)
8476 : tokens_(TokenStream::Handle(tokens.raw())),
8477 data_(ExternalTypedData::Handle(tokens.GetStream())),
8478 stream_(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), data_.Length()),
8479 token_objects_(Array::Handle(
8480 GrowableObjectArray::Handle(tokens.TokenObjects()).data())),
8481 obj_(Object::Handle()),
8482 cur_token_pos_(token_pos.value()),
8483 cur_token_kind_(Token::kILLEGAL),
8484 cur_token_obj_index_(-1),
8485 stream_type_(stream_type) {
8486 ASSERT(token_pos != TokenDescriptor::kNoSource);
8487 if (token_pos.IsReal()) {
8488 SetCurrentPosition(token_pos.value());
8489 }
8490 }
8491
8492
8466 void TokenStream::Iterator::SetStream(const TokenStream& tokens, 8493 void TokenStream::Iterator::SetStream(const TokenStream& tokens,
8467 intptr_t token_pos) { 8494 intptr_t token_pos) {
8468 tokens_ = tokens.raw(); 8495 tokens_ = tokens.raw();
8469 data_ = tokens.GetStream(); 8496 data_ = tokens.GetStream();
8470 stream_.SetStream(reinterpret_cast<uint8_t*>(data_.DataAddr(0)), 8497 stream_.SetStream(reinterpret_cast<uint8_t*>(data_.DataAddr(0)),
8471 data_.Length()); 8498 data_.Length());
8472 token_objects_ = GrowableObjectArray::Handle(tokens.TokenObjects()).data(); 8499 token_objects_ = GrowableObjectArray::Handle(tokens.TokenObjects()).data();
8473 obj_ = Object::null(); 8500 obj_ = Object::null();
8474 cur_token_pos_ = token_pos; 8501 cur_token_pos_ = token_pos;
8475 cur_token_kind_ = Token::kILLEGAL; 8502 cur_token_kind_ = Token::kILLEGAL;
8476 cur_token_obj_index_ = -1; 8503 cur_token_obj_index_ = -1;
8477 SetCurrentPosition(token_pos); 8504 SetCurrentPosition(token_pos);
8478 } 8505 }
8479 8506
8480 8507
8508 void TokenStream::Iterator::SetStream(const TokenStream& tokens,
8509 TokenDescriptor token_pos) {
8510 SetStream(tokens, token_pos.value());
8511 }
8512
8513
8481 bool TokenStream::Iterator::IsValid() const { 8514 bool TokenStream::Iterator::IsValid() const {
8482 return !tokens_.IsNull(); 8515 return !tokens_.IsNull();
8483 } 8516 }
8484 8517
8485 8518
8486 Token::Kind TokenStream::Iterator::LookaheadTokenKind(intptr_t num_tokens) { 8519 Token::Kind TokenStream::Iterator::LookaheadTokenKind(intptr_t num_tokens) {
8487 intptr_t saved_position = stream_.Position(); 8520 intptr_t saved_position = stream_.Position();
8488 Token::Kind kind = Token::kILLEGAL; 8521 Token::Kind kind = Token::kILLEGAL;
8489 intptr_t value = -1; 8522 intptr_t value = -1;
8490 intptr_t count = 0; 8523 intptr_t count = 0;
(...skipping 26 matching lines...) Expand all
8517 return cur_token_pos_; 8550 return cur_token_pos_;
8518 } 8551 }
8519 8552
8520 8553
8521 void TokenStream::Iterator::SetCurrentPosition(intptr_t value) { 8554 void TokenStream::Iterator::SetCurrentPosition(intptr_t value) {
8522 stream_.SetPosition(value); 8555 stream_.SetPosition(value);
8523 Advance(); 8556 Advance();
8524 } 8557 }
8525 8558
8526 8559
8560 void TokenStream::Iterator::SetCurrentPosition(TokenDescriptor token_pos) {
8561 SetCurrentPosition(token_pos.value());
8562 }
8563
8564
8527 void TokenStream::Iterator::Advance() { 8565 void TokenStream::Iterator::Advance() {
8528 intptr_t value; 8566 intptr_t value;
8529 do { 8567 do {
8530 cur_token_pos_ = stream_.Position(); 8568 cur_token_pos_ = stream_.Position();
8531 value = ReadToken(); 8569 value = ReadToken();
8532 } while ((stream_type_ == kNoNewlines) && 8570 } while ((stream_type_ == kNoNewlines) &&
8533 (static_cast<Token::Kind>(value) == Token::kNEWLINE)); 8571 (static_cast<Token::Kind>(value) == Token::kNEWLINE));
8534 if (value < Token::kNumTokens) { 8572 if (value < Token::kNumTokens) {
8535 cur_token_kind_ = static_cast<Token::Kind>(value); 8573 cur_token_kind_ = static_cast<Token::Kind>(value);
8536 cur_token_obj_index_ = -1; 8574 cur_token_obj_index_ = -1;
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
8752 8790
8753 void Script::SetLocationOffset(intptr_t line_offset, 8791 void Script::SetLocationOffset(intptr_t line_offset,
8754 intptr_t col_offset) const { 8792 intptr_t col_offset) const {
8755 ASSERT(line_offset >= 0); 8793 ASSERT(line_offset >= 0);
8756 ASSERT(col_offset >= 0); 8794 ASSERT(col_offset >= 0);
8757 StoreNonPointer(&raw_ptr()->line_offset_, line_offset); 8795 StoreNonPointer(&raw_ptr()->line_offset_, line_offset);
8758 StoreNonPointer(&raw_ptr()->col_offset_, col_offset); 8796 StoreNonPointer(&raw_ptr()->col_offset_, col_offset);
8759 } 8797 }
8760 8798
8761 8799
8762 void Script::GetTokenLocation(intptr_t token_pos, 8800 void Script::GetTokenLocation(TokenDescriptor token_pos,
8763 intptr_t* line, 8801 intptr_t* line,
8764 intptr_t* column, 8802 intptr_t* column,
8765 intptr_t* token_len) const { 8803 intptr_t* token_len) const {
8766 ASSERT(line != NULL); 8804 ASSERT(line != NULL);
8767 const TokenStream& tkns = TokenStream::Handle(tokens()); 8805 const TokenStream& tkns = TokenStream::Handle(tokens());
8768 if (tkns.IsNull()) { 8806 if (tkns.IsNull()) {
8769 ASSERT(Dart::IsRunningPrecompiledCode()); 8807 ASSERT(Dart::IsRunningPrecompiledCode());
8770 *line = -1; 8808 *line = -1;
8771 if (column != NULL) { 8809 if (column != NULL) {
8772 *column = -1; 8810 *column = -1;
8773 } 8811 }
8774 if (token_len != NULL) { 8812 if (token_len != NULL) {
8775 *token_len = 1; 8813 *token_len = 1;
8776 } 8814 }
8777 return; 8815 return;
8778 } 8816 }
8779 if (column == NULL) { 8817 if (column == NULL) {
8780 TokenStream::Iterator tkit(tkns, 0, TokenStream::Iterator::kAllTokens); 8818 TokenStream::Iterator tkit(tkns, 0, TokenStream::Iterator::kAllTokens);
8781 intptr_t cur_line = line_offset() + 1; 8819 intptr_t cur_line = line_offset() + 1;
8782 while (tkit.CurrentPosition() < token_pos && 8820 while ((tkit.CurrentPosition() < token_pos.value()) &&
8783 tkit.CurrentTokenKind() != Token::kEOS) { 8821 (tkit.CurrentTokenKind() != Token::kEOS)) {
8784 if (tkit.CurrentTokenKind() == Token::kNEWLINE) { 8822 if (tkit.CurrentTokenKind() == Token::kNEWLINE) {
8785 cur_line++; 8823 cur_line++;
8786 } 8824 }
8787 tkit.Advance(); 8825 tkit.Advance();
8788 } 8826 }
8789 *line = cur_line; 8827 *line = cur_line;
8790 } else { 8828 } else {
8791 const String& src = String::Handle(Source()); 8829 const String& src = String::Handle(Source());
8792 intptr_t src_pos = tkns.ComputeSourcePosition(token_pos); 8830 TokenDescriptor src_pos = tkns.ComputeSourcePosition(token_pos);
8793 Scanner scanner(src, Symbols::Empty()); 8831 Scanner scanner(src, Symbols::Empty());
8794 scanner.ScanTo(src_pos); 8832 scanner.ScanTo(src_pos);
8795 intptr_t relative_line = scanner.CurrentPosition().line; 8833 intptr_t relative_line = scanner.CurrentPosition().line;
8796 *line = relative_line + line_offset(); 8834 *line = relative_line + line_offset();
8797 *column = scanner.CurrentPosition().column; 8835 *column = scanner.CurrentPosition().column;
8798 if (token_len != NULL) { 8836 if (token_len != NULL) {
8799 if (scanner.current_token().literal != NULL) { 8837 if (scanner.current_token().literal != NULL) {
8800 *token_len = scanner.current_token().literal->Length(); 8838 *token_len = scanner.current_token().literal->Length();
8801 } else { 8839 } else {
8802 *token_len = 1; 8840 *token_len = 1;
8803 } 8841 }
8804 } 8842 }
8805 // On the first line of the script we must add the column offset. 8843 // On the first line of the script we must add the column offset.
8806 if (relative_line == 1) { 8844 if (relative_line == 1) {
8807 *column += col_offset(); 8845 *column += col_offset();
8808 } 8846 }
8809 } 8847 }
8810 } 8848 }
8811 8849
8812 8850
8813 void Script::TokenRangeAtLine(intptr_t line_number, 8851 void Script::TokenRangeAtLine(intptr_t line_number,
8814 intptr_t* first_token_index, 8852 TokenDescriptor* first_token_index,
8815 intptr_t* last_token_index) const { 8853 TokenDescriptor* last_token_index) const {
8816 ASSERT(first_token_index != NULL && last_token_index != NULL); 8854 ASSERT(first_token_index != NULL && last_token_index != NULL);
8817 ASSERT(line_number > 0); 8855 ASSERT(line_number > 0);
8818 *first_token_index = -1; 8856 *first_token_index = TokenDescriptor::kNoSource;
8819 *last_token_index = -1; 8857 *last_token_index = TokenDescriptor::kNoSource;
8820 const TokenStream& tkns = TokenStream::Handle(tokens()); 8858 const TokenStream& tkns = TokenStream::Handle(tokens());
8821 line_number -= line_offset(); 8859 line_number -= line_offset();
8822 if (line_number < 1) line_number = 1; 8860 if (line_number < 1) line_number = 1;
8823 TokenStream::Iterator tkit(tkns, 0, TokenStream::Iterator::kAllTokens); 8861 TokenStream::Iterator tkit(tkns, 0, TokenStream::Iterator::kAllTokens);
8824 // Scan through the token stream to the required line. 8862 // Scan through the token stream to the required line.
8825 intptr_t cur_line = 1; 8863 intptr_t cur_line = 1;
8826 while (cur_line < line_number && tkit.CurrentTokenKind() != Token::kEOS) { 8864 while (cur_line < line_number && tkit.CurrentTokenKind() != Token::kEOS) {
8827 if (tkit.CurrentTokenKind() == Token::kNEWLINE) { 8865 if (tkit.CurrentTokenKind() == Token::kNEWLINE) {
8828 cur_line++; 8866 cur_line++;
8829 } 8867 }
8830 tkit.Advance(); 8868 tkit.Advance();
8831 } 8869 }
8832 if (tkit.CurrentTokenKind() == Token::kEOS) { 8870 if (tkit.CurrentTokenKind() == Token::kEOS) {
8833 // End of token stream before reaching required line. 8871 // End of token stream before reaching required line.
8834 return; 8872 return;
8835 } 8873 }
8836 if (tkit.CurrentTokenKind() == Token::kNEWLINE) { 8874 if (tkit.CurrentTokenKind() == Token::kNEWLINE) {
8837 // No tokens on the current line. If there is a valid token afterwards, put 8875 // No tokens on the current line. If there is a valid token afterwards, put
8838 // it into first_token_index. 8876 // it into first_token_index.
8839 while (tkit.CurrentTokenKind() == Token::kNEWLINE && 8877 while (tkit.CurrentTokenKind() == Token::kNEWLINE &&
8840 tkit.CurrentTokenKind() != Token::kEOS) { 8878 tkit.CurrentTokenKind() != Token::kEOS) {
8841 tkit.Advance(); 8879 tkit.Advance();
8842 } 8880 }
8843 if (tkit.CurrentTokenKind() != Token::kEOS) { 8881 if (tkit.CurrentTokenKind() != Token::kEOS) {
8844 *first_token_index = tkit.CurrentPosition(); 8882 *first_token_index = TokenDescriptor(tkit.CurrentPosition());
8845 } 8883 }
8846 return; 8884 return;
8847 } 8885 }
8848 *first_token_index = tkit.CurrentPosition(); 8886 *first_token_index = TokenDescriptor(tkit.CurrentPosition());
8849 // We cannot do "CurrentPosition() - 1" for the last token, because we do not 8887 // We cannot do "CurrentPosition() - 1" for the last token, because we do not
8850 // know whether the previous token is a simple one or not. 8888 // know whether the previous token is a simple one or not.
8851 intptr_t end_pos = *first_token_index; 8889 TokenDescriptor end_pos = *first_token_index;
8852 while (tkit.CurrentTokenKind() != Token::kNEWLINE && 8890 while (tkit.CurrentTokenKind() != Token::kNEWLINE &&
8853 tkit.CurrentTokenKind() != Token::kEOS) { 8891 tkit.CurrentTokenKind() != Token::kEOS) {
8854 end_pos = tkit.CurrentPosition(); 8892 end_pos = TokenDescriptor(tkit.CurrentPosition());
8855 tkit.Advance(); 8893 tkit.Advance();
8856 } 8894 }
8857 *last_token_index = end_pos; 8895 *last_token_index = end_pos;
8858 } 8896 }
8859 8897
8860 8898
8861 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const { 8899 RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const {
8862 const String& src = String::Handle(Source()); 8900 const String& src = String::Handle(Source());
8863 intptr_t relative_line_number = line_number - line_offset(); 8901 intptr_t relative_line_number = line_number - line_offset();
8864 intptr_t current_line = 1; 8902 intptr_t current_line = 1;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
9144 next_ix_++; 9182 next_ix_++;
9145 obj = array_.At(next_ix_); 9183 obj = array_.At(next_ix_);
9146 } 9184 }
9147 } 9185 }
9148 9186
9149 9187
9150 static void ReportTooManyImports(const Library& lib) { 9188 static void ReportTooManyImports(const Library& lib) {
9151 const String& url = String::Handle(lib.url()); 9189 const String& url = String::Handle(lib.url());
9152 Report::MessageF(Report::kError, 9190 Report::MessageF(Report::kError,
9153 Script::Handle(lib.LookupScript(url)), 9191 Script::Handle(lib.LookupScript(url)),
9154 Token::kNoSourcePos, 9192 TokenDescriptor::kNoSource,
9155 Report::AtLocation, 9193 Report::AtLocation,
9156 "too many imports in library '%s'", 9194 "too many imports in library '%s'",
9157 url.ToCString()); 9195 url.ToCString());
9158 UNREACHABLE(); 9196 UNREACHABLE();
9159 } 9197 }
9160 9198
9161 9199
9162 void Library::set_num_imports(intptr_t value) const { 9200 void Library::set_num_imports(intptr_t value) const {
9163 if (!Utils::IsUint(16, value)) { 9201 if (!Utils::IsUint(16, value)) {
9164 ReportTooManyImports(*this); 9202 ReportTooManyImports(*this);
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
9331 GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3); 9369 GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3);
9332 pieces.Add(cname); 9370 pieces.Add(cname);
9333 pieces.Add(Symbols::At()); 9371 pieces.Add(Symbols::At());
9334 pieces.Add(String::Handle(param.name())); 9372 pieces.Add(String::Handle(param.name()));
9335 return Symbols::FromConcatAll(pieces); 9373 return Symbols::FromConcatAll(pieces);
9336 } 9374 }
9337 9375
9338 9376
9339 void Library::AddMetadata(const Object& owner, 9377 void Library::AddMetadata(const Object& owner,
9340 const String& name, 9378 const String& name,
9341 intptr_t token_pos) const { 9379 TokenDescriptor token_pos) const {
9342 const String& metaname = String::Handle(Symbols::New(name)); 9380 const String& metaname = String::Handle(Symbols::New(name));
9343 const Field& field = Field::Handle( 9381 const Field& field = Field::Handle(
9344 Field::NewTopLevel(metaname, 9382 Field::NewTopLevel(metaname,
9345 false, // is_final 9383 false, // is_final
9346 false, // is_const 9384 false, // is_const
9347 owner, 9385 owner,
9348 token_pos)); 9386 token_pos));
9349 field.SetFieldType(Object::dynamic_type()); 9387 field.SetFieldType(Object::dynamic_type());
9350 field.set_is_reflectable(false); 9388 field.set_is_reflectable(false);
9351 field.SetStaticValue(Array::empty_array(), true); 9389 field.SetStaticValue(Array::empty_array(), true);
9352 GrowableObjectArray& metadata = 9390 GrowableObjectArray& metadata =
9353 GrowableObjectArray::Handle(this->metadata()); 9391 GrowableObjectArray::Handle(this->metadata());
9354 metadata.Add(field, Heap::kOld); 9392 metadata.Add(field, Heap::kOld);
9355 } 9393 }
9356 9394
9357 9395
9358 void Library::AddClassMetadata(const Class& cls, 9396 void Library::AddClassMetadata(const Class& cls,
9359 const Object& tl_owner, 9397 const Object& tl_owner,
9360 intptr_t token_pos) const { 9398 TokenDescriptor token_pos) const {
9361 // We use the toplevel class as the owner of a class's metadata field because 9399 // We use the toplevel class as the owner of a class's metadata field because
9362 // a class's metadata is in scope of the library, not the class. 9400 // a class's metadata is in scope of the library, not the class.
9363 AddMetadata(tl_owner, 9401 AddMetadata(tl_owner,
9364 String::Handle(MakeClassMetaName(cls)), 9402 String::Handle(MakeClassMetaName(cls)),
9365 token_pos); 9403 token_pos);
9366 } 9404 }
9367 9405
9368 9406
9369 void Library::AddFieldMetadata(const Field& field, 9407 void Library::AddFieldMetadata(const Field& field,
9370 intptr_t token_pos) const { 9408 TokenDescriptor token_pos) const {
9371 AddMetadata(Object::Handle(field.RawOwner()), 9409 AddMetadata(Object::Handle(field.RawOwner()),
9372 String::Handle(MakeFieldMetaName(field)), 9410 String::Handle(MakeFieldMetaName(field)),
9373 token_pos); 9411 token_pos);
9374 } 9412 }
9375 9413
9376 9414
9377 void Library::AddFunctionMetadata(const Function& func, 9415 void Library::AddFunctionMetadata(const Function& func,
9378 intptr_t token_pos) const { 9416 TokenDescriptor token_pos) const {
9379 AddMetadata(Object::Handle(func.RawOwner()), 9417 AddMetadata(Object::Handle(func.RawOwner()),
9380 String::Handle(MakeFunctionMetaName(func)), 9418 String::Handle(MakeFunctionMetaName(func)),
9381 token_pos); 9419 token_pos);
9382 } 9420 }
9383 9421
9384 9422
9385 void Library::AddTypeParameterMetadata(const TypeParameter& param, 9423 void Library::AddTypeParameterMetadata(const TypeParameter& param,
9386 intptr_t token_pos) const { 9424 TokenDescriptor token_pos) const {
9387 AddMetadata(Class::Handle(param.parameterized_class()), 9425 AddMetadata(Class::Handle(param.parameterized_class()),
9388 String::Handle(MakeTypeParameterMetaName(param)), 9426 String::Handle(MakeTypeParameterMetaName(param)),
9389 token_pos); 9427 token_pos);
9390 } 9428 }
9391 9429
9392 9430
9393 void Library::AddLibraryMetadata(const Object& tl_owner, 9431 void Library::AddLibraryMetadata(const Object& tl_owner,
9394 intptr_t token_pos) const { 9432 TokenDescriptor token_pos) const {
9395 AddMetadata(tl_owner, Symbols::TopLevel(), token_pos); 9433 AddMetadata(tl_owner, Symbols::TopLevel(), token_pos);
9396 } 9434 }
9397 9435
9398 9436
9399 RawString* Library::MakeMetadataName(const Object& obj) const { 9437 RawString* Library::MakeMetadataName(const Object& obj) const {
9400 if (obj.IsClass()) { 9438 if (obj.IsClass()) {
9401 return MakeClassMetaName(Class::Cast(obj)); 9439 return MakeClassMetaName(Class::Cast(obj));
9402 } else if (obj.IsField()) { 9440 } else if (obj.IsField()) {
9403 return MakeFieldMetaName(Field::Cast(obj)); 9441 return MakeFieldMetaName(Field::Cast(obj));
9404 } else if (obj.IsFunction()) { 9442 } else if (obj.IsFunction()) {
(...skipping 1428 matching lines...) Expand 10 before | Expand all | Expand 10 after
10833 void LibraryPrefix::PrintJSONImpl(JSONStream* stream, bool ref) const { 10871 void LibraryPrefix::PrintJSONImpl(JSONStream* stream, bool ref) const {
10834 Object::PrintJSONImpl(stream, ref); 10872 Object::PrintJSONImpl(stream, ref);
10835 } 10873 }
10836 10874
10837 10875
10838 void Namespace::set_metadata_field(const Field& value) const { 10876 void Namespace::set_metadata_field(const Field& value) const {
10839 StorePointer(&raw_ptr()->metadata_field_, value.raw()); 10877 StorePointer(&raw_ptr()->metadata_field_, value.raw());
10840 } 10878 }
10841 10879
10842 10880
10843 void Namespace::AddMetadata(const Object& owner, intptr_t token_pos) { 10881 void Namespace::AddMetadata(const Object& owner, TokenDescriptor token_pos) {
10844 ASSERT(Field::Handle(metadata_field()).IsNull()); 10882 ASSERT(Field::Handle(metadata_field()).IsNull());
10845 Field& field = Field::Handle(Field::NewTopLevel(Symbols::TopLevel(), 10883 Field& field = Field::Handle(Field::NewTopLevel(Symbols::TopLevel(),
10846 false, // is_final 10884 false, // is_final
10847 false, // is_const 10885 false, // is_const
10848 owner, 10886 owner,
10849 token_pos)); 10887 token_pos));
10850 field.set_is_reflectable(false); 10888 field.set_is_reflectable(false);
10851 field.SetFieldType(Object::dynamic_type()); 10889 field.SetFieldType(Object::dynamic_type());
10852 field.SetStaticValue(Array::empty_array(), true); 10890 field.SetStaticValue(Array::empty_array(), true);
10853 set_metadata_field(field); 10891 set_metadata_field(field);
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after
11417 const int addr_width = kBitsPerWord / 4; 11455 const int addr_width = kBitsPerWord / 4;
11418 // First compute the buffer size required. 11456 // First compute the buffer size required.
11419 intptr_t len = 1; // Trailing '\0'. 11457 intptr_t len = 1; // Trailing '\0'.
11420 { 11458 {
11421 Iterator iter(*this, RawPcDescriptors::kAnyKind); 11459 Iterator iter(*this, RawPcDescriptors::kAnyKind);
11422 while (iter.MoveNext()) { 11460 while (iter.MoveNext()) {
11423 len += OS::SNPrint(NULL, 0, FORMAT, addr_width, 11461 len += OS::SNPrint(NULL, 0, FORMAT, addr_width,
11424 iter.PcOffset(), 11462 iter.PcOffset(),
11425 KindAsStr(iter.Kind()), 11463 KindAsStr(iter.Kind()),
11426 iter.DeoptId(), 11464 iter.DeoptId(),
11427 iter.TokenPos(), 11465 iter.TokenPos().value(),
11428 iter.TryIndex()); 11466 iter.TryIndex());
11429 } 11467 }
11430 } 11468 }
11431 // Allocate the buffer. 11469 // Allocate the buffer.
11432 char* buffer = Thread::Current()->zone()->Alloc<char>(len); 11470 char* buffer = Thread::Current()->zone()->Alloc<char>(len);
11433 // Layout the fields in the buffer. 11471 // Layout the fields in the buffer.
11434 intptr_t index = 0; 11472 intptr_t index = 0;
11435 Iterator iter(*this, RawPcDescriptors::kAnyKind); 11473 Iterator iter(*this, RawPcDescriptors::kAnyKind);
11436 while (iter.MoveNext()) { 11474 while (iter.MoveNext()) {
11437 index += OS::SNPrint((buffer + index), (len - index), FORMAT, addr_width, 11475 index += OS::SNPrint((buffer + index), (len - index), FORMAT, addr_width,
11438 iter.PcOffset(), 11476 iter.PcOffset(),
11439 KindAsStr(iter.Kind()), 11477 KindAsStr(iter.Kind()),
11440 iter.DeoptId(), 11478 iter.DeoptId(),
11441 iter.TokenPos(), 11479 iter.TokenPos().value(),
11442 iter.TryIndex()); 11480 iter.TryIndex());
11443 } 11481 }
11444 return buffer; 11482 return buffer;
11445 #undef FORMAT 11483 #undef FORMAT
11446 } 11484 }
11447 11485
11448 11486
11449 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const { 11487 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const {
11450 AddCommonObjectProperties(jsobj, "Object", ref); 11488 AddCommonObjectProperties(jsobj, "Object", ref);
11451 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code 11489 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code
11452 // object but do not have a back reference to generate an ID. 11490 // object but do not have a back reference to generate an ID.
11453 jsobj->AddServiceId(*this); 11491 jsobj->AddServiceId(*this);
11454 if (ref) { 11492 if (ref) {
11455 return; 11493 return;
11456 } 11494 }
11457 JSONArray members(jsobj, "members"); 11495 JSONArray members(jsobj, "members");
11458 Iterator iter(*this, RawPcDescriptors::kAnyKind); 11496 Iterator iter(*this, RawPcDescriptors::kAnyKind);
11459 while (iter.MoveNext()) { 11497 while (iter.MoveNext()) {
11460 JSONObject descriptor(&members); 11498 JSONObject descriptor(&members);
11461 descriptor.AddPropertyF("pcOffset", "%" Px "", iter.PcOffset()); 11499 descriptor.AddPropertyF("pcOffset", "%" Px "", iter.PcOffset());
11462 descriptor.AddProperty("kind", KindAsStr(iter.Kind())); 11500 descriptor.AddProperty("kind", KindAsStr(iter.Kind()));
11463 descriptor.AddProperty("deoptId", iter.DeoptId()); 11501 descriptor.AddProperty("deoptId", iter.DeoptId());
11464 // TODO(turnidge): Use AddLocation instead. 11502 // TODO(turnidge): Use AddLocation instead.
11465 descriptor.AddProperty("tokenPos", iter.TokenPos()); 11503 descriptor.AddProperty("tokenPos", iter.TokenPos().value());
11466 descriptor.AddProperty("tryIndex", iter.TryIndex()); 11504 descriptor.AddProperty("tryIndex", iter.TryIndex());
11467 } 11505 }
11468 } 11506 }
11469 11507
11470 11508
11471 void PcDescriptors::PrintJSONImpl(JSONStream* stream, bool ref) const { 11509 void PcDescriptors::PrintJSONImpl(JSONStream* stream, bool ref) const {
11472 JSONObject jsobj(stream); 11510 JSONObject jsobj(stream);
11473 PrintToJSONObject(&jsobj, ref); 11511 PrintToJSONObject(&jsobj, ref);
11474 } 11512 }
11475 11513
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
11586 } 11624 }
11587 // 4 bits per hex digit. 11625 // 4 bits per hex digit.
11588 const int addr_width = kBitsPerWord / 4; 11626 const int addr_width = kBitsPerWord / 4;
11589 // First compute the buffer size required. 11627 // First compute the buffer size required.
11590 intptr_t len = 1; // Trailing '\0'. 11628 intptr_t len = 1; // Trailing '\0'.
11591 { 11629 {
11592 Iterator iter(*this); 11630 Iterator iter(*this);
11593 while (iter.MoveNext()) { 11631 while (iter.MoveNext()) {
11594 len += OS::SNPrint(NULL, 0, FORMAT, addr_width, 11632 len += OS::SNPrint(NULL, 0, FORMAT, addr_width,
11595 iter.PcOffset(), 11633 iter.PcOffset(),
11596 iter.TokenPos()); 11634 iter.TokenPos().value());
11597 } 11635 }
11598 } 11636 }
11599 // Allocate the buffer. 11637 // Allocate the buffer.
11600 char* buffer = Thread::Current()->zone()->Alloc<char>(len); 11638 char* buffer = Thread::Current()->zone()->Alloc<char>(len);
11601 // Layout the fields in the buffer. 11639 // Layout the fields in the buffer.
11602 intptr_t index = 0; 11640 intptr_t index = 0;
11603 Iterator iter(*this); 11641 Iterator iter(*this);
11604 while (iter.MoveNext()) { 11642 while (iter.MoveNext()) {
11605 index += OS::SNPrint((buffer + index), (len - index), FORMAT, addr_width, 11643 index += OS::SNPrint((buffer + index), (len - index), FORMAT, addr_width,
11606 iter.PcOffset(), 11644 iter.PcOffset(),
11607 iter.TokenPos()); 11645 iter.TokenPos().value());
11608 } 11646 }
11609 return buffer; 11647 return buffer;
11610 #undef FORMAT 11648 #undef FORMAT
11611 } 11649 }
11612 11650
11613 11651
11614 // Encode integer in SLEB128 format. 11652 // Encode integer in SLEB128 format.
11615 void CodeSourceMap::EncodeInteger(GrowableArray<uint8_t>* data, 11653 void CodeSourceMap::EncodeInteger(GrowableArray<uint8_t>* data,
11616 intptr_t value) { 11654 intptr_t value) {
11617 return EncodeSLEB128(data, value); 11655 return EncodeSLEB128(data, value);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
11787 const RawLocalVarDescriptors::VarInfoKind kind = info.kind(); 11825 const RawLocalVarDescriptors::VarInfoKind kind = info.kind();
11788 const int32_t index = info.index(); 11826 const int32_t index = info.index();
11789 if (kind == RawLocalVarDescriptors::kContextLevel) { 11827 if (kind == RawLocalVarDescriptors::kContextLevel) {
11790 return OS::SNPrint(buffer, len, 11828 return OS::SNPrint(buffer, len,
11791 "%2" Pd " %-13s level=%-3d scope=%-3d" 11829 "%2" Pd " %-13s level=%-3d scope=%-3d"
11792 " begin=%-3d end=%d\n", 11830 " begin=%-3d end=%d\n",
11793 i, 11831 i,
11794 LocalVarDescriptors::KindToCString(kind), 11832 LocalVarDescriptors::KindToCString(kind),
11795 index, 11833 index,
11796 info.scope_id, 11834 info.scope_id,
11797 info.begin_pos, 11835 static_cast<int>(info.begin_pos.value()),
11798 info.end_pos); 11836 static_cast<int>(info.end_pos.value()));
11799 } else if (kind == RawLocalVarDescriptors::kContextVar) { 11837 } else if (kind == RawLocalVarDescriptors::kContextVar) {
11800 return OS::SNPrint(buffer, len, 11838 return OS::SNPrint(buffer, len,
11801 "%2" Pd " %-13s level=%-3d index=%-3d" 11839 "%2" Pd " %-13s level=%-3d index=%-3d"
11802 " begin=%-3d end=%-3d name=%s\n", 11840 " begin=%-3d end=%-3d name=%s\n",
11803 i, 11841 i,
11804 LocalVarDescriptors::KindToCString(kind), 11842 LocalVarDescriptors::KindToCString(kind),
11805 info.scope_id, 11843 info.scope_id,
11806 index, 11844 index,
11807 info.begin_pos, 11845 static_cast<int>(info.begin_pos.value()),
11808 info.end_pos, 11846 static_cast<int>(info.end_pos.value()),
11809 var_name.ToCString()); 11847 var_name.ToCString());
11810 } else { 11848 } else {
11811 return OS::SNPrint(buffer, len, 11849 return OS::SNPrint(buffer, len,
11812 "%2" Pd " %-13s scope=%-3d index=%-3d" 11850 "%2" Pd " %-13s scope=%-3d index=%-3d"
11813 " begin=%-3d end=%-3d name=%s\n", 11851 " begin=%-3d end=%-3d name=%s\n",
11814 i, 11852 i,
11815 LocalVarDescriptors::KindToCString(kind), 11853 LocalVarDescriptors::KindToCString(kind),
11816 info.scope_id, 11854 info.scope_id,
11817 index, 11855 index,
11818 info.begin_pos, 11856 static_cast<int>(info.begin_pos.value()),
11819 info.end_pos, 11857 static_cast<int>(info.end_pos.value()),
11820 var_name.ToCString()); 11858 var_name.ToCString());
11821 } 11859 }
11822 } 11860 }
11823 11861
11824 11862
11825 const char* LocalVarDescriptors::ToCString() const { 11863 const char* LocalVarDescriptors::ToCString() const {
11826 if (IsNull()) { 11864 if (IsNull()) {
11827 return "LocalVarDescriptors(NULL)"; 11865 return "LocalVarDescriptors(NULL)";
11828 } 11866 }
11829 if (Length() == 0) { 11867 if (Length() == 0) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
11864 } 11902 }
11865 JSONArray members(&jsobj, "members"); 11903 JSONArray members(&jsobj, "members");
11866 String& var_name = String::Handle(); 11904 String& var_name = String::Handle();
11867 for (intptr_t i = 0; i < Length(); i++) { 11905 for (intptr_t i = 0; i < Length(); i++) {
11868 RawLocalVarDescriptors::VarInfo info; 11906 RawLocalVarDescriptors::VarInfo info;
11869 var_name = GetName(i); 11907 var_name = GetName(i);
11870 GetInfo(i, &info); 11908 GetInfo(i, &info);
11871 JSONObject var(&members); 11909 JSONObject var(&members);
11872 var.AddProperty("name", var_name.ToCString()); 11910 var.AddProperty("name", var_name.ToCString());
11873 var.AddProperty("index", static_cast<intptr_t>(info.index())); 11911 var.AddProperty("index", static_cast<intptr_t>(info.index()));
11874 var.AddProperty("beginPos", static_cast<intptr_t>(info.begin_pos)); 11912 var.AddProperty("beginPos", info.begin_pos.value());
11875 var.AddProperty("endPos", static_cast<intptr_t>(info.end_pos)); 11913 var.AddProperty("endPos", info.end_pos.value());
11876 var.AddProperty("scopeId", static_cast<intptr_t>(info.scope_id)); 11914 var.AddProperty("scopeId", static_cast<intptr_t>(info.scope_id));
11877 var.AddProperty("kind", KindToCString(info.kind())); 11915 var.AddProperty("kind", KindToCString(info.kind()));
11878 } 11916 }
11879 } 11917 }
11880 11918
11881 11919
11882 const char* LocalVarDescriptors::KindToCString( 11920 const char* LocalVarDescriptors::KindToCString(
11883 RawLocalVarDescriptors::VarInfoKind kind) { 11921 RawLocalVarDescriptors::VarInfoKind kind) {
11884 switch (kind) { 11922 switch (kind) {
11885 case RawLocalVarDescriptors::kStackVar: 11923 case RawLocalVarDescriptors::kStackVar:
(...skipping 1056 matching lines...) Expand 10 before | Expand all | Expand 10 after
12942 if (ref) { 12980 if (ref) {
12943 return; 12981 return;
12944 } 12982 }
12945 jsobj.AddProperty("_argumentsDescriptor", 12983 jsobj.AddProperty("_argumentsDescriptor",
12946 Object::Handle(arguments_descriptor())); 12984 Object::Handle(arguments_descriptor()));
12947 jsobj.AddProperty("_entries", Object::Handle(ic_data())); 12985 jsobj.AddProperty("_entries", Object::Handle(ic_data()));
12948 } 12986 }
12949 12987
12950 12988
12951 void ICData::PrintToJSONArray(const JSONArray& jsarray, 12989 void ICData::PrintToJSONArray(const JSONArray& jsarray,
12952 intptr_t token_pos, 12990 TokenDescriptor token_pos,
12953 bool is_static_call) const { 12991 bool is_static_call) const {
12954 Isolate* isolate = Isolate::Current(); 12992 Isolate* isolate = Isolate::Current();
12955 Class& cls = Class::Handle(); 12993 Class& cls = Class::Handle();
12956 Function& func = Function::Handle(); 12994 Function& func = Function::Handle();
12957 12995
12958 JSONObject jsobj(&jsarray); 12996 JSONObject jsobj(&jsarray);
12959 jsobj.AddProperty("name", String::Handle(target_name()).ToCString()); 12997 jsobj.AddProperty("name", String::Handle(target_name()).ToCString());
12960 jsobj.AddProperty("tokenPos", token_pos); 12998 jsobj.AddProperty("tokenPos", token_pos.value());
12961 // TODO(rmacnak): Figure out how to stringify DeoptReasons(). 12999 // TODO(rmacnak): Figure out how to stringify DeoptReasons().
12962 // jsobj.AddProperty("deoptReasons", ...); 13000 // jsobj.AddProperty("deoptReasons", ...);
12963 13001
12964 JSONArray cache_entries(&jsobj, "cacheEntries"); 13002 JSONArray cache_entries(&jsobj, "cacheEntries");
12965 for (intptr_t i = 0; i < NumberOfChecks(); i++) { 13003 for (intptr_t i = 0; i < NumberOfChecks(); i++) {
12966 func = GetTargetAt(i); 13004 func = GetTargetAt(i);
12967 if (is_static_call) { 13005 if (is_static_call) {
12968 cls ^= func.Owner(); 13006 cls ^= func.Owner();
12969 } else { 13007 } else {
12970 intptr_t cid = GetReceiverClassIdAt(i); 13008 intptr_t cid = GetReceiverClassIdAt(i);
12971 cls ^= isolate->class_table()->At(cid); 13009 cls ^= isolate->class_table()->At(cid);
12972 } 13010 }
12973 intptr_t count = GetCountAt(i); 13011 intptr_t count = GetCountAt(i);
12974 JSONObject cache_entry(&cache_entries); 13012 JSONObject cache_entry(&cache_entries);
12975 if (cls.IsTopLevel()) { 13013 if (cls.IsTopLevel()) {
12976 cache_entry.AddProperty("receiverContainer", 13014 cache_entry.AddProperty("receiverContainer",
12977 Library::Handle(cls.library())); 13015 Library::Handle(cls.library()));
12978 } else { 13016 } else {
12979 cache_entry.AddProperty("receiverContainer", cls); 13017 cache_entry.AddProperty("receiverContainer", cls);
12980 } 13018 }
12981 cache_entry.AddProperty("count", count); 13019 cache_entry.AddProperty("count", count);
12982 cache_entry.AddProperty("target", func); 13020 cache_entry.AddProperty("target", func);
12983 } 13021 }
12984 } 13022 }
12985 13023
12986 13024
12987 void ICData::PrintToJSONArrayNew(const JSONArray& jsarray, 13025 void ICData::PrintToJSONArrayNew(const JSONArray& jsarray,
12988 intptr_t token_pos, 13026 TokenDescriptor token_pos,
12989 bool is_static_call) const { 13027 bool is_static_call) const {
12990 Isolate* isolate = Isolate::Current(); 13028 Isolate* isolate = Isolate::Current();
12991 Class& cls = Class::Handle(); 13029 Class& cls = Class::Handle();
12992 Function& func = Function::Handle(); 13030 Function& func = Function::Handle();
12993 13031
12994 JSONObject jsobj(&jsarray); 13032 JSONObject jsobj(&jsarray);
12995 jsobj.AddProperty("name", String::Handle(target_name()).ToCString()); 13033 jsobj.AddProperty("name", String::Handle(target_name()).ToCString());
12996 jsobj.AddProperty("tokenPos", token_pos); 13034 jsobj.AddProperty("tokenPos", token_pos.value());
12997 // TODO(rmacnak): Figure out how to stringify DeoptReasons(). 13035 // TODO(rmacnak): Figure out how to stringify DeoptReasons().
12998 // jsobj.AddProperty("deoptReasons", ...); 13036 // jsobj.AddProperty("deoptReasons", ...);
12999 13037
13000 JSONArray cache_entries(&jsobj, "cacheEntries"); 13038 JSONArray cache_entries(&jsobj, "cacheEntries");
13001 for (intptr_t i = 0; i < NumberOfChecks(); i++) { 13039 for (intptr_t i = 0; i < NumberOfChecks(); i++) {
13002 JSONObject cache_entry(&cache_entries); 13040 JSONObject cache_entry(&cache_entries);
13003 func = GetTargetAt(i); 13041 func = GetTargetAt(i);
13004 intptr_t count = GetCountAt(i); 13042 intptr_t count = GetCountAt(i);
13005 if (!is_static_call) { 13043 if (!is_static_call) {
13006 intptr_t cid = GetReceiverClassIdAt(i); 13044 intptr_t cid = GetReceiverClassIdAt(i);
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
13606 code ^= Code::LookupCodeInVmIsolate(pc); 13644 code ^= Code::LookupCodeInVmIsolate(pc);
13607 if (!code.IsNull() && (code.compile_timestamp() == timestamp) && 13645 if (!code.IsNull() && (code.compile_timestamp() == timestamp) &&
13608 (code.EntryPoint() == pc)) { 13646 (code.EntryPoint() == pc)) {
13609 // Found code in VM isolate. 13647 // Found code in VM isolate.
13610 return code.raw(); 13648 return code.raw();
13611 } 13649 }
13612 return Code::null(); 13650 return Code::null();
13613 } 13651 }
13614 13652
13615 13653
13616 intptr_t Code::GetTokenIndexOfPC(uword pc) const { 13654 TokenDescriptor Code::GetTokenIndexOfPC(uword pc) const {
13617 uword pc_offset = pc - EntryPoint(); 13655 uword pc_offset = pc - EntryPoint();
13618 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 13656 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
13619 PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kAnyKind); 13657 PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kAnyKind);
13620 while (iter.MoveNext()) { 13658 while (iter.MoveNext()) {
13621 if (iter.PcOffset() == pc_offset) { 13659 if (iter.PcOffset() == pc_offset) {
13622 return iter.TokenPos(); 13660 return iter.TokenPos();
13623 } 13661 }
13624 } 13662 }
13625 return -1; 13663 return TokenDescriptor::kNoSource;
13626 } 13664 }
13627 13665
13628 13666
13629 uword Code::GetPcForDeoptId(intptr_t deopt_id, 13667 uword Code::GetPcForDeoptId(intptr_t deopt_id,
13630 RawPcDescriptors::Kind kind) const { 13668 RawPcDescriptors::Kind kind) const {
13631 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors()); 13669 const PcDescriptors& descriptors = PcDescriptors::Handle(pc_descriptors());
13632 PcDescriptors::Iterator iter(descriptors, kind); 13670 PcDescriptors::Iterator iter(descriptors, kind);
13633 while (iter.MoveNext()) { 13671 while (iter.MoveNext()) {
13634 if (iter.DeoptId() == deopt_id) { 13672 if (iter.DeoptId() == deopt_id) {
13635 uword pc_offset = iter.PcOffset(); 13673 uword pc_offset = iter.PcOffset();
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
14113 Heap::kOld); 14151 Heap::kOld);
14114 NoSafepointScope no_safepoint; 14152 NoSafepointScope no_safepoint;
14115 result ^= raw; 14153 result ^= raw;
14116 result.set_num_variables(num_variables); 14154 result.set_num_variables(num_variables);
14117 result.set_is_implicit(is_implicit); 14155 result.set_is_implicit(is_implicit);
14118 } 14156 }
14119 return result.raw(); 14157 return result.raw();
14120 } 14158 }
14121 14159
14122 14160
14123 intptr_t ContextScope::TokenIndexAt(intptr_t scope_index) const { 14161 TokenDescriptor ContextScope::TokenIndexAt(intptr_t scope_index) const {
14124 return Smi::Value(VariableDescAddr(scope_index)->token_pos); 14162 return TokenDescriptor(Smi::Value(VariableDescAddr(scope_index)->token_pos));
14125 } 14163 }
14126 14164
14127 14165
14128 void ContextScope::SetTokenIndexAt(intptr_t scope_index, 14166 void ContextScope::SetTokenIndexAt(intptr_t scope_index,
14129 intptr_t token_pos) const { 14167 TokenDescriptor token_pos) const {
14130 StoreSmi(&VariableDescAddr(scope_index)->token_pos, 14168 StoreSmi(&VariableDescAddr(scope_index)->token_pos,
14131 Smi::New(token_pos)); 14169 Smi::New(token_pos.value()));
14132 } 14170 }
14133 14171
14134 14172
14135 RawString* ContextScope::NameAt(intptr_t scope_index) const { 14173 RawString* ContextScope::NameAt(intptr_t scope_index) const {
14136 return VariableDescAddr(scope_index)->name; 14174 return VariableDescAddr(scope_index)->name;
14137 } 14175 }
14138 14176
14139 14177
14140 void ContextScope::SetNameAt(intptr_t scope_index, const String& name) const { 14178 void ContextScope::SetNameAt(intptr_t scope_index, const String& name) const {
14141 StorePointer(&(VariableDescAddr(scope_index)->name), name.raw()); 14179 StorePointer(&(VariableDescAddr(scope_index)->name), name.raw());
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
14212 Smi::New(context_level)); 14250 Smi::New(context_level));
14213 } 14251 }
14214 14252
14215 14253
14216 const char* ContextScope::ToCString() const { 14254 const char* ContextScope::ToCString() const {
14217 const char* prev_cstr = "ContextScope:"; 14255 const char* prev_cstr = "ContextScope:";
14218 String& name = String::Handle(); 14256 String& name = String::Handle();
14219 for (int i = 0; i < num_variables(); i++) { 14257 for (int i = 0; i < num_variables(); i++) {
14220 name = NameAt(i); 14258 name = NameAt(i);
14221 const char* cname = name.ToCString(); 14259 const char* cname = name.ToCString();
14222 intptr_t pos = TokenIndexAt(i); 14260 TokenDescriptor pos = TokenIndexAt(i);
14223 intptr_t idx = ContextIndexAt(i); 14261 intptr_t idx = ContextIndexAt(i);
14224 intptr_t lvl = ContextLevelAt(i); 14262 intptr_t lvl = ContextLevelAt(i);
14225 char* chars = OS::SCreate(Thread::Current()->zone(), 14263 char* chars = OS::SCreate(Thread::Current()->zone(),
14226 "%s\nvar %s token-pos %" Pd " ctx lvl %" Pd " index %" Pd "", 14264 "%s\nvar %s token-pos %" Pd " ctx lvl %" Pd " index %" Pd "",
14227 prev_cstr, cname, pos, lvl, idx); 14265 prev_cstr, cname, pos.value(), lvl, idx);
14228 prev_cstr = chars; 14266 prev_cstr = chars;
14229 } 14267 }
14230 return prev_cstr; 14268 return prev_cstr;
14231 } 14269 }
14232 14270
14233 14271
14234 void ContextScope::PrintJSONImpl(JSONStream* stream, bool ref) const { 14272 void ContextScope::PrintJSONImpl(JSONStream* stream, bool ref) const {
14235 Object::PrintJSONImpl(stream, ref); 14273 Object::PrintJSONImpl(stream, ref);
14236 } 14274 }
14237 14275
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
14538 ASSERT(Object::language_error_class() != Class::null()); 14576 ASSERT(Object::language_error_class() != Class::null());
14539 RawObject* raw = Object::Allocate(LanguageError::kClassId, 14577 RawObject* raw = Object::Allocate(LanguageError::kClassId,
14540 LanguageError::InstanceSize(), 14578 LanguageError::InstanceSize(),
14541 Heap::kOld); 14579 Heap::kOld);
14542 return reinterpret_cast<RawLanguageError*>(raw); 14580 return reinterpret_cast<RawLanguageError*>(raw);
14543 } 14581 }
14544 14582
14545 14583
14546 RawLanguageError* LanguageError::NewFormattedV(const Error& prev_error, 14584 RawLanguageError* LanguageError::NewFormattedV(const Error& prev_error,
14547 const Script& script, 14585 const Script& script,
14548 intptr_t token_pos, 14586 TokenDescriptor token_pos,
14549 bool report_after_token, 14587 bool report_after_token,
14550 Report::Kind kind, 14588 Report::Kind kind,
14551 Heap::Space space, 14589 Heap::Space space,
14552 const char* format, 14590 const char* format,
14553 va_list args) { 14591 va_list args) {
14554 ASSERT(Object::language_error_class() != Class::null()); 14592 ASSERT(Object::language_error_class() != Class::null());
14555 LanguageError& result = LanguageError::Handle(); 14593 LanguageError& result = LanguageError::Handle();
14556 { 14594 {
14557 RawObject* raw = Object::Allocate(LanguageError::kClassId, 14595 RawObject* raw = Object::Allocate(LanguageError::kClassId,
14558 LanguageError::InstanceSize(), 14596 LanguageError::InstanceSize(),
14559 space); 14597 space);
14560 NoSafepointScope no_safepoint; 14598 NoSafepointScope no_safepoint;
14561 result ^= raw; 14599 result ^= raw;
14562 } 14600 }
14563 result.set_previous_error(prev_error); 14601 result.set_previous_error(prev_error);
14564 result.set_script(script); 14602 result.set_script(script);
14565 result.set_token_pos(token_pos); 14603 result.set_token_pos(token_pos);
14566 result.set_report_after_token(report_after_token); 14604 result.set_report_after_token(report_after_token);
14567 result.set_kind(kind); 14605 result.set_kind(kind);
14568 result.set_message(String::Handle( 14606 result.set_message(String::Handle(
14569 String::NewFormattedV(format, args, space))); 14607 String::NewFormattedV(format, args, space)));
14570 return result.raw(); 14608 return result.raw();
14571 } 14609 }
14572 14610
14573 14611
14574 RawLanguageError* LanguageError::NewFormatted(const Error& prev_error, 14612 RawLanguageError* LanguageError::NewFormatted(const Error& prev_error,
14575 const Script& script, 14613 const Script& script,
14576 intptr_t token_pos, 14614 TokenDescriptor token_pos,
14577 bool report_after_token, 14615 bool report_after_token,
14578 Report::Kind kind, 14616 Report::Kind kind,
14579 Heap::Space space, 14617 Heap::Space space,
14580 const char* format, ...) { 14618 const char* format, ...) {
14581 va_list args; 14619 va_list args;
14582 va_start(args, format); 14620 va_start(args, format);
14583 RawLanguageError* result = LanguageError::NewFormattedV( 14621 RawLanguageError* result = LanguageError::NewFormattedV(
14584 prev_error, script, token_pos, report_after_token, 14622 prev_error, script, token_pos, report_after_token,
14585 kind, space, format, args); 14623 kind, space, format, args);
14586 NoSafepointScope no_safepoint; 14624 NoSafepointScope no_safepoint;
(...skipping 23 matching lines...) Expand all
14610 void LanguageError::set_previous_error(const Error& value) const { 14648 void LanguageError::set_previous_error(const Error& value) const {
14611 StorePointer(&raw_ptr()->previous_error_, value.raw()); 14649 StorePointer(&raw_ptr()->previous_error_, value.raw());
14612 } 14650 }
14613 14651
14614 14652
14615 void LanguageError::set_script(const Script& value) const { 14653 void LanguageError::set_script(const Script& value) const {
14616 StorePointer(&raw_ptr()->script_, value.raw()); 14654 StorePointer(&raw_ptr()->script_, value.raw());
14617 } 14655 }
14618 14656
14619 14657
14620 void LanguageError::set_token_pos(intptr_t token_pos) const { 14658 void LanguageError::set_token_pos(TokenDescriptor token_pos) const {
14621 ASSERT(!Token::IsClassifying(token_pos)); 14659 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
14622 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 14660 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
14623 } 14661 }
14624 14662
14625 14663
14626 void LanguageError::set_report_after_token(bool value) { 14664 void LanguageError::set_report_after_token(bool value) {
14627 StoreNonPointer(&raw_ptr()->report_after_token_, value); 14665 StoreNonPointer(&raw_ptr()->report_after_token_, value);
14628 } 14666 }
14629 14667
14630 14668
14631 void LanguageError::set_kind(uint8_t value) const { 14669 void LanguageError::set_kind(uint8_t value) const {
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
15022 if (!type.IsCanonical()) { 15060 if (!type.IsCanonical()) {
15023 type ^= type.Canonicalize(); 15061 type ^= type.Canonicalize();
15024 signature.SetSignatureType(type); 15062 signature.SetSignatureType(type);
15025 } 15063 }
15026 return type.raw(); 15064 return type.raw();
15027 } 15065 }
15028 const Class& scope_cls = Class::Handle(type.scope_class()); 15066 const Class& scope_cls = Class::Handle(type.scope_class());
15029 ASSERT(scope_cls.NumTypeArguments() > 0); 15067 ASSERT(scope_cls.NumTypeArguments() > 0);
15030 TypeArguments& type_arguments = TypeArguments::Handle(GetTypeArguments()); 15068 TypeArguments& type_arguments = TypeArguments::Handle(GetTypeArguments());
15031 type = FunctionType::New( 15069 type = FunctionType::New(
15032 scope_cls, type_arguments, signature, Token::kNoSourcePos); 15070 scope_cls, type_arguments, signature, TokenDescriptor::kNoSource);
15033 type.SetIsFinalized(); 15071 type.SetIsFinalized();
15034 type ^= type.Canonicalize(); 15072 type ^= type.Canonicalize();
15035 return type.raw(); 15073 return type.raw();
15036 } 15074 }
15037 Type& type = Type::Handle(); 15075 Type& type = Type::Handle();
15038 if (!cls.IsGeneric()) { 15076 if (!cls.IsGeneric()) {
15039 type = cls.CanonicalType(); 15077 type = cls.CanonicalType();
15040 } 15078 }
15041 if (type.IsNull()) { 15079 if (type.IsNull()) {
15042 TypeArguments& type_arguments = TypeArguments::Handle(); 15080 TypeArguments& type_arguments = TypeArguments::Handle();
15043 if (cls.NumTypeArguments() > 0) { 15081 if (cls.NumTypeArguments() > 0) {
15044 type_arguments = GetTypeArguments(); 15082 type_arguments = GetTypeArguments();
15045 } 15083 }
15046 type = Type::New(cls, type_arguments, Token::kNoSourcePos); 15084 type = Type::New(cls, type_arguments, TokenDescriptor::kNoSource);
15047 type.SetIsFinalized(); 15085 type.SetIsFinalized();
15048 type ^= type.Canonicalize(); 15086 type ^= type.Canonicalize();
15049 } 15087 }
15050 return type.raw(); 15088 return type.raw();
15051 } 15089 }
15052 15090
15053 15091
15054 RawTypeArguments* Instance::GetTypeArguments() const { 15092 RawTypeArguments* Instance::GetTypeArguments() const {
15055 const Class& cls = Class::Handle(clazz()); 15093 const Class& cls = Class::Handle(clazz());
15056 intptr_t field_offset = cls.type_arguments_field_offset(); 15094 intptr_t field_offset = cls.type_arguments_field_offset();
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
15363 } else { 15401 } else {
15364 if (IsClosure()) { 15402 if (IsClosure()) {
15365 return Closure::Cast(*this).ToCString(); 15403 return Closure::Cast(*this).ToCString();
15366 } 15404 }
15367 const Class& cls = Class::Handle(clazz()); 15405 const Class& cls = Class::Handle(clazz());
15368 TypeArguments& type_arguments = TypeArguments::Handle(); 15406 TypeArguments& type_arguments = TypeArguments::Handle();
15369 const intptr_t num_type_arguments = cls.NumTypeArguments(); 15407 const intptr_t num_type_arguments = cls.NumTypeArguments();
15370 if (num_type_arguments > 0) { 15408 if (num_type_arguments > 0) {
15371 type_arguments = GetTypeArguments(); 15409 type_arguments = GetTypeArguments();
15372 } 15410 }
15373 const Type& type = 15411 const Type& type = Type::Handle(
15374 Type::Handle(Type::New(cls, type_arguments, Token::kNoSourcePos)); 15412 Type::New(cls, type_arguments, TokenDescriptor::kNoSource));
15375 const String& type_name = String::Handle(type.UserVisibleName()); 15413 const String& type_name = String::Handle(type.UserVisibleName());
15376 return OS::SCreate(Thread::Current()->zone(), 15414 return OS::SCreate(Thread::Current()->zone(),
15377 "Instance of '%s'", type_name.ToCString()); 15415 "Instance of '%s'", type_name.ToCString());
15378 } 15416 }
15379 } 15417 }
15380 15418
15381 15419
15382 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, 15420 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
15383 bool ref) const { 15421 bool ref) const {
15384 AddCommonObjectProperties(jsobj, "Instance", ref); 15422 AddCommonObjectProperties(jsobj, "Instance", ref);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
15503 UNREACHABLE(); 15541 UNREACHABLE();
15504 return NULL; 15542 return NULL;
15505 } 15543 }
15506 15544
15507 15545
15508 void AbstractType::set_arguments(const TypeArguments& value) const { 15546 void AbstractType::set_arguments(const TypeArguments& value) const {
15509 // AbstractType is an abstract class. 15547 // AbstractType is an abstract class.
15510 UNREACHABLE(); 15548 UNREACHABLE();
15511 } 15549 }
15512 15550
15513 intptr_t AbstractType::token_pos() const { 15551 TokenDescriptor AbstractType::token_pos() const {
15514 // AbstractType is an abstract class. 15552 // AbstractType is an abstract class.
15515 UNREACHABLE(); 15553 UNREACHABLE();
15516 return -1; 15554 return TokenDescriptor::kNoSource;
15517 } 15555 }
15518 15556
15519 15557
15520 bool AbstractType::IsInstantiated(TrailPtr trail) const { 15558 bool AbstractType::IsInstantiated(TrailPtr trail) const {
15521 // AbstractType is an abstract class. 15559 // AbstractType is an abstract class.
15522 UNREACHABLE(); 15560 UNREACHABLE();
15523 return false; 15561 return false;
15524 } 15562 }
15525 15563
15526 15564
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
16099 } 16137 }
16100 16138
16101 16139
16102 RawType* Type::NewNonParameterizedType(const Class& type_class) { 16140 RawType* Type::NewNonParameterizedType(const Class& type_class) {
16103 ASSERT(type_class.NumTypeArguments() == 0); 16141 ASSERT(type_class.NumTypeArguments() == 0);
16104 Type& type = Type::Handle(type_class.CanonicalType()); 16142 Type& type = Type::Handle(type_class.CanonicalType());
16105 if (type.IsNull()) { 16143 if (type.IsNull()) {
16106 const TypeArguments& no_type_arguments = TypeArguments::Handle(); 16144 const TypeArguments& no_type_arguments = TypeArguments::Handle();
16107 type ^= Type::New(Object::Handle(type_class.raw()), 16145 type ^= Type::New(Object::Handle(type_class.raw()),
16108 no_type_arguments, 16146 no_type_arguments,
16109 Token::kNoSourcePos); 16147 TokenDescriptor::kNoSource);
16110 type.SetIsFinalized(); 16148 type.SetIsFinalized();
16111 type ^= type.Canonicalize(); 16149 type ^= type.Canonicalize();
16112 } 16150 }
16113 ASSERT(type.IsFinalized()); 16151 ASSERT(type.IsFinalized());
16114 return type.raw(); 16152 return type.raw();
16115 } 16153 }
16116 16154
16117 16155
16118 void Type::SetIsFinalized() const { 16156 void Type::SetIsFinalized() const {
16119 ASSERT(!IsFinalized()); 16157 ASSERT(!IsFinalized());
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
16557 RawType* Type::New(Heap::Space space) { 16595 RawType* Type::New(Heap::Space space) {
16558 RawObject* raw = Object::Allocate(Type::kClassId, 16596 RawObject* raw = Object::Allocate(Type::kClassId,
16559 Type::InstanceSize(), 16597 Type::InstanceSize(),
16560 space); 16598 space);
16561 return reinterpret_cast<RawType*>(raw); 16599 return reinterpret_cast<RawType*>(raw);
16562 } 16600 }
16563 16601
16564 16602
16565 RawType* Type::New(const Object& clazz, 16603 RawType* Type::New(const Object& clazz,
16566 const TypeArguments& arguments, 16604 const TypeArguments& arguments,
16567 intptr_t token_pos, 16605 TokenDescriptor token_pos,
16568 Heap::Space space) { 16606 Heap::Space space) {
16569 const Type& result = Type::Handle(Type::New(space)); 16607 const Type& result = Type::Handle(Type::New(space));
16570 result.set_type_class(clazz); 16608 result.set_type_class(clazz);
16571 result.set_arguments(arguments); 16609 result.set_arguments(arguments);
16572 result.set_token_pos(token_pos); 16610 result.set_token_pos(token_pos);
16573 result.StoreNonPointer(&result.raw_ptr()->type_state_, RawType::kAllocated); 16611 result.StoreNonPointer(&result.raw_ptr()->type_state_, RawType::kAllocated);
16574 return result.raw(); 16612 return result.raw();
16575 } 16613 }
16576 16614
16577 16615
16578 void Type::set_token_pos(intptr_t token_pos) const { 16616 void Type::set_token_pos(TokenDescriptor token_pos) const {
16579 ASSERT(!Token::IsClassifying(token_pos)); 16617 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
16580 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 16618 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
16581 } 16619 }
16582 16620
16583 16621
16584 void Type::set_type_state(int8_t state) const { 16622 void Type::set_type_state(int8_t state) const {
16585 ASSERT((state >= RawType::kAllocated) && 16623 ASSERT((state >= RawType::kAllocated) &&
16586 (state <= RawType::kFinalizedUninstantiated)); 16624 (state <= RawType::kFinalizedUninstantiated));
16587 StoreNonPointer(&raw_ptr()->type_state_, state); 16625 StoreNonPointer(&raw_ptr()->type_state_, state);
16588 } 16626 }
16589 16627
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
16987 // In case the type is first canonicalized at runtime, its type argument 17025 // In case the type is first canonicalized at runtime, its type argument
16988 // vector may be longer than necessary. This is not an issue. 17026 // vector may be longer than necessary. This is not an issue.
16989 ASSERT(type_args.IsNull() || 17027 ASSERT(type_args.IsNull() ||
16990 (type_args.Length() >= scope_cls.NumTypeArguments())); 17028 (type_args.Length() >= scope_cls.NumTypeArguments()));
16991 type_args = type_args.Canonicalize(trail); 17029 type_args = type_args.Canonicalize(trail);
16992 set_arguments(type_args); 17030 set_arguments(type_args);
16993 17031
16994 // Replace the actual function by a signature function. 17032 // Replace the actual function by a signature function.
16995 const Function& fun = Function::Handle(zone, signature()); 17033 const Function& fun = Function::Handle(zone, signature());
16996 if (!fun.IsSignatureFunction()) { 17034 if (!fun.IsSignatureFunction()) {
16997 Function& sig_fun = 17035 Function& sig_fun = Function::Handle(zone,
16998 Function::Handle(zone, 17036 Function::NewSignatureFunction(scope_cls, TokenDescriptor::kNoSource));
16999 Function::NewSignatureFunction(scope_cls,
17000 Token::kNoSourcePos));
17001 type = fun.result_type(); 17037 type = fun.result_type();
17002 type = type.Canonicalize(trail); 17038 type = type.Canonicalize(trail);
17003 sig_fun.set_result_type(type); 17039 sig_fun.set_result_type(type);
17004 const intptr_t num_params = fun.NumParameters(); 17040 const intptr_t num_params = fun.NumParameters();
17005 sig_fun.set_num_fixed_parameters(fun.num_fixed_parameters()); 17041 sig_fun.set_num_fixed_parameters(fun.num_fixed_parameters());
17006 sig_fun.SetNumOptionalParameters(fun.NumOptionalParameters(), 17042 sig_fun.SetNumOptionalParameters(fun.NumOptionalParameters(),
17007 fun.HasOptionalPositionalParameters()); 17043 fun.HasOptionalPositionalParameters());
17008 sig_fun.set_parameter_types(Array::Handle(Array::New(num_params, 17044 sig_fun.set_parameter_types(Array::Handle(Array::New(num_params,
17009 Heap::kOld))); 17045 Heap::kOld)));
17010 for (intptr_t i = 0; i < num_params; i++) { 17046 for (intptr_t i = 0; i < num_params; i++) {
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
17101 RawObject* raw = Object::Allocate(FunctionType::kClassId, 17137 RawObject* raw = Object::Allocate(FunctionType::kClassId,
17102 FunctionType::InstanceSize(), 17138 FunctionType::InstanceSize(),
17103 space); 17139 space);
17104 return reinterpret_cast<RawFunctionType*>(raw); 17140 return reinterpret_cast<RawFunctionType*>(raw);
17105 } 17141 }
17106 17142
17107 17143
17108 RawFunctionType* FunctionType::New(const Class& clazz, 17144 RawFunctionType* FunctionType::New(const Class& clazz,
17109 const TypeArguments& arguments, 17145 const TypeArguments& arguments,
17110 const Function& signature, 17146 const Function& signature,
17111 intptr_t token_pos, 17147 TokenDescriptor token_pos,
17112 Heap::Space space) { 17148 Heap::Space space) {
17113 const FunctionType& result = FunctionType::Handle(FunctionType::New(space)); 17149 const FunctionType& result = FunctionType::Handle(FunctionType::New(space));
17114 result.set_scope_class(clazz); 17150 result.set_scope_class(clazz);
17115 result.set_arguments(arguments); 17151 result.set_arguments(arguments);
17116 result.set_signature(signature); 17152 result.set_signature(signature);
17117 result.set_token_pos(token_pos); 17153 result.set_token_pos(token_pos);
17118 result.StoreNonPointer(&result.raw_ptr()->type_state_, 17154 result.StoreNonPointer(&result.raw_ptr()->type_state_,
17119 RawFunctionType::kAllocated); 17155 RawFunctionType::kAllocated);
17120 return result.raw(); 17156 return result.raw();
17121 } 17157 }
17122 17158
17123 17159
17124 void FunctionType::set_token_pos(intptr_t token_pos) const { 17160 void FunctionType::set_token_pos(TokenDescriptor token_pos) const {
17125 ASSERT(!Token::IsClassifying(token_pos)); 17161 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
17126 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 17162 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
17127 } 17163 }
17128 17164
17129 17165
17130 void FunctionType::set_type_state(int8_t state) const { 17166 void FunctionType::set_type_state(int8_t state) const {
17131 ASSERT((state >= RawFunctionType::kAllocated) && 17167 ASSERT((state >= RawFunctionType::kAllocated) &&
17132 (state <= RawFunctionType::kFinalizedUninstantiated)); 17168 (state <= RawFunctionType::kFinalizedUninstantiated));
17133 StoreNonPointer(&raw_ptr()->type_state_, state); 17169 StoreNonPointer(&raw_ptr()->type_state_, state);
17134 } 17170 }
17135 17171
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
17533 TypeParameter::InstanceSize(), 17569 TypeParameter::InstanceSize(),
17534 Heap::kOld); 17570 Heap::kOld);
17535 return reinterpret_cast<RawTypeParameter*>(raw); 17571 return reinterpret_cast<RawTypeParameter*>(raw);
17536 } 17572 }
17537 17573
17538 17574
17539 RawTypeParameter* TypeParameter::New(const Class& parameterized_class, 17575 RawTypeParameter* TypeParameter::New(const Class& parameterized_class,
17540 intptr_t index, 17576 intptr_t index,
17541 const String& name, 17577 const String& name,
17542 const AbstractType& bound, 17578 const AbstractType& bound,
17543 intptr_t token_pos) { 17579 TokenDescriptor token_pos) {
17544 const TypeParameter& result = TypeParameter::Handle(TypeParameter::New()); 17580 const TypeParameter& result = TypeParameter::Handle(TypeParameter::New());
17545 result.set_parameterized_class(parameterized_class); 17581 result.set_parameterized_class(parameterized_class);
17546 result.set_index(index); 17582 result.set_index(index);
17547 result.set_name(name); 17583 result.set_name(name);
17548 result.set_bound(bound); 17584 result.set_bound(bound);
17549 result.set_token_pos(token_pos); 17585 result.set_token_pos(token_pos);
17550 result.StoreNonPointer(&result.raw_ptr()->type_state_, 17586 result.StoreNonPointer(&result.raw_ptr()->type_state_,
17551 RawTypeParameter::kAllocated); 17587 RawTypeParameter::kAllocated);
17552 return result.raw(); 17588 return result.raw();
17553 } 17589 }
17554 17590
17555 17591
17556 void TypeParameter::set_token_pos(intptr_t token_pos) const { 17592 void TypeParameter::set_token_pos(TokenDescriptor token_pos) const {
17557 ASSERT(!Token::IsClassifying(token_pos)); 17593 ASSERT(!TokenDescriptor(token_pos).IsClassifying());
17558 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); 17594 StoreNonPointer(&raw_ptr()->token_pos_, token_pos);
17559 } 17595 }
17560 17596
17561 17597
17562 void TypeParameter::set_type_state(int8_t state) const { 17598 void TypeParameter::set_type_state(int8_t state) const {
17563 ASSERT((state == RawTypeParameter::kAllocated) || 17599 ASSERT((state == RawTypeParameter::kAllocated) ||
17564 (state == RawTypeParameter::kBeingFinalized) || 17600 (state == RawTypeParameter::kBeingFinalized) ||
17565 (state == RawTypeParameter::kFinalizedUninstantiated)); 17601 (state == RawTypeParameter::kFinalizedUninstantiated));
17566 StoreNonPointer(&raw_ptr()->type_state_, state); 17602 StoreNonPointer(&raw_ptr()->type_state_, state);
17567 } 17603 }
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
17824 const String& vm_name = String::Handle(Name()); 17860 const String& vm_name = String::Handle(Name());
17825 AddNameProperties(&jsobj, user_name, vm_name); 17861 AddNameProperties(&jsobj, user_name, vm_name);
17826 if (ref) { 17862 if (ref) {
17827 return; 17863 return;
17828 } 17864 }
17829 jsobj.AddProperty("targetType", AbstractType::Handle(type())); 17865 jsobj.AddProperty("targetType", AbstractType::Handle(type()));
17830 jsobj.AddProperty("bound", AbstractType::Handle(bound())); 17866 jsobj.AddProperty("bound", AbstractType::Handle(bound()));
17831 } 17867 }
17832 17868
17833 17869
17834 intptr_t MixinAppType::token_pos() const { 17870 TokenDescriptor MixinAppType::token_pos() const {
17835 return AbstractType::Handle(MixinTypeAt(0)).token_pos(); 17871 return AbstractType::Handle(MixinTypeAt(0)).token_pos();
17836 } 17872 }
17837 17873
17838 17874
17839 intptr_t MixinAppType::Depth() const { 17875 intptr_t MixinAppType::Depth() const {
17840 return Array::Handle(mixin_types()).Length(); 17876 return Array::Handle(mixin_types()).Length();
17841 } 17877 }
17842 17878
17843 17879
17844 RawString* MixinAppType::Name() const { 17880 RawString* MixinAppType::Name() const {
(...skipping 4477 matching lines...) Expand 10 before | Expand all | Expand 10 after
22322 jsobj.AddProperty("valueAsString", ToCStringInternal(&idx)); 22358 jsobj.AddProperty("valueAsString", ToCStringInternal(&idx));
22323 } 22359 }
22324 22360
22325 22361
22326 static intptr_t PrintOneStacktrace(Zone* zone, 22362 static intptr_t PrintOneStacktrace(Zone* zone,
22327 GrowableArray<char*>* frame_strings, 22363 GrowableArray<char*>* frame_strings,
22328 uword pc, 22364 uword pc,
22329 const Function& function, 22365 const Function& function,
22330 const Code& code, 22366 const Code& code,
22331 intptr_t frame_index) { 22367 intptr_t frame_index) {
22332 const intptr_t token_pos = code.GetTokenIndexOfPC(pc); 22368 const TokenDescriptor token_pos = code.GetTokenIndexOfPC(pc);
22333 const Script& script = Script::Handle(zone, function.script()); 22369 const Script& script = Script::Handle(zone, function.script());
22334 const String& function_name = 22370 const String& function_name =
22335 String::Handle(zone, function.QualifiedUserVisibleName()); 22371 String::Handle(zone, function.QualifiedUserVisibleName());
22336 const String& url = String::Handle(zone, script.url()); 22372 const String& url = String::Handle(zone, script.url());
22337 intptr_t line = -1; 22373 intptr_t line = -1;
22338 intptr_t column = -1; 22374 intptr_t column = -1;
22339 if (token_pos >= 0) { 22375 if (token_pos.IsReal()) {
22340 if (script.HasSource()) { 22376 if (script.HasSource()) {
22341 script.GetTokenLocation(token_pos, &line, &column); 22377 script.GetTokenLocation(token_pos, &line, &column);
22342 } else { 22378 } else {
22343 script.GetTokenLocation(token_pos, &line, NULL); 22379 script.GetTokenLocation(token_pos, &line, NULL);
22344 } 22380 }
22345 } 22381 }
22346 char* chars = NULL; 22382 char* chars = NULL;
22347 if (column >= 0) { 22383 if (column >= 0) {
22348 chars = OS::SCreate(zone, 22384 chars = OS::SCreate(zone,
22349 "#%-6" Pd " %s (%s:%" Pd ":%" Pd ")\n", 22385 "#%-6" Pd " %s (%s:%" Pd ":%" Pd ")\n",
(...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after
22837 return tag_label.ToCString(); 22873 return tag_label.ToCString();
22838 } 22874 }
22839 22875
22840 22876
22841 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 22877 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
22842 Instance::PrintJSONImpl(stream, ref); 22878 Instance::PrintJSONImpl(stream, ref);
22843 } 22879 }
22844 22880
22845 22881
22846 } // namespace dart 22882 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698