| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| @abstract |
| @generateCppClass |
| @reserveBitsInInstanceType(6) |
| extern class String extends Name { |
| const length: int32; |
| } |
| |
| @generateCppClass |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class ConsString extends String { |
| first: String; |
| second: String; |
| } |
| |
| @abstract |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class ExternalString extends String { |
| resource: ExternalPointer; |
| resource_data: ExternalPointer; |
| } |
| |
| extern operator '.resource_ptr' macro LoadExternalStringResourcePtr( |
| ExternalString): RawPtr; |
| extern operator '.resource_data_ptr' macro LoadExternalStringResourceDataPtr( |
| ExternalString): RawPtr; |
| |
| @doNotGenerateCast |
| extern class ExternalOneByteString extends ExternalString { |
| } |
| |
| @doNotGenerateCast |
| extern class ExternalTwoByteString extends ExternalString { |
| } |
| |
| @generateCppClass |
| @doNotGenerateCast |
| extern class InternalizedString extends String { |
| } |
| |
| @abstract |
| @generateCppClass |
| @doNotGenerateCast |
| extern class SeqString extends String { |
| } |
| @generateCppClass |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class SeqOneByteString extends SeqString { |
| chars[length]: char8; |
| } |
| @generateCppClass |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class SeqTwoByteString extends SeqString { |
| chars[length]: char16; |
| } |
| |
| @generateCppClass |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class SlicedString extends String { |
| parent: String; |
| offset: Smi; |
| } |
| |
| @generateCppClass |
| @generateBodyDescriptor |
| @doNotGenerateCast |
| extern class ThinString extends String { |
| actual: String; |
| } |
| |
| // A direct string can be accessed directly through CSA without going into the |
| // C++ runtime. See also: ToDirectStringAssembler. |
| type DirectString extends String; |
| |
| @export |
| macro AllocateSeqOneByteString(length: uint32): SeqOneByteString { |
| assert(length <= kStringMaxLength); |
| if (length == 0) return UnsafeCast<SeqOneByteString>(kEmptyString); |
| return new SeqOneByteString{ |
| map: kOneByteStringMap, |
| hash_field: kNameEmptyHashField, |
| length: Signed(length), |
| chars: ...UninitializedIterator {} |
| }; |
| } |
| |
| @export |
| macro AllocateSeqTwoByteString(length: uint32): String { |
| assert(length <= kStringMaxLength); |
| if (length == 0) return kEmptyString; |
| return new SeqTwoByteString{ |
| map: kStringMap, |
| hash_field: kNameEmptyHashField, |
| length: Signed(length), |
| chars: ...UninitializedIterator {} |
| }; |
| } |