OLD | NEW |
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 2073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2084 void FixedArray::set_the_hole(int index) { | 2084 void FixedArray::set_the_hole(int index) { |
2085 ASSERT(map() != HEAP->fixed_cow_array_map()); | 2085 ASSERT(map() != HEAP->fixed_cow_array_map()); |
2086 ASSERT(index >= 0 && index < this->length()); | 2086 ASSERT(index >= 0 && index < this->length()); |
2087 ASSERT(!HEAP->InNewSpace(HEAP->the_hole_value())); | 2087 ASSERT(!HEAP->InNewSpace(HEAP->the_hole_value())); |
2088 WRITE_FIELD(this, | 2088 WRITE_FIELD(this, |
2089 kHeaderSize + index * kPointerSize, | 2089 kHeaderSize + index * kPointerSize, |
2090 GetHeap()->the_hole_value()); | 2090 GetHeap()->the_hole_value()); |
2091 } | 2091 } |
2092 | 2092 |
2093 | 2093 |
2094 void FixedArray::set_unchecked(int index, Smi* value) { | |
2095 ASSERT(reinterpret_cast<Object*>(value)->IsSmi()); | |
2096 int offset = kHeaderSize + index * kPointerSize; | |
2097 WRITE_FIELD(this, offset, value); | |
2098 } | |
2099 | |
2100 | |
2101 void FixedArray::set_unchecked(Heap* heap, | |
2102 int index, | |
2103 Object* value, | |
2104 WriteBarrierMode mode) { | |
2105 int offset = kHeaderSize + index * kPointerSize; | |
2106 WRITE_FIELD(this, offset, value); | |
2107 CONDITIONAL_WRITE_BARRIER(heap, this, offset, value, mode); | |
2108 } | |
2109 | |
2110 | |
2111 void FixedArray::set_null_unchecked(Heap* heap, int index) { | |
2112 ASSERT(index >= 0 && index < this->length()); | |
2113 ASSERT(!heap->InNewSpace(heap->null_value())); | |
2114 WRITE_FIELD(this, kHeaderSize + index * kPointerSize, heap->null_value()); | |
2115 } | |
2116 | |
2117 | |
2118 double* FixedDoubleArray::data_start() { | 2094 double* FixedDoubleArray::data_start() { |
2119 return reinterpret_cast<double*>(FIELD_ADDR(this, kHeaderSize)); | 2095 return reinterpret_cast<double*>(FIELD_ADDR(this, kHeaderSize)); |
2120 } | 2096 } |
2121 | 2097 |
2122 | 2098 |
2123 Object** FixedArray::data_start() { | 2099 Object** FixedArray::data_start() { |
2124 return HeapObject::RawField(this, kHeaderSize); | 2100 return HeapObject::RawField(this, kHeaderSize); |
2125 } | 2101 } |
2126 | 2102 |
2127 | 2103 |
(...skipping 1442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3570 void Map::set_dictionary_map(bool value) { | 3546 void Map::set_dictionary_map(bool value) { |
3571 set_bit_field3(DictionaryMap::update(bit_field3(), value)); | 3547 set_bit_field3(DictionaryMap::update(bit_field3(), value)); |
3572 } | 3548 } |
3573 | 3549 |
3574 | 3550 |
3575 bool Map::is_dictionary_map() { | 3551 bool Map::is_dictionary_map() { |
3576 return DictionaryMap::decode(bit_field3()); | 3552 return DictionaryMap::decode(bit_field3()); |
3577 } | 3553 } |
3578 | 3554 |
3579 | 3555 |
3580 JSFunction* Map::unchecked_constructor() { | |
3581 return reinterpret_cast<JSFunction*>(READ_FIELD(this, kConstructorOffset)); | |
3582 } | |
3583 | |
3584 | |
3585 Code::Flags Code::flags() { | 3556 Code::Flags Code::flags() { |
3586 return static_cast<Flags>(READ_INT_FIELD(this, kFlagsOffset)); | 3557 return static_cast<Flags>(READ_INT_FIELD(this, kFlagsOffset)); |
3587 } | 3558 } |
3588 | 3559 |
3589 | 3560 |
3590 inline bool Map::CanTrackAllocationSite() { | 3561 inline bool Map::CanTrackAllocationSite() { |
3591 return instance_type() == JS_ARRAY_TYPE; | 3562 return instance_type() == JS_ARRAY_TYPE; |
3592 } | 3563 } |
3593 | 3564 |
3594 | 3565 |
(...skipping 1142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4737 set_start_position_and_type((start_position << kStartPositionShift) | 4708 set_start_position_and_type((start_position << kStartPositionShift) |
4738 | (start_position_and_type() & ~kStartPositionMask)); | 4709 | (start_position_and_type() & ~kStartPositionMask)); |
4739 } | 4710 } |
4740 | 4711 |
4741 | 4712 |
4742 Code* SharedFunctionInfo::code() { | 4713 Code* SharedFunctionInfo::code() { |
4743 return Code::cast(READ_FIELD(this, kCodeOffset)); | 4714 return Code::cast(READ_FIELD(this, kCodeOffset)); |
4744 } | 4715 } |
4745 | 4716 |
4746 | 4717 |
4747 Code* SharedFunctionInfo::unchecked_code() { | |
4748 return reinterpret_cast<Code*>(READ_FIELD(this, kCodeOffset)); | |
4749 } | |
4750 | |
4751 | |
4752 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { | 4718 void SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { |
4753 WRITE_FIELD(this, kCodeOffset, value); | 4719 WRITE_FIELD(this, kCodeOffset, value); |
4754 CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode); | 4720 CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode); |
4755 } | 4721 } |
4756 | 4722 |
4757 | 4723 |
4758 void SharedFunctionInfo::ReplaceCode(Code* value) { | 4724 void SharedFunctionInfo::ReplaceCode(Code* value) { |
4759 // If the GC metadata field is already used then the function was | 4725 // If the GC metadata field is already used then the function was |
4760 // enqueued as a code flushing candidate and we remove it now. | 4726 // enqueued as a code flushing candidate and we remove it now. |
4761 if (code()->gc_metadata() != NULL) { | 4727 if (code()->gc_metadata() != NULL) { |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5278 byte* Code::instruction_end() { | 5244 byte* Code::instruction_end() { |
5279 return instruction_start() + instruction_size(); | 5245 return instruction_start() + instruction_size(); |
5280 } | 5246 } |
5281 | 5247 |
5282 | 5248 |
5283 int Code::body_size() { | 5249 int Code::body_size() { |
5284 return RoundUp(instruction_size(), kObjectAlignment); | 5250 return RoundUp(instruction_size(), kObjectAlignment); |
5285 } | 5251 } |
5286 | 5252 |
5287 | 5253 |
5288 FixedArray* Code::unchecked_deoptimization_data() { | |
5289 return reinterpret_cast<FixedArray*>( | |
5290 READ_FIELD(this, kDeoptimizationDataOffset)); | |
5291 } | |
5292 | |
5293 | |
5294 ByteArray* Code::unchecked_relocation_info() { | 5254 ByteArray* Code::unchecked_relocation_info() { |
5295 return reinterpret_cast<ByteArray*>(READ_FIELD(this, kRelocationInfoOffset)); | 5255 return reinterpret_cast<ByteArray*>(READ_FIELD(this, kRelocationInfoOffset)); |
5296 } | 5256 } |
5297 | 5257 |
5298 | 5258 |
5299 byte* Code::relocation_start() { | 5259 byte* Code::relocation_start() { |
5300 return unchecked_relocation_info()->GetDataStartAddress(); | 5260 return unchecked_relocation_info()->GetDataStartAddress(); |
5301 } | 5261 } |
5302 | 5262 |
5303 | 5263 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5359 | 5319 |
5360 | 5320 |
5361 JSRegExp::Type JSRegExp::TypeTag() { | 5321 JSRegExp::Type JSRegExp::TypeTag() { |
5362 Object* data = this->data(); | 5322 Object* data = this->data(); |
5363 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; | 5323 if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; |
5364 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); | 5324 Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); |
5365 return static_cast<JSRegExp::Type>(smi->value()); | 5325 return static_cast<JSRegExp::Type>(smi->value()); |
5366 } | 5326 } |
5367 | 5327 |
5368 | 5328 |
5369 JSRegExp::Type JSRegExp::TypeTagUnchecked() { | |
5370 Smi* smi = Smi::cast(DataAtUnchecked(kTagIndex)); | |
5371 return static_cast<JSRegExp::Type>(smi->value()); | |
5372 } | |
5373 | |
5374 | |
5375 int JSRegExp::CaptureCount() { | 5329 int JSRegExp::CaptureCount() { |
5376 switch (TypeTag()) { | 5330 switch (TypeTag()) { |
5377 case ATOM: | 5331 case ATOM: |
5378 return 0; | 5332 return 0; |
5379 case IRREGEXP: | 5333 case IRREGEXP: |
5380 return Smi::cast(DataAt(kIrregexpCaptureCountIndex))->value(); | 5334 return Smi::cast(DataAt(kIrregexpCaptureCountIndex))->value(); |
5381 default: | 5335 default: |
5382 UNREACHABLE(); | 5336 UNREACHABLE(); |
5383 return -1; | 5337 return -1; |
5384 } | 5338 } |
(...skipping 15 matching lines...) Expand all Loading... |
5400 return pattern; | 5354 return pattern; |
5401 } | 5355 } |
5402 | 5356 |
5403 | 5357 |
5404 Object* JSRegExp::DataAt(int index) { | 5358 Object* JSRegExp::DataAt(int index) { |
5405 ASSERT(TypeTag() != NOT_COMPILED); | 5359 ASSERT(TypeTag() != NOT_COMPILED); |
5406 return FixedArray::cast(data())->get(index); | 5360 return FixedArray::cast(data())->get(index); |
5407 } | 5361 } |
5408 | 5362 |
5409 | 5363 |
5410 Object* JSRegExp::DataAtUnchecked(int index) { | |
5411 FixedArray* fa = reinterpret_cast<FixedArray*>(data()); | |
5412 int offset = FixedArray::kHeaderSize + index * kPointerSize; | |
5413 return READ_FIELD(fa, offset); | |
5414 } | |
5415 | |
5416 | |
5417 void JSRegExp::SetDataAt(int index, Object* value) { | 5364 void JSRegExp::SetDataAt(int index, Object* value) { |
5418 ASSERT(TypeTag() != NOT_COMPILED); | 5365 ASSERT(TypeTag() != NOT_COMPILED); |
5419 ASSERT(index >= kDataIndex); // Only implementation data can be set this way. | 5366 ASSERT(index >= kDataIndex); // Only implementation data can be set this way. |
5420 FixedArray::cast(data())->set(index, value); | 5367 FixedArray::cast(data())->set(index, value); |
5421 } | 5368 } |
5422 | 5369 |
5423 | 5370 |
5424 void JSRegExp::SetDataAtUnchecked(int index, Object* value, Heap* heap) { | |
5425 ASSERT(index >= kDataIndex); // Only implementation data can be set this way. | |
5426 FixedArray* fa = reinterpret_cast<FixedArray*>(data()); | |
5427 if (value->IsSmi()) { | |
5428 fa->set_unchecked(index, Smi::cast(value)); | |
5429 } else { | |
5430 // We only do this during GC, so we don't need to notify the write barrier. | |
5431 fa->set_unchecked(heap, index, value, SKIP_WRITE_BARRIER); | |
5432 } | |
5433 } | |
5434 | |
5435 | |
5436 ElementsKind JSObject::GetElementsKind() { | 5371 ElementsKind JSObject::GetElementsKind() { |
5437 ElementsKind kind = map()->elements_kind(); | 5372 ElementsKind kind = map()->elements_kind(); |
5438 #if DEBUG | 5373 #if DEBUG |
5439 FixedArrayBase* fixed_array = | 5374 FixedArrayBase* fixed_array = |
5440 reinterpret_cast<FixedArrayBase*>(READ_FIELD(this, kElementsOffset)); | 5375 reinterpret_cast<FixedArrayBase*>(READ_FIELD(this, kElementsOffset)); |
5441 Map* map = fixed_array->map(); | 5376 Map* map = fixed_array->map(); |
5442 ASSERT((IsFastSmiOrObjectElementsKind(kind) && | 5377 ASSERT((IsFastSmiOrObjectElementsKind(kind) && |
5443 (map == GetHeap()->fixed_array_map() || | 5378 (map == GetHeap()->fixed_array_map() || |
5444 map == GetHeap()->fixed_cow_array_map())) || | 5379 map == GetHeap()->fixed_cow_array_map())) || |
5445 (IsFastDoubleElementsKind(kind) && | 5380 (IsFastDoubleElementsKind(kind) && |
(...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6246 #undef WRITE_UINT32_FIELD | 6181 #undef WRITE_UINT32_FIELD |
6247 #undef READ_SHORT_FIELD | 6182 #undef READ_SHORT_FIELD |
6248 #undef WRITE_SHORT_FIELD | 6183 #undef WRITE_SHORT_FIELD |
6249 #undef READ_BYTE_FIELD | 6184 #undef READ_BYTE_FIELD |
6250 #undef WRITE_BYTE_FIELD | 6185 #undef WRITE_BYTE_FIELD |
6251 | 6186 |
6252 | 6187 |
6253 } } // namespace v8::internal | 6188 } } // namespace v8::internal |
6254 | 6189 |
6255 #endif // V8_OBJECTS_INL_H_ | 6190 #endif // V8_OBJECTS_INL_H_ |
OLD | NEW |