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

Side by Side Diff: src/objects-inl.h

Issue 110573004: Merge bleeding_edge 17696:18016. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 HeapObject::cast(this)->map() == 143 HeapObject::cast(this)->map() ==
144 HeapObject::cast(this)->GetHeap()->external_map(); 144 HeapObject::cast(this)->GetHeap()->external_map();
145 } 145 }
146 146
147 147
148 bool Object::IsAccessorInfo() { 148 bool Object::IsAccessorInfo() {
149 return IsExecutableAccessorInfo() || IsDeclaredAccessorInfo(); 149 return IsExecutableAccessorInfo() || IsDeclaredAccessorInfo();
150 } 150 }
151 151
152 152
153 bool Object::IsInstanceOf(FunctionTemplateInfo* expected) {
154 // There is a constraint on the object; check.
155 if (!this->IsJSObject()) return false;
156 // Fetch the constructor function of the object.
157 Object* cons_obj = JSObject::cast(this)->map()->constructor();
158 if (!cons_obj->IsJSFunction()) return false;
159 JSFunction* fun = JSFunction::cast(cons_obj);
160 // Iterate through the chain of inheriting function templates to
161 // see if the required one occurs.
162 for (Object* type = fun->shared()->function_data();
163 type->IsFunctionTemplateInfo();
164 type = FunctionTemplateInfo::cast(type)->parent_template()) {
165 if (type == expected) return true;
166 }
167 // Didn't find the required type in the inheritance chain.
168 return false;
169 }
170
171
172 bool Object::IsSmi() { 153 bool Object::IsSmi() {
173 return HAS_SMI_TAG(this); 154 return HAS_SMI_TAG(this);
174 } 155 }
175 156
176 157
177 bool Object::IsHeapObject() { 158 bool Object::IsHeapObject() {
178 return Internals::HasHeapObjectTag(this); 159 return Internals::HasHeapObjectTag(this);
179 } 160 }
180 161
181 162
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 } 1304 }
1324 1305
1325 return AllocationSite::GetMode(GetElementsKind()) == 1306 return AllocationSite::GetMode(GetElementsKind()) ==
1326 TRACK_ALLOCATION_SITE; 1307 TRACK_ALLOCATION_SITE;
1327 } 1308 }
1328 return false; 1309 return false;
1329 } 1310 }
1330 1311
1331 1312
1332 void AllocationSite::Initialize() { 1313 void AllocationSite::Initialize() {
1314 set_transition_info(Smi::FromInt(0));
1333 SetElementsKind(GetInitialFastElementsKind()); 1315 SetElementsKind(GetInitialFastElementsKind());
1334 set_nested_site(Smi::FromInt(0)); 1316 set_nested_site(Smi::FromInt(0));
1317 set_memento_create_count(Smi::FromInt(0));
1318 set_memento_found_count(Smi::FromInt(0));
1319 set_pretenure_decision(Smi::FromInt(0));
1335 set_dependent_code(DependentCode::cast(GetHeap()->empty_fixed_array()), 1320 set_dependent_code(DependentCode::cast(GetHeap()->empty_fixed_array()),
1336 SKIP_WRITE_BARRIER); 1321 SKIP_WRITE_BARRIER);
1337 } 1322 }
1338 1323
1339 1324
1340 // Heuristic: We only need to create allocation site info if the boilerplate 1325 // Heuristic: We only need to create allocation site info if the boilerplate
1341 // elements kind is the initial elements kind. 1326 // elements kind is the initial elements kind.
1342 AllocationSiteMode AllocationSite::GetMode( 1327 AllocationSiteMode AllocationSite::GetMode(
1343 ElementsKind boilerplate_elements_kind) { 1328 ElementsKind boilerplate_elements_kind) {
1344 if (FLAG_track_allocation_sites && 1329 if (FLAG_track_allocation_sites &&
(...skipping 15 matching lines...) Expand all
1360 1345
1361 return DONT_TRACK_ALLOCATION_SITE; 1346 return DONT_TRACK_ALLOCATION_SITE;
1362 } 1347 }
1363 1348
1364 1349
1365 inline bool AllocationSite::CanTrack(InstanceType type) { 1350 inline bool AllocationSite::CanTrack(InstanceType type) {
1366 return type == JS_ARRAY_TYPE; 1351 return type == JS_ARRAY_TYPE;
1367 } 1352 }
1368 1353
1369 1354
1355 inline DependentCode::DependencyGroup AllocationSite::ToDependencyGroup(
1356 Reason reason) {
1357 switch (reason) {
1358 case TENURING:
1359 return DependentCode::kAllocationSiteTenuringChangedGroup;
1360 break;
1361 case TRANSITIONS:
1362 return DependentCode::kAllocationSiteTransitionChangedGroup;
1363 break;
1364 }
1365 UNREACHABLE();
1366 return DependentCode::kAllocationSiteTransitionChangedGroup;
1367 }
1368
1369
1370 void JSObject::EnsureCanContainHeapObjectElements(Handle<JSObject> object) { 1370 void JSObject::EnsureCanContainHeapObjectElements(Handle<JSObject> object) {
1371 object->ValidateElements(); 1371 object->ValidateElements();
1372 ElementsKind elements_kind = object->map()->elements_kind(); 1372 ElementsKind elements_kind = object->map()->elements_kind();
1373 if (!IsFastObjectElementsKind(elements_kind)) { 1373 if (!IsFastObjectElementsKind(elements_kind)) {
1374 if (IsFastHoleyElementsKind(elements_kind)) { 1374 if (IsFastHoleyElementsKind(elements_kind)) {
1375 TransitionElementsKind(object, FAST_HOLEY_ELEMENTS); 1375 TransitionElementsKind(object, FAST_HOLEY_ELEMENTS);
1376 } else { 1376 } else {
1377 TransitionElementsKind(object, FAST_ELEMENTS); 1377 TransitionElementsKind(object, FAST_ELEMENTS);
1378 } 1378 }
1379 } 1379 }
(...skipping 2264 matching lines...) Expand 10 before | Expand all | Expand 10 after
3644 void Map::set_owns_descriptors(bool is_shared) { 3644 void Map::set_owns_descriptors(bool is_shared) {
3645 set_bit_field3(OwnsDescriptors::update(bit_field3(), is_shared)); 3645 set_bit_field3(OwnsDescriptors::update(bit_field3(), is_shared));
3646 } 3646 }
3647 3647
3648 3648
3649 bool Map::owns_descriptors() { 3649 bool Map::owns_descriptors() {
3650 return OwnsDescriptors::decode(bit_field3()); 3650 return OwnsDescriptors::decode(bit_field3());
3651 } 3651 }
3652 3652
3653 3653
3654 void Map::set_is_observed(bool is_observed) { 3654 void Map::set_has_instance_call_handler() {
3655 ASSERT(instance_type() < FIRST_JS_OBJECT_TYPE || 3655 set_bit_field3(HasInstanceCallHandler::update(bit_field3(), true));
3656 instance_type() > LAST_JS_OBJECT_TYPE ||
3657 has_slow_elements_kind() || has_external_array_elements());
3658 set_bit_field3(IsObserved::update(bit_field3(), is_observed));
3659 } 3656 }
3660 3657
3661 3658
3662 bool Map::is_observed() { 3659 bool Map::has_instance_call_handler() {
3663 return IsObserved::decode(bit_field3()); 3660 return HasInstanceCallHandler::decode(bit_field3());
3664 } 3661 }
3665 3662
3666 3663
3667 void Map::deprecate() { 3664 void Map::deprecate() {
3668 set_bit_field3(Deprecated::update(bit_field3(), true)); 3665 set_bit_field3(Deprecated::update(bit_field3(), true));
3669 } 3666 }
3670 3667
3671 3668
3672 bool Map::is_deprecated() { 3669 bool Map::is_deprecated() {
3673 if (!FLAG_track_fields) return false; 3670 if (!FLAG_track_fields) return false;
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
3873 3870
3874 3871
3875 inline void Code::set_is_crankshafted(bool value) { 3872 inline void Code::set_is_crankshafted(bool value) {
3876 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 3873 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset);
3877 int updated = IsCrankshaftedField::update(previous, value); 3874 int updated = IsCrankshaftedField::update(previous, value);
3878 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 3875 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated);
3879 } 3876 }
3880 3877
3881 3878
3882 int Code::major_key() { 3879 int Code::major_key() {
3883 ASSERT(kind() == STUB || 3880 ASSERT(has_major_key());
3884 kind() == HANDLER ||
3885 kind() == BINARY_OP_IC ||
3886 kind() == COMPARE_IC ||
3887 kind() == COMPARE_NIL_IC ||
3888 kind() == STORE_IC ||
3889 kind() == LOAD_IC ||
3890 kind() == KEYED_LOAD_IC ||
3891 kind() == TO_BOOLEAN_IC);
3892 return StubMajorKeyField::decode( 3881 return StubMajorKeyField::decode(
3893 READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 3882 READ_UINT32_FIELD(this, kKindSpecificFlags2Offset));
3894 } 3883 }
3895 3884
3896 3885
3897 void Code::set_major_key(int major) { 3886 void Code::set_major_key(int major) {
3898 ASSERT(kind() == STUB || 3887 ASSERT(has_major_key());
3899 kind() == HANDLER ||
3900 kind() == BINARY_OP_IC ||
3901 kind() == COMPARE_IC ||
3902 kind() == COMPARE_NIL_IC ||
3903 kind() == LOAD_IC ||
3904 kind() == KEYED_LOAD_IC ||
3905 kind() == STORE_IC ||
3906 kind() == KEYED_STORE_IC ||
3907 kind() == TO_BOOLEAN_IC);
3908 ASSERT(0 <= major && major < 256); 3888 ASSERT(0 <= major && major < 256);
3909 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 3889 int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset);
3910 int updated = StubMajorKeyField::update(previous, major); 3890 int updated = StubMajorKeyField::update(previous, major);
3911 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 3891 WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated);
3912 } 3892 }
3913 3893
3914 3894
3895 bool Code::has_major_key() {
3896 return kind() == STUB ||
3897 kind() == HANDLER ||
3898 kind() == BINARY_OP_IC ||
3899 kind() == COMPARE_IC ||
3900 kind() == COMPARE_NIL_IC ||
3901 kind() == LOAD_IC ||
3902 kind() == KEYED_LOAD_IC ||
3903 kind() == STORE_IC ||
3904 kind() == KEYED_STORE_IC ||
3905 kind() == KEYED_CALL_IC ||
3906 kind() == TO_BOOLEAN_IC;
3907 }
3908
3909
3915 bool Code::is_pregenerated() { 3910 bool Code::is_pregenerated() {
3916 return (kind() == STUB && IsPregeneratedField::decode(flags())); 3911 return (kind() == STUB && IsPregeneratedField::decode(flags()));
3917 } 3912 }
3918 3913
3919 3914
3920 void Code::set_is_pregenerated(bool value) { 3915 void Code::set_is_pregenerated(bool value) {
3921 ASSERT(kind() == STUB); 3916 ASSERT(kind() == STUB);
3922 Flags f = flags(); 3917 Flags f = flags();
3923 f = static_cast<Flags>(IsPregeneratedField::update(f, value)); 3918 f = static_cast<Flags>(IsPregeneratedField::update(f, value));
3924 set_flags(f); 3919 set_flags(f);
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
4162 | CacheHolderField::encode(holder); 4157 | CacheHolderField::encode(holder);
4163 if (!Code::needs_extended_extra_ic_state(kind)) { 4158 if (!Code::needs_extended_extra_ic_state(kind)) {
4164 bits |= (argc << kArgumentsCountShift); 4159 bits |= (argc << kArgumentsCountShift);
4165 } 4160 }
4166 return static_cast<Flags>(bits); 4161 return static_cast<Flags>(bits);
4167 } 4162 }
4168 4163
4169 4164
4170 Code::Flags Code::ComputeMonomorphicFlags(Kind kind, 4165 Code::Flags Code::ComputeMonomorphicFlags(Kind kind,
4171 ExtraICState extra_ic_state, 4166 ExtraICState extra_ic_state,
4167 InlineCacheHolderFlag holder,
4172 StubType type, 4168 StubType type,
4173 int argc, 4169 int argc) {
4174 InlineCacheHolderFlag holder) {
4175 return ComputeFlags(kind, MONOMORPHIC, extra_ic_state, type, argc, holder); 4170 return ComputeFlags(kind, MONOMORPHIC, extra_ic_state, type, argc, holder);
4176 } 4171 }
4177 4172
4178 4173
4179 Code::Kind Code::ExtractKindFromFlags(Flags flags) { 4174 Code::Kind Code::ExtractKindFromFlags(Flags flags) {
4180 return KindField::decode(flags); 4175 return KindField::decode(flags);
4181 } 4176 }
4182 4177
4183 4178
4184 InlineCacheState Code::ExtractICStateFromFlags(Flags flags) { 4179 InlineCacheState Code::ExtractICStateFromFlags(Flags flags) {
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
4549 ACCESSORS(ObjectTemplateInfo, internal_field_count, Object, 4544 ACCESSORS(ObjectTemplateInfo, internal_field_count, Object,
4550 kInternalFieldCountOffset) 4545 kInternalFieldCountOffset)
4551 4546
4552 ACCESSORS(SignatureInfo, receiver, Object, kReceiverOffset) 4547 ACCESSORS(SignatureInfo, receiver, Object, kReceiverOffset)
4553 ACCESSORS(SignatureInfo, args, Object, kArgsOffset) 4548 ACCESSORS(SignatureInfo, args, Object, kArgsOffset)
4554 4549
4555 ACCESSORS(TypeSwitchInfo, types, Object, kTypesOffset) 4550 ACCESSORS(TypeSwitchInfo, types, Object, kTypesOffset)
4556 4551
4557 ACCESSORS(AllocationSite, transition_info, Object, kTransitionInfoOffset) 4552 ACCESSORS(AllocationSite, transition_info, Object, kTransitionInfoOffset)
4558 ACCESSORS(AllocationSite, nested_site, Object, kNestedSiteOffset) 4553 ACCESSORS(AllocationSite, nested_site, Object, kNestedSiteOffset)
4554 ACCESSORS_TO_SMI(AllocationSite, memento_found_count, kMementoFoundCountOffset)
4555 ACCESSORS_TO_SMI(AllocationSite, memento_create_count,
4556 kMementoCreateCountOffset)
4557 ACCESSORS_TO_SMI(AllocationSite, pretenure_decision, kPretenureDecisionOffset)
4559 ACCESSORS(AllocationSite, dependent_code, DependentCode, 4558 ACCESSORS(AllocationSite, dependent_code, DependentCode,
4560 kDependentCodeOffset) 4559 kDependentCodeOffset)
4561 ACCESSORS(AllocationSite, weak_next, Object, kWeakNextOffset) 4560 ACCESSORS(AllocationSite, weak_next, Object, kWeakNextOffset)
4562 ACCESSORS(AllocationMemento, allocation_site, Object, kAllocationSiteOffset) 4561 ACCESSORS(AllocationMemento, allocation_site, Object, kAllocationSiteOffset)
4563 4562
4564 ACCESSORS(Script, source, Object, kSourceOffset) 4563 ACCESSORS(Script, source, Object, kSourceOffset)
4565 ACCESSORS(Script, name, Object, kNameOffset) 4564 ACCESSORS(Script, name, Object, kNameOffset)
4566 ACCESSORS(Script, id, Smi, kIdOffset) 4565 ACCESSORS(Script, id, Smi, kIdOffset)
4567 ACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset) 4566 ACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset)
4568 ACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset) 4567 ACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset)
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
5453 bool JSArrayBuffer::is_external() { 5452 bool JSArrayBuffer::is_external() {
5454 return BooleanBit::get(flag(), kIsExternalBit); 5453 return BooleanBit::get(flag(), kIsExternalBit);
5455 } 5454 }
5456 5455
5457 5456
5458 void JSArrayBuffer::set_is_external(bool value) { 5457 void JSArrayBuffer::set_is_external(bool value) {
5459 set_flag(BooleanBit::set(flag(), kIsExternalBit, value)); 5458 set_flag(BooleanBit::set(flag(), kIsExternalBit, value));
5460 } 5459 }
5461 5460
5462 5461
5462 bool JSArrayBuffer::should_be_freed() {
5463 return BooleanBit::get(flag(), kShouldBeFreed);
5464 }
5465
5466
5467 void JSArrayBuffer::set_should_be_freed(bool value) {
5468 set_flag(BooleanBit::set(flag(), kShouldBeFreed, value));
5469 }
5470
5471
5463 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) 5472 ACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset)
5464 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) 5473 ACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset)
5465 5474
5466 5475
5467 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) 5476 ACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset)
5468 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) 5477 ACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset)
5469 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) 5478 ACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset)
5470 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) 5479 ACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset)
5471 ACCESSORS(JSTypedArray, length, Object, kLengthOffset) 5480 ACCESSORS(JSTypedArray, length, Object, kLengthOffset)
5472 5481
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
5935 5944
5936 5945
5937 void AccessorInfo::set_property_attributes(PropertyAttributes attributes) { 5946 void AccessorInfo::set_property_attributes(PropertyAttributes attributes) {
5938 set_flag(Smi::FromInt(AttributesField::update(flag()->value(), attributes))); 5947 set_flag(Smi::FromInt(AttributesField::update(flag()->value(), attributes)));
5939 } 5948 }
5940 5949
5941 5950
5942 bool AccessorInfo::IsCompatibleReceiver(Object* receiver) { 5951 bool AccessorInfo::IsCompatibleReceiver(Object* receiver) {
5943 Object* function_template = expected_receiver_type(); 5952 Object* function_template = expected_receiver_type();
5944 if (!function_template->IsFunctionTemplateInfo()) return true; 5953 if (!function_template->IsFunctionTemplateInfo()) return true;
5945 return receiver->IsInstanceOf(FunctionTemplateInfo::cast(function_template)); 5954 return FunctionTemplateInfo::cast(function_template)->IsTemplateFor(receiver);
5946 } 5955 }
5947 5956
5948 5957
5949 void AccessorPair::set_access_flags(v8::AccessControl access_control) { 5958 void AccessorPair::set_access_flags(v8::AccessControl access_control) {
5950 int current = access_flags()->value(); 5959 int current = access_flags()->value();
5951 current = BooleanBit::set(current, 5960 current = BooleanBit::set(current,
5952 kProhibitsOverwritingBit, 5961 kProhibitsOverwritingBit,
5953 access_control & PROHIBITS_OVERWRITING); 5962 access_control & PROHIBITS_OVERWRITING);
5954 current = BooleanBit::set(current, 5963 current = BooleanBit::set(current,
5955 kAllCanReadBit, 5964 kAllCanReadBit,
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
6415 #undef WRITE_UINT32_FIELD 6424 #undef WRITE_UINT32_FIELD
6416 #undef READ_SHORT_FIELD 6425 #undef READ_SHORT_FIELD
6417 #undef WRITE_SHORT_FIELD 6426 #undef WRITE_SHORT_FIELD
6418 #undef READ_BYTE_FIELD 6427 #undef READ_BYTE_FIELD
6419 #undef WRITE_BYTE_FIELD 6428 #undef WRITE_BYTE_FIELD
6420 6429
6421 6430
6422 } } // namespace v8::internal 6431 } } // namespace v8::internal
6423 6432
6424 #endif // V8_OBJECTS_INL_H_ 6433 #endif // V8_OBJECTS_INL_H_
OLDNEW
« include/v8-platform.h ('K') | « src/objects-debug.cc ('k') | src/objects-printer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698