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

Side by Side Diff: src/objects.h

Issue 7477045: Tentative implementation of string slices (hidden under the flag --string-slices). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: A few changes after short review by antonm. Created 9 years, 4 months 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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // - CompilationCacheTable 79 // - CompilationCacheTable
80 // - CodeCacheHashTable 80 // - CodeCacheHashTable
81 // - MapCache 81 // - MapCache
82 // - Context 82 // - Context
83 // - JSFunctionResultCache 83 // - JSFunctionResultCache
84 // - SerializedScopeInfo 84 // - SerializedScopeInfo
85 // - String 85 // - String
86 // - SeqString 86 // - SeqString
87 // - SeqAsciiString 87 // - SeqAsciiString
88 // - SeqTwoByteString 88 // - SeqTwoByteString
89 // - SlicedString
89 // - ConsString 90 // - ConsString
90 // - ExternalString 91 // - ExternalString
91 // - ExternalAsciiString 92 // - ExternalAsciiString
92 // - ExternalTwoByteString 93 // - ExternalTwoByteString
93 // - HeapNumber 94 // - HeapNumber
94 // - Code 95 // - Code
95 // - Map 96 // - Map
96 // - Oddball 97 // - Oddball
97 // - Foreign 98 // - Foreign
98 // - SharedFunctionInfo 99 // - SharedFunctionInfo
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 V(ASCII_SYMBOL_TYPE) \ 274 V(ASCII_SYMBOL_TYPE) \
274 V(CONS_SYMBOL_TYPE) \ 275 V(CONS_SYMBOL_TYPE) \
275 V(CONS_ASCII_SYMBOL_TYPE) \ 276 V(CONS_ASCII_SYMBOL_TYPE) \
276 V(EXTERNAL_SYMBOL_TYPE) \ 277 V(EXTERNAL_SYMBOL_TYPE) \
277 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE) \ 278 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE) \
278 V(EXTERNAL_ASCII_SYMBOL_TYPE) \ 279 V(EXTERNAL_ASCII_SYMBOL_TYPE) \
279 V(STRING_TYPE) \ 280 V(STRING_TYPE) \
280 V(ASCII_STRING_TYPE) \ 281 V(ASCII_STRING_TYPE) \
281 V(CONS_STRING_TYPE) \ 282 V(CONS_STRING_TYPE) \
282 V(CONS_ASCII_STRING_TYPE) \ 283 V(CONS_ASCII_STRING_TYPE) \
284 V(SLICED_STRING_TYPE) \
283 V(EXTERNAL_STRING_TYPE) \ 285 V(EXTERNAL_STRING_TYPE) \
284 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE) \ 286 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE) \
285 V(EXTERNAL_ASCII_STRING_TYPE) \ 287 V(EXTERNAL_ASCII_STRING_TYPE) \
286 V(PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \ 288 V(PRIVATE_EXTERNAL_ASCII_STRING_TYPE) \
287 \ 289 \
288 V(MAP_TYPE) \ 290 V(MAP_TYPE) \
289 V(CODE_TYPE) \ 291 V(CODE_TYPE) \
290 V(ODDBALL_TYPE) \ 292 V(ODDBALL_TYPE) \
291 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \ 293 V(JS_GLOBAL_PROPERTY_CELL_TYPE) \
292 \ 294 \
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 ascii_symbol, \ 363 ascii_symbol, \
362 AsciiSymbol) \ 364 AsciiSymbol) \
363 V(CONS_SYMBOL_TYPE, \ 365 V(CONS_SYMBOL_TYPE, \
364 ConsString::kSize, \ 366 ConsString::kSize, \
365 cons_symbol, \ 367 cons_symbol, \
366 ConsSymbol) \ 368 ConsSymbol) \
367 V(CONS_ASCII_SYMBOL_TYPE, \ 369 V(CONS_ASCII_SYMBOL_TYPE, \
368 ConsString::kSize, \ 370 ConsString::kSize, \
369 cons_ascii_symbol, \ 371 cons_ascii_symbol, \
370 ConsAsciiSymbol) \ 372 ConsAsciiSymbol) \
373 V(SLICED_SYMBOL_TYPE, \
374 SlicedString::kSize, \
375 sliced_symbol, \
376 SlicedSymbol) \
377 V(SLICED_ASCII_SYMBOL_TYPE, \
378 SlicedString::kSize, \
379 sliced_ascii_symbol, \
380 SlicedAsciiSymbol) \
371 V(EXTERNAL_SYMBOL_TYPE, \ 381 V(EXTERNAL_SYMBOL_TYPE, \
372 ExternalTwoByteString::kSize, \ 382 ExternalTwoByteString::kSize, \
373 external_symbol, \ 383 external_symbol, \
374 ExternalSymbol) \ 384 ExternalSymbol) \
375 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \ 385 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \
376 ExternalTwoByteString::kSize, \ 386 ExternalTwoByteString::kSize, \
377 external_symbol_with_ascii_data, \ 387 external_symbol_with_ascii_data, \
378 ExternalSymbolWithAsciiData) \ 388 ExternalSymbolWithAsciiData) \
379 V(EXTERNAL_ASCII_SYMBOL_TYPE, \ 389 V(EXTERNAL_ASCII_SYMBOL_TYPE, \
380 ExternalAsciiString::kSize, \ 390 ExternalAsciiString::kSize, \
381 external_ascii_symbol, \ 391 external_ascii_symbol, \
382 ExternalAsciiSymbol) \ 392 ExternalAsciiSymbol) \
383 V(STRING_TYPE, \ 393 V(STRING_TYPE, \
384 kVariableSizeSentinel, \ 394 kVariableSizeSentinel, \
385 string, \ 395 string, \
386 String) \ 396 String) \
387 V(ASCII_STRING_TYPE, \ 397 V(ASCII_STRING_TYPE, \
388 kVariableSizeSentinel, \ 398 kVariableSizeSentinel, \
389 ascii_string, \ 399 ascii_string, \
390 AsciiString) \ 400 AsciiString) \
391 V(CONS_STRING_TYPE, \ 401 V(CONS_STRING_TYPE, \
392 ConsString::kSize, \ 402 ConsString::kSize, \
393 cons_string, \ 403 cons_string, \
394 ConsString) \ 404 ConsString) \
395 V(CONS_ASCII_STRING_TYPE, \ 405 V(CONS_ASCII_STRING_TYPE, \
396 ConsString::kSize, \ 406 ConsString::kSize, \
397 cons_ascii_string, \ 407 cons_ascii_string, \
398 ConsAsciiString) \ 408 ConsAsciiString) \
409 V(SLICED_STRING_TYPE, \
410 SlicedString::kSize, \
411 sliced_string, \
412 SlicedString) \
413 V(SLICED_ASCII_STRING_TYPE, \
414 SlicedString::kSize, \
415 sliced_ascii_string, \
416 SlicedAsciiString) \
399 V(EXTERNAL_STRING_TYPE, \ 417 V(EXTERNAL_STRING_TYPE, \
400 ExternalTwoByteString::kSize, \ 418 ExternalTwoByteString::kSize, \
401 external_string, \ 419 external_string, \
402 ExternalString) \ 420 ExternalString) \
403 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \ 421 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \
404 ExternalTwoByteString::kSize, \ 422 ExternalTwoByteString::kSize, \
405 external_string_with_ascii_data, \ 423 external_string_with_ascii_data, \
406 ExternalStringWithAsciiData) \ 424 ExternalStringWithAsciiData) \
407 V(EXTERNAL_ASCII_STRING_TYPE, \ 425 V(EXTERNAL_ASCII_STRING_TYPE, \
408 ExternalAsciiString::kSize, \ 426 ExternalAsciiString::kSize, \
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 const uint32_t kStringEncodingMask = 0x4; 480 const uint32_t kStringEncodingMask = 0x4;
463 const uint32_t kTwoByteStringTag = 0x0; 481 const uint32_t kTwoByteStringTag = 0x0;
464 const uint32_t kAsciiStringTag = 0x4; 482 const uint32_t kAsciiStringTag = 0x4;
465 483
466 // If bit 7 is clear, the low-order 2 bits indicate the representation 484 // If bit 7 is clear, the low-order 2 bits indicate the representation
467 // of the string. 485 // of the string.
468 const uint32_t kStringRepresentationMask = 0x03; 486 const uint32_t kStringRepresentationMask = 0x03;
469 enum StringRepresentationTag { 487 enum StringRepresentationTag {
470 kSeqStringTag = 0x0, 488 kSeqStringTag = 0x0,
471 kConsStringTag = 0x1, 489 kConsStringTag = 0x1,
472 kExternalStringTag = 0x2 490 kExternalStringTag = 0x2,
491 kSlicedStringTag = 0x3
473 }; 492 };
474 const uint32_t kIsConsStringMask = 0x1; 493 const uint32_t kIsIndirectStringMask = 0x1;
494 const uint32_t kIsIndirectStringTag = 0x1;
495 STATIC_ASSERT(
496 (kConsStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
497 STATIC_ASSERT(
498 (kSlicedStringTag & kIsIndirectStringMask) == kIsIndirectStringTag);
antonm 2011/07/27 14:04:49 sorry, up to you, but I would code it like: bool
Yang 2011/07/28 15:43:06 There is only one place where this tag is actually
475 499
476 // If bit 7 is clear, then bit 3 indicates whether this two-byte 500 // If bit 7 is clear, then bit 3 indicates whether this two-byte
477 // string actually contains ascii data. 501 // string actually contains ascii data.
478 const uint32_t kAsciiDataHintMask = 0x08; 502 const uint32_t kAsciiDataHintMask = 0x08;
479 const uint32_t kAsciiDataHintTag = 0x08; 503 const uint32_t kAsciiDataHintTag = 0x08;
480 504
481 505
482 // A ConsString with an empty string as the right side is a candidate 506 // A ConsString with an empty string as the right side is a candidate
483 // for being shortcut by the garbage collector unless it is a 507 // for being shortcut by the garbage collector unless it is a
484 // symbol. It's not common to have non-flat symbols, so we do not 508 // symbol. It's not common to have non-flat symbols, so we do not
485 // shortcut them thereby avoiding turning symbols into strings. See 509 // shortcut them thereby avoiding turning symbols into strings. See
486 // heap.cc and mark-compact.cc. 510 // heap.cc and mark-compact.cc.
487 const uint32_t kShortcutTypeMask = 511 const uint32_t kShortcutTypeMask =
488 kIsNotStringMask | 512 kIsNotStringMask |
489 kIsSymbolMask | 513 kIsSymbolMask |
490 kStringRepresentationMask; 514 kStringRepresentationMask;
491 const uint32_t kShortcutTypeTag = kConsStringTag; 515 const uint32_t kShortcutTypeTag = kConsStringTag;
492 516
493 517
494 enum InstanceType { 518 enum InstanceType {
495 // String types. 519 // String types.
496 SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kSeqStringTag, 520 SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kSeqStringTag,
497 ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kSeqStringTag, 521 ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kSeqStringTag,
498 CONS_SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kConsStringTag, 522 CONS_SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kConsStringTag,
499 CONS_ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kConsStringTag, 523 CONS_ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kConsStringTag,
524 SLICED_SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kSlicedStringTag,
antonm 2011/07/27 14:04:49 Do we want sliced symbols?
Rico 2011/07/28 06:49:50 I am a little concerned about this as well, this c
525 SLICED_ASCII_SYMBOL_TYPE = kAsciiStringTag | kSymbolTag | kSlicedStringTag,
500 EXTERNAL_SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kExternalStringTag, 526 EXTERNAL_SYMBOL_TYPE = kTwoByteStringTag | kSymbolTag | kExternalStringTag,
501 EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE = 527 EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE =
502 kTwoByteStringTag | kSymbolTag | kExternalStringTag | kAsciiDataHintTag, 528 kTwoByteStringTag | kSymbolTag | kExternalStringTag | kAsciiDataHintTag,
503 EXTERNAL_ASCII_SYMBOL_TYPE = 529 EXTERNAL_ASCII_SYMBOL_TYPE =
504 kAsciiStringTag | kSymbolTag | kExternalStringTag, 530 kAsciiStringTag | kSymbolTag | kExternalStringTag,
505 STRING_TYPE = kTwoByteStringTag | kSeqStringTag, 531 STRING_TYPE = kTwoByteStringTag | kSeqStringTag,
506 ASCII_STRING_TYPE = kAsciiStringTag | kSeqStringTag, 532 ASCII_STRING_TYPE = kAsciiStringTag | kSeqStringTag,
507 CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag, 533 CONS_STRING_TYPE = kTwoByteStringTag | kConsStringTag,
508 CONS_ASCII_STRING_TYPE = kAsciiStringTag | kConsStringTag, 534 CONS_ASCII_STRING_TYPE = kAsciiStringTag | kConsStringTag,
535 SLICED_STRING_TYPE = kTwoByteStringTag | kSlicedStringTag,
536 SLICED_ASCII_STRING_TYPE = kAsciiStringTag | kSlicedStringTag,
509 EXTERNAL_STRING_TYPE = kTwoByteStringTag | kExternalStringTag, 537 EXTERNAL_STRING_TYPE = kTwoByteStringTag | kExternalStringTag,
510 EXTERNAL_STRING_WITH_ASCII_DATA_TYPE = 538 EXTERNAL_STRING_WITH_ASCII_DATA_TYPE =
511 kTwoByteStringTag | kExternalStringTag | kAsciiDataHintTag, 539 kTwoByteStringTag | kExternalStringTag | kAsciiDataHintTag,
512 // LAST_STRING_TYPE 540 // LAST_STRING_TYPE
513 EXTERNAL_ASCII_STRING_TYPE = kAsciiStringTag | kExternalStringTag, 541 EXTERNAL_ASCII_STRING_TYPE = kAsciiStringTag | kExternalStringTag,
514 PRIVATE_EXTERNAL_ASCII_STRING_TYPE = EXTERNAL_ASCII_STRING_TYPE, 542 PRIVATE_EXTERNAL_ASCII_STRING_TYPE = EXTERNAL_ASCII_STRING_TYPE,
515 543
516 // Objects allocated in their own spaces (never in new space). 544 // Objects allocated in their own spaces (never in new space).
517 MAP_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE 545 MAP_TYPE = kNotStringTag, // FIRST_NONSTRING_TYPE
518 CODE_TYPE, 546 CODE_TYPE,
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 V(HeapObject) \ 730 V(HeapObject) \
703 V(Number) \ 731 V(Number) \
704 732
705 #define HEAP_OBJECT_TYPE_LIST(V) \ 733 #define HEAP_OBJECT_TYPE_LIST(V) \
706 V(HeapNumber) \ 734 V(HeapNumber) \
707 V(String) \ 735 V(String) \
708 V(Symbol) \ 736 V(Symbol) \
709 V(SeqString) \ 737 V(SeqString) \
710 V(ExternalString) \ 738 V(ExternalString) \
711 V(ConsString) \ 739 V(ConsString) \
740 V(SlicedString) \
712 V(ExternalTwoByteString) \ 741 V(ExternalTwoByteString) \
713 V(ExternalAsciiString) \ 742 V(ExternalAsciiString) \
714 V(SeqTwoByteString) \ 743 V(SeqTwoByteString) \
715 V(SeqAsciiString) \ 744 V(SeqAsciiString) \
716 \ 745 \
717 V(ExternalArray) \ 746 V(ExternalArray) \
718 V(ExternalByteArray) \ 747 V(ExternalByteArray) \
719 V(ExternalUnsignedByteArray) \ 748 V(ExternalUnsignedByteArray) \
720 V(ExternalShortArray) \ 749 V(ExternalShortArray) \
721 V(ExternalUnsignedShortArray) \ 750 V(ExternalUnsignedShortArray) \
(...skipping 4980 matching lines...) Expand 10 before | Expand all | Expand 10 after
5702 // prone and so we no longer put StringShapes in variables unless there is a 5731 // prone and so we no longer put StringShapes in variables unless there is a
5703 // concrete performance benefit at that particular point in the code. 5732 // concrete performance benefit at that particular point in the code.
5704 class StringShape BASE_EMBEDDED { 5733 class StringShape BASE_EMBEDDED {
5705 public: 5734 public:
5706 inline explicit StringShape(String* s); 5735 inline explicit StringShape(String* s);
5707 inline explicit StringShape(Map* s); 5736 inline explicit StringShape(Map* s);
5708 inline explicit StringShape(InstanceType t); 5737 inline explicit StringShape(InstanceType t);
5709 inline bool IsSequential(); 5738 inline bool IsSequential();
5710 inline bool IsExternal(); 5739 inline bool IsExternal();
5711 inline bool IsCons(); 5740 inline bool IsCons();
5741 inline bool IsSliced();
5712 inline bool IsExternalAscii(); 5742 inline bool IsExternalAscii();
5713 inline bool IsExternalTwoByte(); 5743 inline bool IsExternalTwoByte();
5714 inline bool IsSequentialAscii(); 5744 inline bool IsSequentialAscii();
5715 inline bool IsSequentialTwoByte(); 5745 inline bool IsSequentialTwoByte();
5716 inline bool IsSymbol(); 5746 inline bool IsSymbol();
5717 inline StringRepresentationTag representation_tag(); 5747 inline StringRepresentationTag representation_tag();
5718 inline uint32_t full_representation_tag(); 5748 inline uint32_t full_representation_tag();
5719 inline uint32_t size_tag(); 5749 inline uint32_t size_tag();
5720 #ifdef DEBUG 5750 #ifdef DEBUG
5721 inline uint32_t type() { return type_; } 5751 inline uint32_t type() { return type_; }
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
5874 #ifdef OBJECT_PRINT 5904 #ifdef OBJECT_PRINT
5875 inline void StringPrint() { 5905 inline void StringPrint() {
5876 StringPrint(stdout); 5906 StringPrint(stdout);
5877 } 5907 }
5878 void StringPrint(FILE* out); 5908 void StringPrint(FILE* out);
5879 #endif 5909 #endif
5880 #ifdef DEBUG 5910 #ifdef DEBUG
5881 void StringVerify(); 5911 void StringVerify();
5882 #endif 5912 #endif
5883 inline bool IsFlat(); 5913 inline bool IsFlat();
5914 inline bool IsIndirect();
5884 5915
5885 // Layout description. 5916 // Layout description.
5886 static const int kLengthOffset = HeapObject::kHeaderSize; 5917 static const int kLengthOffset = HeapObject::kHeaderSize;
5887 static const int kHashFieldOffset = kLengthOffset + kPointerSize; 5918 static const int kHashFieldOffset = kLengthOffset + kPointerSize;
5888 static const int kSize = kHashFieldOffset + kPointerSize; 5919 static const int kSize = kHashFieldOffset + kPointerSize;
5889 5920
5890 // Maximum number of characters to consider when trying to convert a string 5921 // Maximum number of characters to consider when trying to convert a string
5891 // value into an array index. 5922 // value into an array index.
5892 static const int kMaxArrayIndexSize = 10; 5923 static const int kMaxArrayIndexSize = 10;
5893 5924
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
6221 static const int kMinLength = 13; 6252 static const int kMinLength = 13;
6222 6253
6223 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> 6254 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize>
6224 BodyDescriptor; 6255 BodyDescriptor;
6225 6256
6226 private: 6257 private:
6227 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); 6258 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString);
6228 }; 6259 };
6229 6260
6230 6261
6262 class SlicedString: public String {
6263 public:
6264
6265 inline String* parent();
6266 inline void set_parent(String* parent);
6267 inline int offset();
6268 inline void set_offset(int offset);
6269
6270 // Dispatched behavior.
6271 uint16_t SlicedStringGet(int index);
6272
6273 // Casting.
6274 static inline SlicedString* cast(Object* obj);
6275
6276 // Layout description.
6277 static const int kParentOffset = POINTER_SIZE_ALIGN(String::kSize);
6278 static const int kOffsetOffset = kParentOffset + kPointerSize;
6279 static const int kSize = kOffsetOffset + kPointerSize;
6280
6281 // Support for StringInputBuffer
6282 inline const unibrow::byte* SlicedStringReadBlock(ReadBlockBuffer* buffer,
6283 unsigned* offset_ptr,
6284 unsigned chars);
6285 inline void SlicedStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
6286 unsigned* offset_ptr,
6287 unsigned chars);
6288 // Minimum length for a sliced string.
6289 static const int kMinLength = 13;
6290
6291 typedef FixedBodyDescriptor<kParentOffset,
6292 kOffsetOffset + kPointerSize, kSize>
6293 BodyDescriptor;
6294
6295 private:
6296 DISALLOW_IMPLICIT_CONSTRUCTORS(SlicedString);
6297 };
6298
6299
6231 // The ExternalString class describes string values that are backed by 6300 // The ExternalString class describes string values that are backed by
6232 // a string resource that lies outside the V8 heap. ExternalStrings 6301 // a string resource that lies outside the V8 heap. ExternalStrings
6233 // consist of the length field common to all strings, a pointer to the 6302 // consist of the length field common to all strings, a pointer to the
6234 // external resource. It is important to ensure (externally) that the 6303 // external resource. It is important to ensure (externally) that the
6235 // resource is not deallocated while the ExternalString is live in the 6304 // resource is not deallocated while the ExternalString is live in the
6236 // V8 heap. 6305 // V8 heap.
6237 // 6306 //
6238 // The API expects that all ExternalStrings are created through the 6307 // The API expects that all ExternalStrings are created through the
6239 // API. Therefore, ExternalStrings should not be used internally. 6308 // API. Therefore, ExternalStrings should not be used internally.
6240 class ExternalString: public String { 6309 class ExternalString: public String {
(...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after
7203 } else { 7272 } else {
7204 value &= ~(1 << bit_position); 7273 value &= ~(1 << bit_position);
7205 } 7274 }
7206 return value; 7275 return value;
7207 } 7276 }
7208 }; 7277 };
7209 7278
7210 } } // namespace v8::internal 7279 } } // namespace v8::internal
7211 7280
7212 #endif // V8_OBJECTS_H_ 7281 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698