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

Side by Side Diff: src/objects.cc

Issue 11308066: Rename IsAsciiRepresentation (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 1 month 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
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 864 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 if (cs->second()->length() == 0) { 875 if (cs->second()->length() == 0) {
876 return cs->first(); 876 return cs->first();
877 } 877 }
878 // There's little point in putting the flat string in new space if the 878 // There's little point in putting the flat string in new space if the
879 // cons string is in old space. It can never get GCed until there is 879 // cons string is in old space. It can never get GCed until there is
880 // an old space GC. 880 // an old space GC.
881 PretenureFlag tenure = heap->InNewSpace(this) ? pretenure : TENURED; 881 PretenureFlag tenure = heap->InNewSpace(this) ? pretenure : TENURED;
882 int len = length(); 882 int len = length();
883 Object* object; 883 Object* object;
884 String* result; 884 String* result;
885 if (IsAsciiRepresentation()) { 885 if (IsOneByteRepresentation()) {
886 { MaybeObject* maybe_object = heap->AllocateRawAsciiString(len, tenure); 886 { MaybeObject* maybe_object =
887 heap->AllocateRawOneByteString(len, tenure);
887 if (!maybe_object->ToObject(&object)) return maybe_object; 888 if (!maybe_object->ToObject(&object)) return maybe_object;
888 } 889 }
889 result = String::cast(object); 890 result = String::cast(object);
890 String* first = cs->first(); 891 String* first = cs->first();
891 int first_length = first->length(); 892 int first_length = first->length();
892 char* dest = SeqOneByteString::cast(result)->GetChars(); 893 char* dest = SeqOneByteString::cast(result)->GetChars();
893 WriteToFlat(first, dest, 0, first_length); 894 WriteToFlat(first, dest, 0, first_length);
894 String* second = cs->second(); 895 String* second = cs->second();
895 WriteToFlat(second, 896 WriteToFlat(second,
896 dest + first_length, 897 dest + first_length,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 ASSERT(memcmp(smart_chars.start(), 936 ASSERT(memcmp(smart_chars.start(),
936 resource->data(), 937 resource->data(),
937 resource->length() * sizeof(smart_chars[0])) == 0); 938 resource->length() * sizeof(smart_chars[0])) == 0);
938 } 939 }
939 #endif // DEBUG 940 #endif // DEBUG
940 Heap* heap = GetHeap(); 941 Heap* heap = GetHeap();
941 int size = this->Size(); // Byte size of the original string. 942 int size = this->Size(); // Byte size of the original string.
942 if (size < ExternalString::kShortSize) { 943 if (size < ExternalString::kShortSize) {
943 return false; 944 return false;
944 } 945 }
945 bool is_ascii = this->IsAsciiRepresentation(); 946 bool is_ascii = this->IsOneByteRepresentation();
946 bool is_symbol = this->IsSymbol(); 947 bool is_symbol = this->IsSymbol();
947 948
948 // Morph the object to an external string by adjusting the map and 949 // Morph the object to an external string by adjusting the map and
949 // reinitializing the fields. 950 // reinitializing the fields.
950 if (size >= ExternalString::kSize) { 951 if (size >= ExternalString::kSize) {
951 this->set_map_no_write_barrier( 952 this->set_map_no_write_barrier(
952 is_symbol 953 is_symbol
953 ? (is_ascii ? heap->external_symbol_with_ascii_data_map() 954 ? (is_ascii ? heap->external_symbol_with_ascii_data_map()
954 : heap->external_symbol_map()) 955 : heap->external_symbol_map())
955 : (is_ascii ? heap->external_string_with_ascii_data_map() 956 : (is_ascii ? heap->external_string_with_ascii_data_map()
(...skipping 5636 matching lines...) Expand 10 before | Expand all | Expand 10 after
6592 return ToCString(allow_nulls, robust_flag, 0, -1, length_return); 6593 return ToCString(allow_nulls, robust_flag, 0, -1, length_return);
6593 } 6594 }
6594 6595
6595 6596
6596 const uc16* String::GetTwoByteData() { 6597 const uc16* String::GetTwoByteData() {
6597 return GetTwoByteData(0); 6598 return GetTwoByteData(0);
6598 } 6599 }
6599 6600
6600 6601
6601 const uc16* String::GetTwoByteData(unsigned start) { 6602 const uc16* String::GetTwoByteData(unsigned start) {
6602 ASSERT(!IsAsciiRepresentationUnderneath()); 6603 ASSERT(!IsOneByteRepresentationUnderneath());
6603 switch (StringShape(this).representation_tag()) { 6604 switch (StringShape(this).representation_tag()) {
6604 case kSeqStringTag: 6605 case kSeqStringTag:
6605 return SeqTwoByteString::cast(this)->SeqTwoByteStringGetData(start); 6606 return SeqTwoByteString::cast(this)->SeqTwoByteStringGetData(start);
6606 case kExternalStringTag: 6607 case kExternalStringTag:
6607 return ExternalTwoByteString::cast(this)-> 6608 return ExternalTwoByteString::cast(this)->
6608 ExternalTwoByteStringGetData(start); 6609 ExternalTwoByteStringGetData(start);
6609 case kSlicedStringTag: { 6610 case kSlicedStringTag: {
6610 SlicedString* slice = SlicedString::cast(this); 6611 SlicedString* slice = SlicedString::cast(this);
6611 return slice->parent()->GetTwoByteData(start + slice->offset()); 6612 return slice->parent()->GetTwoByteData(start + slice->offset());
6612 } 6613 }
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
6844 ReadBlockBuffer* rbb, 6845 ReadBlockBuffer* rbb,
6845 unsigned* offset_ptr, 6846 unsigned* offset_ptr,
6846 unsigned max_chars) { 6847 unsigned max_chars) {
6847 ASSERT(*offset_ptr <= static_cast<unsigned>(input->length())); 6848 ASSERT(*offset_ptr <= static_cast<unsigned>(input->length()));
6848 if (max_chars == 0) { 6849 if (max_chars == 0) {
6849 rbb->remaining = 0; 6850 rbb->remaining = 0;
6850 return NULL; 6851 return NULL;
6851 } 6852 }
6852 switch (StringShape(input).representation_tag()) { 6853 switch (StringShape(input).representation_tag()) {
6853 case kSeqStringTag: 6854 case kSeqStringTag:
6854 if (input->IsAsciiRepresentation()) { 6855 if (input->IsOneByteRepresentation()) {
6855 SeqOneByteString* str = SeqOneByteString::cast(input); 6856 SeqOneByteString* str = SeqOneByteString::cast(input);
6856 return str->SeqOneByteStringReadBlock(&rbb->remaining, 6857 return str->SeqOneByteStringReadBlock(&rbb->remaining,
6857 offset_ptr, 6858 offset_ptr,
6858 max_chars); 6859 max_chars);
6859 } else { 6860 } else {
6860 SeqTwoByteString* str = SeqTwoByteString::cast(input); 6861 SeqTwoByteString* str = SeqTwoByteString::cast(input);
6861 str->SeqTwoByteStringReadBlockIntoBuffer(rbb, 6862 str->SeqTwoByteStringReadBlockIntoBuffer(rbb,
6862 offset_ptr, 6863 offset_ptr,
6863 max_chars); 6864 max_chars);
6864 return rbb->util_buffer; 6865 return rbb->util_buffer;
6865 } 6866 }
6866 case kConsStringTag: 6867 case kConsStringTag:
6867 return ConsString::cast(input)->ConsStringReadBlock(rbb, 6868 return ConsString::cast(input)->ConsStringReadBlock(rbb,
6868 offset_ptr, 6869 offset_ptr,
6869 max_chars); 6870 max_chars);
6870 case kExternalStringTag: 6871 case kExternalStringTag:
6871 if (input->IsAsciiRepresentation()) { 6872 if (input->IsOneByteRepresentation()) {
6872 return ExternalAsciiString::cast(input)->ExternalAsciiStringReadBlock( 6873 return ExternalAsciiString::cast(input)->ExternalAsciiStringReadBlock(
6873 &rbb->remaining, 6874 &rbb->remaining,
6874 offset_ptr, 6875 offset_ptr,
6875 max_chars); 6876 max_chars);
6876 } else { 6877 } else {
6877 ExternalTwoByteString::cast(input)-> 6878 ExternalTwoByteString::cast(input)->
6878 ExternalTwoByteStringReadBlockIntoBuffer(rbb, 6879 ExternalTwoByteStringReadBlockIntoBuffer(rbb,
6879 offset_ptr, 6880 offset_ptr,
6880 max_chars); 6881 max_chars);
6881 return rbb->util_buffer; 6882 return rbb->util_buffer;
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
6993 // to fill up a buffer. 6994 // to fill up a buffer.
6994 void String::ReadBlockIntoBuffer(String* input, 6995 void String::ReadBlockIntoBuffer(String* input,
6995 ReadBlockBuffer* rbb, 6996 ReadBlockBuffer* rbb,
6996 unsigned* offset_ptr, 6997 unsigned* offset_ptr,
6997 unsigned max_chars) { 6998 unsigned max_chars) {
6998 ASSERT(*offset_ptr <= (unsigned)input->length()); 6999 ASSERT(*offset_ptr <= (unsigned)input->length());
6999 if (max_chars == 0) return; 7000 if (max_chars == 0) return;
7000 7001
7001 switch (StringShape(input).representation_tag()) { 7002 switch (StringShape(input).representation_tag()) {
7002 case kSeqStringTag: 7003 case kSeqStringTag:
7003 if (input->IsAsciiRepresentation()) { 7004 if (input->IsOneByteRepresentation()) {
7004 SeqOneByteString::cast(input)->SeqOneByteStringReadBlockIntoBuffer(rbb, 7005 SeqOneByteString::cast(input)->SeqOneByteStringReadBlockIntoBuffer(rbb,
7005 offset_ptr, 7006 offset_ptr,
7006 max_chars); 7007 max_chars);
7007 return; 7008 return;
7008 } else { 7009 } else {
7009 SeqTwoByteString::cast(input)->SeqTwoByteStringReadBlockIntoBuffer(rbb, 7010 SeqTwoByteString::cast(input)->SeqTwoByteStringReadBlockIntoBuffer(rbb,
7010 offset_ptr, 7011 offset_ptr,
7011 max_chars); 7012 max_chars);
7012 return; 7013 return;
7013 } 7014 }
7014 case kConsStringTag: 7015 case kConsStringTag:
7015 ConsString::cast(input)->ConsStringReadBlockIntoBuffer(rbb, 7016 ConsString::cast(input)->ConsStringReadBlockIntoBuffer(rbb,
7016 offset_ptr, 7017 offset_ptr,
7017 max_chars); 7018 max_chars);
7018 return; 7019 return;
7019 case kExternalStringTag: 7020 case kExternalStringTag:
7020 if (input->IsAsciiRepresentation()) { 7021 if (input->IsOneByteRepresentation()) {
7021 ExternalAsciiString::cast(input)-> 7022 ExternalAsciiString::cast(input)->
7022 ExternalAsciiStringReadBlockIntoBuffer(rbb, offset_ptr, max_chars); 7023 ExternalAsciiStringReadBlockIntoBuffer(rbb, offset_ptr, max_chars);
7023 } else { 7024 } else {
7024 ExternalTwoByteString::cast(input)-> 7025 ExternalTwoByteString::cast(input)->
7025 ExternalTwoByteStringReadBlockIntoBuffer(rbb, 7026 ExternalTwoByteStringReadBlockIntoBuffer(rbb,
7026 offset_ptr, 7027 offset_ptr,
7027 max_chars); 7028 max_chars);
7028 } 7029 }
7029 return; 7030 return;
7030 case kSlicedStringTag: 7031 case kSlicedStringTag:
(...skipping 6917 matching lines...) Expand 10 before | Expand all | Expand 10 after
13948 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); 13949 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER);
13949 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); 13950 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER);
13950 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); 13951 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER);
13951 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); 13952 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER);
13952 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); 13953 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER);
13953 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); 13954 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER);
13954 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); 13955 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER);
13955 } 13956 }
13956 13957
13957 } } // namespace v8::internal 13958 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/objects.h ('k') | src/objects-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698