Chromium Code Reviews| 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 2533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2544 unsigned length) { | 2544 unsigned length) { |
| 2545 ASSERT(length == static_cast<unsigned>(string->length())); | 2545 ASSERT(length == static_cast<unsigned>(string->length())); |
| 2546 ASSERT(offset <= length); | 2546 ASSERT(offset <= length); |
| 2547 unsigned slice_offset = offset; | 2547 unsigned slice_offset = offset; |
| 2548 while (true) { | 2548 while (true) { |
| 2549 ASSERT(type == string->map()->instance_type()); | 2549 ASSERT(type == string->map()->instance_type()); |
| 2550 | 2550 |
| 2551 switch (type & (kStringRepresentationMask | kStringEncodingMask)) { | 2551 switch (type & (kStringRepresentationMask | kStringEncodingMask)) { |
| 2552 case kSeqStringTag | kOneByteStringTag: | 2552 case kSeqStringTag | kOneByteStringTag: |
| 2553 visitor.VisitOneByteString( | 2553 visitor.VisitOneByteString( |
| 2554 reinterpret_cast<const uint8_t*>( | 2554 SeqOneByteString::cast(string)->GetChars() + slice_offset, |
| 2555 SeqOneByteString::cast(string)->GetChars()) + slice_offset, | 2555 length - offset); |
| 2556 length - offset); | |
| 2557 return; | 2556 return; |
| 2558 | 2557 |
| 2559 case kSeqStringTag | kTwoByteStringTag: | 2558 case kSeqStringTag | kTwoByteStringTag: |
| 2560 visitor.VisitTwoByteString( | 2559 visitor.VisitTwoByteString( |
| 2561 reinterpret_cast<const uint16_t*>( | 2560 SeqTwoByteString::cast(string)->GetChars() + slice_offset, |
| 2562 SeqTwoByteString::cast(string)->GetChars()) + slice_offset, | 2561 length - offset); |
| 2563 length - offset); | |
| 2564 return; | 2562 return; |
| 2565 | 2563 |
| 2566 case kExternalStringTag | kOneByteStringTag: | 2564 case kExternalStringTag | kOneByteStringTag: |
| 2567 visitor.VisitOneByteString( | 2565 visitor.VisitOneByteString( |
| 2568 reinterpret_cast<const uint8_t*>( | 2566 ExternalAsciiString::cast(string)->GetChars() + slice_offset, |
| 2569 ExternalAsciiString::cast(string)->GetChars()) + slice_offset, | 2567 length - offset); |
| 2570 length - offset); | |
| 2571 return; | 2568 return; |
| 2572 | 2569 |
| 2573 case kExternalStringTag | kTwoByteStringTag: | 2570 case kExternalStringTag | kTwoByteStringTag: |
| 2574 visitor.VisitTwoByteString( | 2571 visitor.VisitTwoByteString( |
| 2575 reinterpret_cast<const uint16_t*>( | 2572 ExternalTwoByteString::cast(string)->GetChars() + slice_offset, |
| 2576 ExternalTwoByteString::cast(string)->GetChars()) | 2573 length - offset); |
| 2577 + slice_offset, | |
| 2578 length - offset); | |
| 2579 return; | 2574 return; |
| 2580 | 2575 |
| 2581 case kSlicedStringTag | kOneByteStringTag: | 2576 case kSlicedStringTag | kOneByteStringTag: |
| 2582 case kSlicedStringTag | kTwoByteStringTag: { | 2577 case kSlicedStringTag | kTwoByteStringTag: { |
| 2583 SlicedString* slicedString = SlicedString::cast(string); | 2578 SlicedString* slicedString = SlicedString::cast(string); |
| 2584 slice_offset += slicedString->offset(); | 2579 slice_offset += slicedString->offset(); |
| 2585 string = slicedString->parent(); | 2580 string = slicedString->parent(); |
| 2586 type = string->map()->instance_type(); | 2581 type = string->map()->instance_type(); |
| 2587 continue; | 2582 continue; |
| 2588 } | 2583 } |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 2614 WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, | 2609 WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, |
| 2615 static_cast<byte>(value)); | 2610 static_cast<byte>(value)); |
| 2616 } | 2611 } |
| 2617 | 2612 |
| 2618 | 2613 |
| 2619 Address SeqOneByteString::GetCharsAddress() { | 2614 Address SeqOneByteString::GetCharsAddress() { |
| 2620 return FIELD_ADDR(this, kHeaderSize); | 2615 return FIELD_ADDR(this, kHeaderSize); |
| 2621 } | 2616 } |
| 2622 | 2617 |
| 2623 | 2618 |
| 2624 char* SeqOneByteString::GetChars() { | 2619 uint8_t* SeqOneByteString::GetChars() { |
| 2625 return reinterpret_cast<char*>(GetCharsAddress()); | |
| 2626 } | |
| 2627 | |
| 2628 | |
| 2629 uint8_t* SeqOneByteString::GetCharsU() { | |
| 2630 return reinterpret_cast<uint8_t*>(GetCharsAddress()); | 2620 return reinterpret_cast<uint8_t*>(GetCharsAddress()); |
| 2631 } | 2621 } |
| 2632 | 2622 |
| 2633 | 2623 |
| 2634 Address SeqTwoByteString::GetCharsAddress() { | 2624 Address SeqTwoByteString::GetCharsAddress() { |
| 2635 return FIELD_ADDR(this, kHeaderSize); | 2625 return FIELD_ADDR(this, kHeaderSize); |
| 2636 } | 2626 } |
| 2637 | 2627 |
| 2638 | 2628 |
| 2639 uc16* SeqTwoByteString::GetChars() { | 2629 uc16* SeqTwoByteString::GetChars() { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2730 | 2720 |
| 2731 | 2721 |
| 2732 void ExternalAsciiString::set_resource( | 2722 void ExternalAsciiString::set_resource( |
| 2733 const ExternalAsciiString::Resource* resource) { | 2723 const ExternalAsciiString::Resource* resource) { |
| 2734 *reinterpret_cast<const Resource**>( | 2724 *reinterpret_cast<const Resource**>( |
| 2735 FIELD_ADDR(this, kResourceOffset)) = resource; | 2725 FIELD_ADDR(this, kResourceOffset)) = resource; |
| 2736 if (resource != NULL) update_data_cache(); | 2726 if (resource != NULL) update_data_cache(); |
| 2737 } | 2727 } |
| 2738 | 2728 |
| 2739 | 2729 |
| 2740 const char* ExternalAsciiString::GetChars() { | 2730 const uint8_t* ExternalAsciiString::GetChars() { |
| 2741 return resource()->data(); | 2731 return reinterpret_cast<const uint8_t*>(resource()->data()); |
|
Yang
2013/01/09 15:39:30
I guess this cast would be unnecessary once we cha
| |
| 2742 } | 2732 } |
| 2743 | 2733 |
| 2744 | 2734 |
| 2745 uint16_t ExternalAsciiString::ExternalAsciiStringGet(int index) { | 2735 uint16_t ExternalAsciiString::ExternalAsciiStringGet(int index) { |
| 2746 ASSERT(index >= 0 && index < length()); | 2736 ASSERT(index >= 0 && index < length()); |
| 2747 return GetChars()[index]; | 2737 return GetChars()[index]; |
| 2748 } | 2738 } |
| 2749 | 2739 |
| 2750 | 2740 |
| 2751 const ExternalTwoByteString::Resource* ExternalTwoByteString::resource() { | 2741 const ExternalTwoByteString::Resource* ExternalTwoByteString::resource() { |
| (...skipping 3041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5793 #undef WRITE_UINT32_FIELD | 5783 #undef WRITE_UINT32_FIELD |
| 5794 #undef READ_SHORT_FIELD | 5784 #undef READ_SHORT_FIELD |
| 5795 #undef WRITE_SHORT_FIELD | 5785 #undef WRITE_SHORT_FIELD |
| 5796 #undef READ_BYTE_FIELD | 5786 #undef READ_BYTE_FIELD |
| 5797 #undef WRITE_BYTE_FIELD | 5787 #undef WRITE_BYTE_FIELD |
| 5798 | 5788 |
| 5799 | 5789 |
| 5800 } } // namespace v8::internal | 5790 } } // namespace v8::internal |
| 5801 | 5791 |
| 5802 #endif // V8_OBJECTS_INL_H_ | 5792 #endif // V8_OBJECTS_INL_H_ |
| OLD | NEW |