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

Side by Side Diff: src/objects.h

Issue 11085070: Enable --verify-heap in release mode (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: A couple of verification functions weren't behind the new #define. Created 8 years, 2 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 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 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 InstanceType type; 724 InstanceType type;
725 Object* ptr; 725 Object* ptr;
726 const char* str; 726 const char* str;
727 double number; 727 double number;
728 }; 728 };
729 729
730 730
731 // A template-ized version of the IsXXX functions. 731 // A template-ized version of the IsXXX functions.
732 template <class C> static inline bool Is(Object* obj); 732 template <class C> static inline bool Is(Object* obj);
733 733
734 #ifdef VERIFY_HEAP
735 #define DECLARE_VERIFIER(Name) void Name##Verify();
736 #else
737 #define DECLARE_VERIFIER(Name)
738 #endif
734 739
735 class MaybeObject BASE_EMBEDDED { 740 class MaybeObject BASE_EMBEDDED {
736 public: 741 public:
737 inline bool IsFailure(); 742 inline bool IsFailure();
738 inline bool IsRetryAfterGC(); 743 inline bool IsRetryAfterGC();
739 inline bool IsOutOfMemory(); 744 inline bool IsOutOfMemory();
740 inline bool IsException(); 745 inline bool IsException();
741 INLINE(bool IsTheHole()); 746 INLINE(bool IsTheHole());
742 inline bool ToObject(Object** obj) { 747 inline bool ToObject(Object** obj) {
743 if (IsFailure()) return false; 748 if (IsFailure()) return false;
(...skipping 24 matching lines...) Expand all
768 // Prints this object with details. 773 // Prints this object with details.
769 inline void Print() { 774 inline void Print() {
770 Print(stdout); 775 Print(stdout);
771 } 776 }
772 inline void PrintLn() { 777 inline void PrintLn() {
773 PrintLn(stdout); 778 PrintLn(stdout);
774 } 779 }
775 void Print(FILE* out); 780 void Print(FILE* out);
776 void PrintLn(FILE* out); 781 void PrintLn(FILE* out);
777 #endif 782 #endif
778 #ifdef DEBUG 783 #ifdef VERIFY_HEAP
779 // Verifies the object. 784 // Verifies the object.
780 void Verify(); 785 void Verify();
781 #endif 786 #endif
782 }; 787 };
783 788
784 789
785 #define OBJECT_TYPE_LIST(V) \ 790 #define OBJECT_TYPE_LIST(V) \
786 V(Smi) \ 791 V(Smi) \
787 V(HeapObject) \ 792 V(HeapObject) \
788 V(Number) \ 793 V(Number) \
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 bool SameValue(Object* other); 980 bool SameValue(Object* other);
976 981
977 // Tries to convert an object to an array index. Returns true and sets 982 // Tries to convert an object to an array index. Returns true and sets
978 // the output parameter if it succeeds. 983 // the output parameter if it succeeds.
979 inline bool ToArrayIndex(uint32_t* index); 984 inline bool ToArrayIndex(uint32_t* index);
980 985
981 // Returns true if this is a JSValue containing a string and the index is 986 // Returns true if this is a JSValue containing a string and the index is
982 // < the length of the string. Used to implement [] on strings. 987 // < the length of the string. Used to implement [] on strings.
983 inline bool IsStringObjectWithCharacterAt(uint32_t index); 988 inline bool IsStringObjectWithCharacterAt(uint32_t index);
984 989
985 #ifdef DEBUG 990 #ifdef VERIFY_HEAP
986 // Verify a pointer is a valid object pointer. 991 // Verify a pointer is a valid object pointer.
987 static void VerifyPointer(Object* p); 992 static void VerifyPointer(Object* p);
988 #endif 993 #endif
989 994
990 inline void VerifyApiCallResultType(); 995 inline void VerifyApiCallResultType();
991 996
992 // Prints this object without details. 997 // Prints this object without details.
993 inline void ShortPrint() { 998 inline void ShortPrint() {
994 ShortPrint(stdout); 999 ShortPrint(stdout);
995 } 1000 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 1035
1031 // Casting. 1036 // Casting.
1032 static inline Smi* cast(Object* object); 1037 static inline Smi* cast(Object* object);
1033 1038
1034 // Dispatched behavior. 1039 // Dispatched behavior.
1035 inline void SmiPrint() { 1040 inline void SmiPrint() {
1036 SmiPrint(stdout); 1041 SmiPrint(stdout);
1037 } 1042 }
1038 void SmiPrint(FILE* out); 1043 void SmiPrint(FILE* out);
1039 void SmiPrint(StringStream* accumulator); 1044 void SmiPrint(StringStream* accumulator);
1040 #ifdef DEBUG 1045
1041 void SmiVerify(); 1046 DECLARE_VERIFIER(Smi)
1042 #endif
1043 1047
1044 static const int kMinValue = 1048 static const int kMinValue =
1045 (static_cast<unsigned int>(-1)) << (kSmiValueSize - 1); 1049 (static_cast<unsigned int>(-1)) << (kSmiValueSize - 1);
1046 static const int kMaxValue = -(kMinValue + 1); 1050 static const int kMaxValue = -(kMinValue + 1);
1047 1051
1048 private: 1052 private:
1049 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi); 1053 DISALLOW_IMPLICIT_CONSTRUCTORS(Smi);
1050 }; 1054 };
1051 1055
1052 1056
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 static inline Failure* OutOfMemoryException(); 1107 static inline Failure* OutOfMemoryException();
1104 // Casting. 1108 // Casting.
1105 static inline Failure* cast(MaybeObject* object); 1109 static inline Failure* cast(MaybeObject* object);
1106 1110
1107 // Dispatched behavior. 1111 // Dispatched behavior.
1108 inline void FailurePrint() { 1112 inline void FailurePrint() {
1109 FailurePrint(stdout); 1113 FailurePrint(stdout);
1110 } 1114 }
1111 void FailurePrint(FILE* out); 1115 void FailurePrint(FILE* out);
1112 void FailurePrint(StringStream* accumulator); 1116 void FailurePrint(StringStream* accumulator);
1113 #ifdef DEBUG 1117
1114 void FailureVerify(); 1118 DECLARE_VERIFIER(Failure)
1115 #endif
1116 1119
1117 private: 1120 private:
1118 inline intptr_t value() const; 1121 inline intptr_t value() const;
1119 static inline Failure* Construct(Type type, intptr_t value = 0); 1122 static inline Failure* Construct(Type type, intptr_t value = 0);
1120 1123
1121 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure); 1124 DISALLOW_IMPLICIT_CONSTRUCTORS(Failure);
1122 }; 1125 };
1123 1126
1124 1127
1125 // Heap objects typically have a map pointer in their first word. However, 1128 // Heap objects typically have a map pointer in their first word. However,
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 // Dispatched behavior. 1240 // Dispatched behavior.
1238 void HeapObjectShortPrint(StringStream* accumulator); 1241 void HeapObjectShortPrint(StringStream* accumulator);
1239 #ifdef OBJECT_PRINT 1242 #ifdef OBJECT_PRINT
1240 inline void HeapObjectPrint() { 1243 inline void HeapObjectPrint() {
1241 HeapObjectPrint(stdout); 1244 HeapObjectPrint(stdout);
1242 } 1245 }
1243 void HeapObjectPrint(FILE* out); 1246 void HeapObjectPrint(FILE* out);
1244 void PrintHeader(FILE* out, const char* id); 1247 void PrintHeader(FILE* out, const char* id);
1245 #endif 1248 #endif
1246 1249
1247 #ifdef DEBUG 1250
Michael Starzinger 2012/10/12 10:53:16 Dropping these two newlines would be consistent wi
mvstanton1 2012/10/12 11:16:27 Done.
1248 void HeapObjectVerify(); 1251 DECLARE_VERIFIER(HeapObject)
1252 #ifdef VERIFY_HEAP
1249 inline void VerifyObjectField(int offset); 1253 inline void VerifyObjectField(int offset);
1250 inline void VerifySmiField(int offset); 1254 inline void VerifySmiField(int offset);
1251 1255
1252 // Verify a pointer is a valid HeapObject pointer that points to object 1256 // Verify a pointer is a valid HeapObject pointer that points to object
1253 // areas in the heap. 1257 // areas in the heap.
1254 static void VerifyHeapPointer(Object* p); 1258 static void VerifyHeapPointer(Object* p);
1255 #endif 1259 #endif
1256 1260
1257 // Layout description. 1261 // Layout description.
1258 // First field in a heap object is map. 1262 // First field in a heap object is map.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1324 // Casting. 1328 // Casting.
1325 static inline HeapNumber* cast(Object* obj); 1329 static inline HeapNumber* cast(Object* obj);
1326 1330
1327 // Dispatched behavior. 1331 // Dispatched behavior.
1328 Object* HeapNumberToBoolean(); 1332 Object* HeapNumberToBoolean();
1329 inline void HeapNumberPrint() { 1333 inline void HeapNumberPrint() {
1330 HeapNumberPrint(stdout); 1334 HeapNumberPrint(stdout);
1331 } 1335 }
1332 void HeapNumberPrint(FILE* out); 1336 void HeapNumberPrint(FILE* out);
1333 void HeapNumberPrint(StringStream* accumulator); 1337 void HeapNumberPrint(StringStream* accumulator);
1334 #ifdef DEBUG 1338 DECLARE_VERIFIER(HeapNumber)
1335 void HeapNumberVerify();
1336 #endif
1337 1339
1338 inline int get_exponent(); 1340 inline int get_exponent();
1339 inline int get_sign(); 1341 inline int get_sign();
1340 1342
1341 // Layout description. 1343 // Layout description.
1342 static const int kValueOffset = HeapObject::kHeaderSize; 1344 static const int kValueOffset = HeapObject::kHeaderSize;
1343 // IEEE doubles are two 32 bit words. The first is just mantissa, the second 1345 // IEEE doubles are two 32 bit words. The first is just mantissa, the second
1344 // is a mixture of sign, exponent and mantissa. Our current platforms are all 1346 // is a mixture of sign, exponent and mantissa. Our current platforms are all
1345 // little endian apart from non-EABI arm which is little endian with big 1347 // little endian apart from non-EABI arm which is little endian with big
1346 // endian floating point word ordering! 1348 // endian floating point word ordering!
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
2071 2073
2072 2074
2073 // Dispatched behavior. 2075 // Dispatched behavior.
2074 void JSObjectShortPrint(StringStream* accumulator); 2076 void JSObjectShortPrint(StringStream* accumulator);
2075 #ifdef OBJECT_PRINT 2077 #ifdef OBJECT_PRINT
2076 inline void JSObjectPrint() { 2078 inline void JSObjectPrint() {
2077 JSObjectPrint(stdout); 2079 JSObjectPrint(stdout);
2078 } 2080 }
2079 void JSObjectPrint(FILE* out); 2081 void JSObjectPrint(FILE* out);
2080 #endif 2082 #endif
2081 #ifdef DEBUG 2083 DECLARE_VERIFIER(JSObject)
2082 void JSObjectVerify();
2083 #endif
2084 #ifdef OBJECT_PRINT 2084 #ifdef OBJECT_PRINT
2085 inline void PrintProperties() { 2085 inline void PrintProperties() {
2086 PrintProperties(stdout); 2086 PrintProperties(stdout);
2087 } 2087 }
2088 void PrintProperties(FILE* out); 2088 void PrintProperties(FILE* out);
2089 2089
2090 inline void PrintElements() { 2090 inline void PrintElements() {
2091 PrintElements(stdout); 2091 PrintElements(stdout);
2092 } 2092 }
2093 void PrintElements(FILE* out); 2093 void PrintElements(FILE* out);
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
2355 // Maximally allowed length of a FixedArray. 2355 // Maximally allowed length of a FixedArray.
2356 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize; 2356 static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize;
2357 2357
2358 // Dispatched behavior. 2358 // Dispatched behavior.
2359 #ifdef OBJECT_PRINT 2359 #ifdef OBJECT_PRINT
2360 inline void FixedArrayPrint() { 2360 inline void FixedArrayPrint() {
2361 FixedArrayPrint(stdout); 2361 FixedArrayPrint(stdout);
2362 } 2362 }
2363 void FixedArrayPrint(FILE* out); 2363 void FixedArrayPrint(FILE* out);
2364 #endif 2364 #endif
2365 DECLARE_VERIFIER(FixedArray)
2365 #ifdef DEBUG 2366 #ifdef DEBUG
2366 void FixedArrayVerify();
2367 // Checks if two FixedArrays have identical contents. 2367 // Checks if two FixedArrays have identical contents.
2368 bool IsEqualTo(FixedArray* other); 2368 bool IsEqualTo(FixedArray* other);
2369 #endif 2369 #endif
2370 2370
2371 // Swap two elements in a pair of arrays. If this array and the 2371 // Swap two elements in a pair of arrays. If this array and the
2372 // numbers array are the same object, the elements are only swapped 2372 // numbers array are the same object, the elements are only swapped
2373 // once. 2373 // once.
2374 void SwapPairs(FixedArray* numbers, int i, int j); 2374 void SwapPairs(FixedArray* numbers, int i, int j);
2375 2375
2376 // Sort prefix of this array and the numbers array as pairs wrt. the 2376 // Sort prefix of this array and the numbers array as pairs wrt. the
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 // Maximally allowed length of a FixedArray. 2442 // Maximally allowed length of a FixedArray.
2443 static const int kMaxLength = (kMaxSize - kHeaderSize) / kDoubleSize; 2443 static const int kMaxLength = (kMaxSize - kHeaderSize) / kDoubleSize;
2444 2444
2445 // Dispatched behavior. 2445 // Dispatched behavior.
2446 #ifdef OBJECT_PRINT 2446 #ifdef OBJECT_PRINT
2447 inline void FixedDoubleArrayPrint() { 2447 inline void FixedDoubleArrayPrint() {
2448 FixedDoubleArrayPrint(stdout); 2448 FixedDoubleArrayPrint(stdout);
2449 } 2449 }
2450 void FixedDoubleArrayPrint(FILE* out); 2450 void FixedDoubleArrayPrint(FILE* out);
2451 #endif 2451 #endif
2452 2452
Michael Starzinger 2012/10/12 10:53:16 Dropping this newline would be consistent with the
2453 #ifdef DEBUG 2453 DECLARE_VERIFIER(FixedDoubleArray)
2454 void FixedDoubleArrayVerify();
2455 #endif
2456 2454
2457 private: 2455 private:
2458 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray); 2456 DISALLOW_IMPLICIT_CONSTRUCTORS(FixedDoubleArray);
2459 }; 2457 };
2460 2458
2461 2459
2462 // DescriptorArrays are fixed arrays used to hold instance descriptors. 2460 // DescriptorArrays are fixed arrays used to hold instance descriptors.
2463 // The format of the these objects is: 2461 // The format of the these objects is:
2464 // [0]: Either Smi(0) if uninitialized, or a pointer to small fixed array: 2462 // [0]: Either Smi(0) if uninitialized, or a pointer to small fixed array:
2465 // [0]: pointer to fixed array with enum cache 2463 // [0]: pointer to fixed array with enum cache
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
3380 inline void Clear(); 3378 inline void Clear();
3381 3379
3382 inline int size(); 3380 inline int size();
3383 inline void set_size(int size); 3381 inline void set_size(int size);
3384 inline int finger_index(); 3382 inline int finger_index();
3385 inline void set_finger_index(int finger_index); 3383 inline void set_finger_index(int finger_index);
3386 3384
3387 // Casting 3385 // Casting
3388 static inline JSFunctionResultCache* cast(Object* obj); 3386 static inline JSFunctionResultCache* cast(Object* obj);
3389 3387
3390 #ifdef DEBUG 3388 DECLARE_VERIFIER(JSFunctionResultCache)
3391 void JSFunctionResultCacheVerify();
3392 #endif
3393 }; 3389 };
3394 3390
3395 3391
3396 // ScopeInfo represents information about different scopes of a source 3392 // ScopeInfo represents information about different scopes of a source
3397 // program and the allocation of the scope's variables. Scope information 3393 // program and the allocation of the scope's variables. Scope information
3398 // is stored in a compressed form in ScopeInfo objects and is used 3394 // is stored in a compressed form in ScopeInfo objects and is used
3399 // at runtime (stack dumps, deoptimization, etc.). 3395 // at runtime (stack dumps, deoptimization, etc.).
3400 3396
3401 // This object provides quick access to scope info details for runtime 3397 // This object provides quick access to scope info details for runtime
3402 // routines. 3398 // routines.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
3602 static const int kEntries = 64; 3598 static const int kEntries = 64;
3603 3599
3604 MUST_USE_RESULT MaybeObject* Get(JSObject* object, 3600 MUST_USE_RESULT MaybeObject* Get(JSObject* object,
3605 PropertyNormalizationMode mode); 3601 PropertyNormalizationMode mode);
3606 3602
3607 void Clear(); 3603 void Clear();
3608 3604
3609 // Casting 3605 // Casting
3610 static inline NormalizedMapCache* cast(Object* obj); 3606 static inline NormalizedMapCache* cast(Object* obj);
3611 3607
3612 #ifdef DEBUG 3608 DECLARE_VERIFIER(NormalizedMapCache)
3613 void NormalizedMapCacheVerify();
3614 #endif
3615 }; 3609 };
3616 3610
3617 3611
3618 // ByteArray represents fixed sized byte arrays. Used for the relocation info 3612 // ByteArray represents fixed sized byte arrays. Used for the relocation info
3619 // that is attached to code objects. 3613 // that is attached to code objects.
3620 class ByteArray: public FixedArrayBase { 3614 class ByteArray: public FixedArrayBase {
3621 public: 3615 public:
3622 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); } 3616 inline int Size() { return RoundUp(length() + kHeaderSize, kPointerSize); }
3623 3617
3624 // Setter and getter. 3618 // Setter and getter.
(...skipping 28 matching lines...) Expand all
3653 // Dispatched behavior. 3647 // Dispatched behavior.
3654 inline int ByteArraySize() { 3648 inline int ByteArraySize() {
3655 return SizeFor(this->length()); 3649 return SizeFor(this->length());
3656 } 3650 }
3657 #ifdef OBJECT_PRINT 3651 #ifdef OBJECT_PRINT
3658 inline void ByteArrayPrint() { 3652 inline void ByteArrayPrint() {
3659 ByteArrayPrint(stdout); 3653 ByteArrayPrint(stdout);
3660 } 3654 }
3661 void ByteArrayPrint(FILE* out); 3655 void ByteArrayPrint(FILE* out);
3662 #endif 3656 #endif
3663 #ifdef DEBUG 3657 DECLARE_VERIFIER(ByteArray)
3664 void ByteArrayVerify();
3665 #endif
3666 3658
3667 // Layout description. 3659 // Layout description.
3668 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); 3660 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
3669 3661
3670 // Maximal memory consumption for a single ByteArray. 3662 // Maximal memory consumption for a single ByteArray.
3671 static const int kMaxSize = 512 * MB; 3663 static const int kMaxSize = 512 * MB;
3672 // Maximal length of a single ByteArray. 3664 // Maximal length of a single ByteArray.
3673 static const int kMaxLength = kMaxSize - kHeaderSize; 3665 static const int kMaxLength = kMaxSize - kHeaderSize;
3674 3666
3675 private: 3667 private:
(...skipping 13 matching lines...) Expand all
3689 3681
3690 // Casting. 3682 // Casting.
3691 static inline FreeSpace* cast(Object* obj); 3683 static inline FreeSpace* cast(Object* obj);
3692 3684
3693 #ifdef OBJECT_PRINT 3685 #ifdef OBJECT_PRINT
3694 inline void FreeSpacePrint() { 3686 inline void FreeSpacePrint() {
3695 FreeSpacePrint(stdout); 3687 FreeSpacePrint(stdout);
3696 } 3688 }
3697 void FreeSpacePrint(FILE* out); 3689 void FreeSpacePrint(FILE* out);
3698 #endif 3690 #endif
3699 #ifdef DEBUG 3691 DECLARE_VERIFIER(FreeSpace)
3700 void FreeSpaceVerify();
3701 #endif
3702 3692
3703 // Layout description. 3693 // Layout description.
3704 // Size is smi tagged when it is stored. 3694 // Size is smi tagged when it is stored.
3705 static const int kSizeOffset = HeapObject::kHeaderSize; 3695 static const int kSizeOffset = HeapObject::kHeaderSize;
3706 static const int kHeaderSize = kSizeOffset + kPointerSize; 3696 static const int kHeaderSize = kSizeOffset + kPointerSize;
3707 3697
3708 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize); 3698 static const int kAlignedSize = OBJECT_POINTER_ALIGN(kHeaderSize);
3709 3699
3710 private: 3700 private:
3711 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace); 3701 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeSpace);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
3771 3761
3772 // Casting. 3762 // Casting.
3773 static inline ExternalPixelArray* cast(Object* obj); 3763 static inline ExternalPixelArray* cast(Object* obj);
3774 3764
3775 #ifdef OBJECT_PRINT 3765 #ifdef OBJECT_PRINT
3776 inline void ExternalPixelArrayPrint() { 3766 inline void ExternalPixelArrayPrint() {
3777 ExternalPixelArrayPrint(stdout); 3767 ExternalPixelArrayPrint(stdout);
3778 } 3768 }
3779 void ExternalPixelArrayPrint(FILE* out); 3769 void ExternalPixelArrayPrint(FILE* out);
3780 #endif 3770 #endif
3781 #ifdef DEBUG 3771 DECLARE_VERIFIER(ExternalPixelArray)
3782 void ExternalPixelArrayVerify();
3783 #endif // DEBUG
3784 3772
3785 private: 3773 private:
3786 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray); 3774 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalPixelArray);
3787 }; 3775 };
3788 3776
3789 3777
3790 class ExternalByteArray: public ExternalArray { 3778 class ExternalByteArray: public ExternalArray {
3791 public: 3779 public:
3792 // Setter and getter. 3780 // Setter and getter.
3793 inline int8_t get_scalar(int index); 3781 inline int8_t get_scalar(int index);
3794 MUST_USE_RESULT inline MaybeObject* get(int index); 3782 MUST_USE_RESULT inline MaybeObject* get(int index);
3795 inline void set(int index, int8_t value); 3783 inline void set(int index, int8_t value);
3796 3784
3797 // This accessor applies the correct conversion from Smi, HeapNumber 3785 // This accessor applies the correct conversion from Smi, HeapNumber
3798 // and undefined. 3786 // and undefined.
3799 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3787 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3800 3788
3801 // Casting. 3789 // Casting.
3802 static inline ExternalByteArray* cast(Object* obj); 3790 static inline ExternalByteArray* cast(Object* obj);
3803 3791
3804 #ifdef OBJECT_PRINT 3792 #ifdef OBJECT_PRINT
3805 inline void ExternalByteArrayPrint() { 3793 inline void ExternalByteArrayPrint() {
3806 ExternalByteArrayPrint(stdout); 3794 ExternalByteArrayPrint(stdout);
3807 } 3795 }
3808 void ExternalByteArrayPrint(FILE* out); 3796 void ExternalByteArrayPrint(FILE* out);
3809 #endif 3797 #endif
3810 #ifdef DEBUG 3798 DECLARE_VERIFIER(ExternalByteArray)
3811 void ExternalByteArrayVerify();
3812 #endif // DEBUG
3813 3799
3814 private: 3800 private:
3815 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray); 3801 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalByteArray);
3816 }; 3802 };
3817 3803
3818 3804
3819 class ExternalUnsignedByteArray: public ExternalArray { 3805 class ExternalUnsignedByteArray: public ExternalArray {
3820 public: 3806 public:
3821 // Setter and getter. 3807 // Setter and getter.
3822 inline uint8_t get_scalar(int index); 3808 inline uint8_t get_scalar(int index);
3823 MUST_USE_RESULT inline MaybeObject* get(int index); 3809 MUST_USE_RESULT inline MaybeObject* get(int index);
3824 inline void set(int index, uint8_t value); 3810 inline void set(int index, uint8_t value);
3825 3811
3826 // This accessor applies the correct conversion from Smi, HeapNumber 3812 // This accessor applies the correct conversion from Smi, HeapNumber
3827 // and undefined. 3813 // and undefined.
3828 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3814 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3829 3815
3830 // Casting. 3816 // Casting.
3831 static inline ExternalUnsignedByteArray* cast(Object* obj); 3817 static inline ExternalUnsignedByteArray* cast(Object* obj);
3832 3818
3833 #ifdef OBJECT_PRINT 3819 #ifdef OBJECT_PRINT
3834 inline void ExternalUnsignedByteArrayPrint() { 3820 inline void ExternalUnsignedByteArrayPrint() {
3835 ExternalUnsignedByteArrayPrint(stdout); 3821 ExternalUnsignedByteArrayPrint(stdout);
3836 } 3822 }
3837 void ExternalUnsignedByteArrayPrint(FILE* out); 3823 void ExternalUnsignedByteArrayPrint(FILE* out);
3838 #endif 3824 #endif
3839 #ifdef DEBUG 3825 DECLARE_VERIFIER(ExternalUnsignedByteArray)
3840 void ExternalUnsignedByteArrayVerify();
3841 #endif // DEBUG
3842 3826
3843 private: 3827 private:
3844 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray); 3828 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedByteArray);
3845 }; 3829 };
3846 3830
3847 3831
3848 class ExternalShortArray: public ExternalArray { 3832 class ExternalShortArray: public ExternalArray {
3849 public: 3833 public:
3850 // Setter and getter. 3834 // Setter and getter.
3851 inline int16_t get_scalar(int index); 3835 inline int16_t get_scalar(int index);
3852 MUST_USE_RESULT inline MaybeObject* get(int index); 3836 MUST_USE_RESULT inline MaybeObject* get(int index);
3853 inline void set(int index, int16_t value); 3837 inline void set(int index, int16_t value);
3854 3838
3855 // This accessor applies the correct conversion from Smi, HeapNumber 3839 // This accessor applies the correct conversion from Smi, HeapNumber
3856 // and undefined. 3840 // and undefined.
3857 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3841 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3858 3842
3859 // Casting. 3843 // Casting.
3860 static inline ExternalShortArray* cast(Object* obj); 3844 static inline ExternalShortArray* cast(Object* obj);
3861 3845
3862 #ifdef OBJECT_PRINT 3846 #ifdef OBJECT_PRINT
3863 inline void ExternalShortArrayPrint() { 3847 inline void ExternalShortArrayPrint() {
3864 ExternalShortArrayPrint(stdout); 3848 ExternalShortArrayPrint(stdout);
3865 } 3849 }
3866 void ExternalShortArrayPrint(FILE* out); 3850 void ExternalShortArrayPrint(FILE* out);
3867 #endif 3851 #endif
3868 #ifdef DEBUG 3852 DECLARE_VERIFIER(ExternalShortArray)
3869 void ExternalShortArrayVerify();
3870 #endif // DEBUG
3871 3853
3872 private: 3854 private:
3873 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray); 3855 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalShortArray);
3874 }; 3856 };
3875 3857
3876 3858
3877 class ExternalUnsignedShortArray: public ExternalArray { 3859 class ExternalUnsignedShortArray: public ExternalArray {
3878 public: 3860 public:
3879 // Setter and getter. 3861 // Setter and getter.
3880 inline uint16_t get_scalar(int index); 3862 inline uint16_t get_scalar(int index);
3881 MUST_USE_RESULT inline MaybeObject* get(int index); 3863 MUST_USE_RESULT inline MaybeObject* get(int index);
3882 inline void set(int index, uint16_t value); 3864 inline void set(int index, uint16_t value);
3883 3865
3884 // This accessor applies the correct conversion from Smi, HeapNumber 3866 // This accessor applies the correct conversion from Smi, HeapNumber
3885 // and undefined. 3867 // and undefined.
3886 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3868 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3887 3869
3888 // Casting. 3870 // Casting.
3889 static inline ExternalUnsignedShortArray* cast(Object* obj); 3871 static inline ExternalUnsignedShortArray* cast(Object* obj);
3890 3872
3891 #ifdef OBJECT_PRINT 3873 #ifdef OBJECT_PRINT
3892 inline void ExternalUnsignedShortArrayPrint() { 3874 inline void ExternalUnsignedShortArrayPrint() {
3893 ExternalUnsignedShortArrayPrint(stdout); 3875 ExternalUnsignedShortArrayPrint(stdout);
3894 } 3876 }
3895 void ExternalUnsignedShortArrayPrint(FILE* out); 3877 void ExternalUnsignedShortArrayPrint(FILE* out);
3896 #endif 3878 #endif
3897 #ifdef DEBUG 3879 DECLARE_VERIFIER(ExternalUnsignedShortArray)
3898 void ExternalUnsignedShortArrayVerify();
3899 #endif // DEBUG
3900 3880
3901 private: 3881 private:
3902 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray); 3882 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedShortArray);
3903 }; 3883 };
3904 3884
3905 3885
3906 class ExternalIntArray: public ExternalArray { 3886 class ExternalIntArray: public ExternalArray {
3907 public: 3887 public:
3908 // Setter and getter. 3888 // Setter and getter.
3909 inline int32_t get_scalar(int index); 3889 inline int32_t get_scalar(int index);
3910 MUST_USE_RESULT inline MaybeObject* get(int index); 3890 MUST_USE_RESULT inline MaybeObject* get(int index);
3911 inline void set(int index, int32_t value); 3891 inline void set(int index, int32_t value);
3912 3892
3913 // This accessor applies the correct conversion from Smi, HeapNumber 3893 // This accessor applies the correct conversion from Smi, HeapNumber
3914 // and undefined. 3894 // and undefined.
3915 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3895 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3916 3896
3917 // Casting. 3897 // Casting.
3918 static inline ExternalIntArray* cast(Object* obj); 3898 static inline ExternalIntArray* cast(Object* obj);
3919 3899
3920 #ifdef OBJECT_PRINT 3900 #ifdef OBJECT_PRINT
3921 inline void ExternalIntArrayPrint() { 3901 inline void ExternalIntArrayPrint() {
3922 ExternalIntArrayPrint(stdout); 3902 ExternalIntArrayPrint(stdout);
3923 } 3903 }
3924 void ExternalIntArrayPrint(FILE* out); 3904 void ExternalIntArrayPrint(FILE* out);
3925 #endif 3905 #endif
3926 #ifdef DEBUG 3906 DECLARE_VERIFIER(ExternalIntArray)
3927 void ExternalIntArrayVerify();
3928 #endif // DEBUG
3929 3907
3930 private: 3908 private:
3931 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray); 3909 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalIntArray);
3932 }; 3910 };
3933 3911
3934 3912
3935 class ExternalUnsignedIntArray: public ExternalArray { 3913 class ExternalUnsignedIntArray: public ExternalArray {
3936 public: 3914 public:
3937 // Setter and getter. 3915 // Setter and getter.
3938 inline uint32_t get_scalar(int index); 3916 inline uint32_t get_scalar(int index);
3939 MUST_USE_RESULT inline MaybeObject* get(int index); 3917 MUST_USE_RESULT inline MaybeObject* get(int index);
3940 inline void set(int index, uint32_t value); 3918 inline void set(int index, uint32_t value);
3941 3919
3942 // This accessor applies the correct conversion from Smi, HeapNumber 3920 // This accessor applies the correct conversion from Smi, HeapNumber
3943 // and undefined. 3921 // and undefined.
3944 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3922 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3945 3923
3946 // Casting. 3924 // Casting.
3947 static inline ExternalUnsignedIntArray* cast(Object* obj); 3925 static inline ExternalUnsignedIntArray* cast(Object* obj);
3948 3926
3949 #ifdef OBJECT_PRINT 3927 #ifdef OBJECT_PRINT
3950 inline void ExternalUnsignedIntArrayPrint() { 3928 inline void ExternalUnsignedIntArrayPrint() {
3951 ExternalUnsignedIntArrayPrint(stdout); 3929 ExternalUnsignedIntArrayPrint(stdout);
3952 } 3930 }
3953 void ExternalUnsignedIntArrayPrint(FILE* out); 3931 void ExternalUnsignedIntArrayPrint(FILE* out);
3954 #endif 3932 #endif
3955 #ifdef DEBUG 3933 DECLARE_VERIFIER(ExternalUnsignedIntArray)
3956 void ExternalUnsignedIntArrayVerify();
3957 #endif // DEBUG
3958 3934
3959 private: 3935 private:
3960 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray); 3936 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalUnsignedIntArray);
3961 }; 3937 };
3962 3938
3963 3939
3964 class ExternalFloatArray: public ExternalArray { 3940 class ExternalFloatArray: public ExternalArray {
3965 public: 3941 public:
3966 // Setter and getter. 3942 // Setter and getter.
3967 inline float get_scalar(int index); 3943 inline float get_scalar(int index);
3968 MUST_USE_RESULT inline MaybeObject* get(int index); 3944 MUST_USE_RESULT inline MaybeObject* get(int index);
3969 inline void set(int index, float value); 3945 inline void set(int index, float value);
3970 3946
3971 // This accessor applies the correct conversion from Smi, HeapNumber 3947 // This accessor applies the correct conversion from Smi, HeapNumber
3972 // and undefined. 3948 // and undefined.
3973 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3949 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
3974 3950
3975 // Casting. 3951 // Casting.
3976 static inline ExternalFloatArray* cast(Object* obj); 3952 static inline ExternalFloatArray* cast(Object* obj);
3977 3953
3978 #ifdef OBJECT_PRINT 3954 #ifdef OBJECT_PRINT
3979 inline void ExternalFloatArrayPrint() { 3955 inline void ExternalFloatArrayPrint() {
3980 ExternalFloatArrayPrint(stdout); 3956 ExternalFloatArrayPrint(stdout);
3981 } 3957 }
3982 void ExternalFloatArrayPrint(FILE* out); 3958 void ExternalFloatArrayPrint(FILE* out);
3983 #endif 3959 #endif
3984 #ifdef DEBUG 3960 DECLARE_VERIFIER(ExternalFloatArray)
3985 void ExternalFloatArrayVerify();
3986 #endif // DEBUG
3987 3961
3988 private: 3962 private:
3989 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray); 3963 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalFloatArray);
3990 }; 3964 };
3991 3965
3992 3966
3993 class ExternalDoubleArray: public ExternalArray { 3967 class ExternalDoubleArray: public ExternalArray {
3994 public: 3968 public:
3995 // Setter and getter. 3969 // Setter and getter.
3996 inline double get_scalar(int index); 3970 inline double get_scalar(int index);
3997 MUST_USE_RESULT inline MaybeObject* get(int index); 3971 MUST_USE_RESULT inline MaybeObject* get(int index);
3998 inline void set(int index, double value); 3972 inline void set(int index, double value);
3999 3973
4000 // This accessor applies the correct conversion from Smi, HeapNumber 3974 // This accessor applies the correct conversion from Smi, HeapNumber
4001 // and undefined. 3975 // and undefined.
4002 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value); 3976 MUST_USE_RESULT MaybeObject* SetValue(uint32_t index, Object* value);
4003 3977
4004 // Casting. 3978 // Casting.
4005 static inline ExternalDoubleArray* cast(Object* obj); 3979 static inline ExternalDoubleArray* cast(Object* obj);
4006 3980
4007 #ifdef OBJECT_PRINT 3981 #ifdef OBJECT_PRINT
4008 inline void ExternalDoubleArrayPrint() { 3982 inline void ExternalDoubleArrayPrint() {
4009 ExternalDoubleArrayPrint(stdout); 3983 ExternalDoubleArrayPrint(stdout);
4010 } 3984 }
4011 void ExternalDoubleArrayPrint(FILE* out); 3985 void ExternalDoubleArrayPrint(FILE* out);
4012 #endif // OBJECT_PRINT 3986 #endif // OBJECT_PRINT
4013 #ifdef DEBUG 3987 DECLARE_VERIFIER(ExternalDoubleArray)
4014 void ExternalDoubleArrayVerify();
4015 #endif // DEBUG
4016 3988
4017 private: 3989 private:
4018 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray); 3990 DISALLOW_IMPLICIT_CONSTRUCTORS(ExternalDoubleArray);
4019 }; 3991 };
4020 3992
4021 3993
4022 // DeoptimizationInputData is a fixed array used to hold the deoptimization 3994 // DeoptimizationInputData is a fixed array used to hold the deoptimization
4023 // data for code generated by the Hydrogen/Lithium compiler. It also 3995 // data for code generated by the Hydrogen/Lithium compiler. It also
4024 // contains information about functions that were inlined. If N different 3996 // contains information about functions that were inlined. If N different
4025 // functions were inlined then first N elements of the literal array will 3997 // functions were inlined then first N elements of the literal array will
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after
4528 inline void CodeIterateBody(ObjectVisitor* v); 4500 inline void CodeIterateBody(ObjectVisitor* v);
4529 4501
4530 template<typename StaticVisitor> 4502 template<typename StaticVisitor>
4531 inline void CodeIterateBody(Heap* heap); 4503 inline void CodeIterateBody(Heap* heap);
4532 #ifdef OBJECT_PRINT 4504 #ifdef OBJECT_PRINT
4533 inline void CodePrint() { 4505 inline void CodePrint() {
4534 CodePrint(stdout); 4506 CodePrint(stdout);
4535 } 4507 }
4536 void CodePrint(FILE* out); 4508 void CodePrint(FILE* out);
4537 #endif 4509 #endif
4538 #ifdef DEBUG 4510 DECLARE_VERIFIER(Code)
4539 void CodeVerify(); 4511
4540 #endif
4541 void ClearInlineCaches(); 4512 void ClearInlineCaches();
4542 void ClearTypeFeedbackCells(Heap* heap); 4513 void ClearTypeFeedbackCells(Heap* heap);
4543 4514
4544 // Max loop nesting marker used to postpose OSR. We don't take loop 4515 // Max loop nesting marker used to postpose OSR. We don't take loop
4545 // nesting that is deeper than 5 levels into account. 4516 // nesting that is deeper than 5 levels into account.
4546 static const int kMaxLoopNestingMarker = 6; 4517 static const int kMaxLoopNestingMarker = 6;
4547 4518
4548 // Layout description. 4519 // Layout description.
4549 static const int kInstructionSizeOffset = HeapObject::kHeaderSize; 4520 static const int kInstructionSizeOffset = HeapObject::kHeaderSize;
4550 static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize; 4521 static const int kRelocationInfoOffset = kInstructionSizeOffset + kIntSize;
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
5090 // |safe_to_add_transitions| is set to false if adding transitions is not 5061 // |safe_to_add_transitions| is set to false if adding transitions is not
5091 // allowed. 5062 // allowed.
5092 Map* LookupElementsTransitionMap(ElementsKind elements_kind); 5063 Map* LookupElementsTransitionMap(ElementsKind elements_kind);
5093 5064
5094 // Returns the transitioned map for this map with the most generic 5065 // Returns the transitioned map for this map with the most generic
5095 // elements_kind that's found in |candidates|, or null handle if no match is 5066 // elements_kind that's found in |candidates|, or null handle if no match is
5096 // found at all. 5067 // found at all.
5097 Handle<Map> FindTransitionedMap(MapHandleList* candidates); 5068 Handle<Map> FindTransitionedMap(MapHandleList* candidates);
5098 Map* FindTransitionedMap(MapList* candidates); 5069 Map* FindTransitionedMap(MapList* candidates);
5099 5070
5100 // Zaps the contents of backing data structures in debug mode. Note that the 5071 // Zaps the contents of backing data structures. Note that the
5101 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects 5072 // heap verifier (i.e. VerifyMarkingVisitor) relies on zapping of objects
5102 // holding weak references when incremental marking is used, because it also 5073 // holding weak references when incremental marking is used, because it also
5103 // iterates over objects that are otherwise unreachable. 5074 // iterates over objects that are otherwise unreachable.
5104 #ifdef DEBUG 5075 // In general we only want to call these functions in release mode when
5076 // heap verification is turned on.
5105 void ZapPrototypeTransitions(); 5077 void ZapPrototypeTransitions();
5106 void ZapTransitions(); 5078 void ZapTransitions();
5107 #endif
5108 5079
5109 // Dispatched behavior. 5080 // Dispatched behavior.
5110 #ifdef OBJECT_PRINT 5081 #ifdef OBJECT_PRINT
5111 inline void MapPrint() { 5082 inline void MapPrint() {
5112 MapPrint(stdout); 5083 MapPrint(stdout);
5113 } 5084 }
5114 void MapPrint(FILE* out); 5085 void MapPrint(FILE* out);
5115 #endif 5086 #endif
5116 #ifdef DEBUG 5087 DECLARE_VERIFIER(Map)
5117 void MapVerify(); 5088 #ifdef VERIFY_HEAP
5118 void SharedMapVerify(); 5089 void SharedMapVerify();
5119 #endif 5090 #endif
5120 5091
5121 inline int visitor_id(); 5092 inline int visitor_id();
5122 inline void set_visitor_id(int visitor_id); 5093 inline void set_visitor_id(int visitor_id);
5123 5094
5124 typedef void (*TraverseCallback)(Map* map, void* data); 5095 typedef void (*TraverseCallback)(Map* map, void* data);
5125 5096
5126 void TraverseTransitionTree(TraverseCallback callback, void* data); 5097 void TraverseTransitionTree(TraverseCallback callback, void* data);
5127 5098
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
5310 // If script source is an external string, check that the underlying 5281 // If script source is an external string, check that the underlying
5311 // resource is accessible. Otherwise, always return true. 5282 // resource is accessible. Otherwise, always return true.
5312 inline bool HasValidSource(); 5283 inline bool HasValidSource();
5313 5284
5314 #ifdef OBJECT_PRINT 5285 #ifdef OBJECT_PRINT
5315 inline void ScriptPrint() { 5286 inline void ScriptPrint() {
5316 ScriptPrint(stdout); 5287 ScriptPrint(stdout);
5317 } 5288 }
5318 void ScriptPrint(FILE* out); 5289 void ScriptPrint(FILE* out);
5319 #endif 5290 #endif
5320 #ifdef DEBUG 5291 DECLARE_VERIFIER(Script)
5321 void ScriptVerify();
5322 #endif
5323 5292
5324 static const int kSourceOffset = HeapObject::kHeaderSize; 5293 static const int kSourceOffset = HeapObject::kHeaderSize;
5325 static const int kNameOffset = kSourceOffset + kPointerSize; 5294 static const int kNameOffset = kSourceOffset + kPointerSize;
5326 static const int kLineOffsetOffset = kNameOffset + kPointerSize; 5295 static const int kLineOffsetOffset = kNameOffset + kPointerSize;
5327 static const int kColumnOffsetOffset = kLineOffsetOffset + kPointerSize; 5296 static const int kColumnOffsetOffset = kLineOffsetOffset + kPointerSize;
5328 static const int kDataOffset = kColumnOffsetOffset + kPointerSize; 5297 static const int kDataOffset = kColumnOffsetOffset + kPointerSize;
5329 static const int kContextOffset = kDataOffset + kPointerSize; 5298 static const int kContextOffset = kDataOffset + kPointerSize;
5330 static const int kWrapperOffset = kContextOffset + kPointerSize; 5299 static const int kWrapperOffset = kContextOffset + kPointerSize;
5331 static const int kTypeOffset = kWrapperOffset + kPointerSize; 5300 static const int kTypeOffset = kWrapperOffset + kPointerSize;
5332 static const int kCompilationTypeOffset = kTypeOffset + kPointerSize; 5301 static const int kCompilationTypeOffset = kTypeOffset + kPointerSize;
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
5792 5761
5793 // Dispatched behavior. 5762 // Dispatched behavior.
5794 // Set max_length to -1 for unlimited length. 5763 // Set max_length to -1 for unlimited length.
5795 void SourceCodePrint(StringStream* accumulator, int max_length); 5764 void SourceCodePrint(StringStream* accumulator, int max_length);
5796 #ifdef OBJECT_PRINT 5765 #ifdef OBJECT_PRINT
5797 inline void SharedFunctionInfoPrint() { 5766 inline void SharedFunctionInfoPrint() {
5798 SharedFunctionInfoPrint(stdout); 5767 SharedFunctionInfoPrint(stdout);
5799 } 5768 }
5800 void SharedFunctionInfoPrint(FILE* out); 5769 void SharedFunctionInfoPrint(FILE* out);
5801 #endif 5770 #endif
5802 #ifdef DEBUG 5771 DECLARE_VERIFIER(SharedFunctionInfo)
5803 void SharedFunctionInfoVerify();
5804 #endif
5805 5772
5806 void ResetForNewContext(int new_ic_age); 5773 void ResetForNewContext(int new_ic_age);
5807 5774
5808 // Helper to compile the shared code. Returns true on success, false on 5775 // Helper to compile the shared code. Returns true on success, false on
5809 // failure (e.g., stack overflow during compilation). This is only used by 5776 // failure (e.g., stack overflow during compilation). This is only used by
5810 // the debugger, it is not possible to compile without a context otherwise. 5777 // the debugger, it is not possible to compile without a context otherwise.
5811 static bool CompileLazy(Handle<SharedFunctionInfo> shared, 5778 static bool CompileLazy(Handle<SharedFunctionInfo> shared,
5812 ClearExceptionFlag flag); 5779 ClearExceptionFlag flag);
5813 5780
5814 // Casting. 5781 // Casting.
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
6028 // Casting. 5995 // Casting.
6029 static inline JSModule* cast(Object* obj); 5996 static inline JSModule* cast(Object* obj);
6030 5997
6031 // Dispatched behavior. 5998 // Dispatched behavior.
6032 #ifdef OBJECT_PRINT 5999 #ifdef OBJECT_PRINT
6033 inline void JSModulePrint() { 6000 inline void JSModulePrint() {
6034 JSModulePrint(stdout); 6001 JSModulePrint(stdout);
6035 } 6002 }
6036 void JSModulePrint(FILE* out); 6003 void JSModulePrint(FILE* out);
6037 #endif 6004 #endif
6038 #ifdef DEBUG 6005 DECLARE_VERIFIER(JSModule)
6039 void JSModuleVerify();
6040 #endif
6041 6006
6042 // Layout description. 6007 // Layout description.
6043 static const int kContextOffset = JSObject::kHeaderSize; 6008 static const int kContextOffset = JSObject::kHeaderSize;
6044 static const int kScopeInfoOffset = kContextOffset + kPointerSize; 6009 static const int kScopeInfoOffset = kContextOffset + kPointerSize;
6045 static const int kSize = kScopeInfoOffset + kPointerSize; 6010 static const int kSize = kScopeInfoOffset + kPointerSize;
6046 6011
6047 private: 6012 private:
6048 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule); 6013 DISALLOW_IMPLICIT_CONSTRUCTORS(JSModule);
6049 }; 6014 };
6050 6015
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
6191 // through pointers to the first instruction in the code object. 6156 // through pointers to the first instruction in the code object.
6192 void JSFunctionIterateBody(int object_size, ObjectVisitor* v); 6157 void JSFunctionIterateBody(int object_size, ObjectVisitor* v);
6193 6158
6194 // Dispatched behavior. 6159 // Dispatched behavior.
6195 #ifdef OBJECT_PRINT 6160 #ifdef OBJECT_PRINT
6196 inline void JSFunctionPrint() { 6161 inline void JSFunctionPrint() {
6197 JSFunctionPrint(stdout); 6162 JSFunctionPrint(stdout);
6198 } 6163 }
6199 void JSFunctionPrint(FILE* out); 6164 void JSFunctionPrint(FILE* out);
6200 #endif 6165 #endif
6201 #ifdef DEBUG 6166 DECLARE_VERIFIER(JSFunction)
6202 void JSFunctionVerify();
6203 #endif
6204 6167
6205 // Returns the number of allocated literals. 6168 // Returns the number of allocated literals.
6206 inline int NumberOfLiterals(); 6169 inline int NumberOfLiterals();
6207 6170
6208 // Retrieve the native context from a function's literal array. 6171 // Retrieve the native context from a function's literal array.
6209 static Context* NativeContextFromLiterals(FixedArray* literals); 6172 static Context* NativeContextFromLiterals(FixedArray* literals);
6210 6173
6211 // Layout descriptors. The last property (from kNonWeakFieldsEndOffset to 6174 // Layout descriptors. The last property (from kNonWeakFieldsEndOffset to
6212 // kSize) is weak and has special handling during garbage collection. 6175 // kSize) is weak and has special handling during garbage collection.
6213 static const int kCodeEntryOffset = JSObject::kHeaderSize; 6176 static const int kCodeEntryOffset = JSObject::kHeaderSize;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
6252 // Casting. 6215 // Casting.
6253 static inline JSGlobalProxy* cast(Object* obj); 6216 static inline JSGlobalProxy* cast(Object* obj);
6254 6217
6255 // Dispatched behavior. 6218 // Dispatched behavior.
6256 #ifdef OBJECT_PRINT 6219 #ifdef OBJECT_PRINT
6257 inline void JSGlobalProxyPrint() { 6220 inline void JSGlobalProxyPrint() {
6258 JSGlobalProxyPrint(stdout); 6221 JSGlobalProxyPrint(stdout);
6259 } 6222 }
6260 void JSGlobalProxyPrint(FILE* out); 6223 void JSGlobalProxyPrint(FILE* out);
6261 #endif 6224 #endif
6262 #ifdef DEBUG 6225 DECLARE_VERIFIER(JSGlobalProxy)
6263 void JSGlobalProxyVerify();
6264 #endif
6265 6226
6266 // Layout description. 6227 // Layout description.
6267 static const int kNativeContextOffset = JSObject::kHeaderSize; 6228 static const int kNativeContextOffset = JSObject::kHeaderSize;
6268 static const int kSize = kNativeContextOffset + kPointerSize; 6229 static const int kSize = kNativeContextOffset + kPointerSize;
6269 6230
6270 private: 6231 private:
6271 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy); 6232 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalProxy);
6272 }; 6233 };
6273 6234
6274 6235
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
6332 // Casting. 6293 // Casting.
6333 static inline JSGlobalObject* cast(Object* obj); 6294 static inline JSGlobalObject* cast(Object* obj);
6334 6295
6335 // Dispatched behavior. 6296 // Dispatched behavior.
6336 #ifdef OBJECT_PRINT 6297 #ifdef OBJECT_PRINT
6337 inline void JSGlobalObjectPrint() { 6298 inline void JSGlobalObjectPrint() {
6338 JSGlobalObjectPrint(stdout); 6299 JSGlobalObjectPrint(stdout);
6339 } 6300 }
6340 void JSGlobalObjectPrint(FILE* out); 6301 void JSGlobalObjectPrint(FILE* out);
6341 #endif 6302 #endif
6342 #ifdef DEBUG 6303 DECLARE_VERIFIER(JSGlobalObject)
6343 void JSGlobalObjectVerify();
6344 #endif
6345 6304
6346 // Layout description. 6305 // Layout description.
6347 static const int kSize = GlobalObject::kHeaderSize; 6306 static const int kSize = GlobalObject::kHeaderSize;
6348 6307
6349 private: 6308 private:
6350 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject); 6309 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalObject);
6351 }; 6310 };
6352 6311
6353 6312
6354 // Builtins global object which holds the runtime routines written in 6313 // Builtins global object which holds the runtime routines written in
(...skipping 11 matching lines...) Expand all
6366 // Casting. 6325 // Casting.
6367 static inline JSBuiltinsObject* cast(Object* obj); 6326 static inline JSBuiltinsObject* cast(Object* obj);
6368 6327
6369 // Dispatched behavior. 6328 // Dispatched behavior.
6370 #ifdef OBJECT_PRINT 6329 #ifdef OBJECT_PRINT
6371 inline void JSBuiltinsObjectPrint() { 6330 inline void JSBuiltinsObjectPrint() {
6372 JSBuiltinsObjectPrint(stdout); 6331 JSBuiltinsObjectPrint(stdout);
6373 } 6332 }
6374 void JSBuiltinsObjectPrint(FILE* out); 6333 void JSBuiltinsObjectPrint(FILE* out);
6375 #endif 6334 #endif
6376 #ifdef DEBUG 6335 DECLARE_VERIFIER(JSBuiltinsObject)
6377 void JSBuiltinsObjectVerify();
6378 #endif
6379 6336
6380 // Layout description. The size of the builtins object includes 6337 // Layout description. The size of the builtins object includes
6381 // room for two pointers per runtime routine written in javascript 6338 // room for two pointers per runtime routine written in javascript
6382 // (function and code object). 6339 // (function and code object).
6383 static const int kJSBuiltinsCount = Builtins::id_count; 6340 static const int kJSBuiltinsCount = Builtins::id_count;
6384 static const int kJSBuiltinsOffset = GlobalObject::kHeaderSize; 6341 static const int kJSBuiltinsOffset = GlobalObject::kHeaderSize;
6385 static const int kJSBuiltinsCodeOffset = 6342 static const int kJSBuiltinsCodeOffset =
6386 GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize); 6343 GlobalObject::kHeaderSize + (kJSBuiltinsCount * kPointerSize);
6387 static const int kSize = 6344 static const int kSize =
6388 kJSBuiltinsCodeOffset + (kJSBuiltinsCount * kPointerSize); 6345 kJSBuiltinsCodeOffset + (kJSBuiltinsCount * kPointerSize);
(...skipping 20 matching lines...) Expand all
6409 // Casting. 6366 // Casting.
6410 static inline JSValue* cast(Object* obj); 6367 static inline JSValue* cast(Object* obj);
6411 6368
6412 // Dispatched behavior. 6369 // Dispatched behavior.
6413 #ifdef OBJECT_PRINT 6370 #ifdef OBJECT_PRINT
6414 inline void JSValuePrint() { 6371 inline void JSValuePrint() {
6415 JSValuePrint(stdout); 6372 JSValuePrint(stdout);
6416 } 6373 }
6417 void JSValuePrint(FILE* out); 6374 void JSValuePrint(FILE* out);
6418 #endif 6375 #endif
6419 #ifdef DEBUG 6376 DECLARE_VERIFIER(JSValue)
6420 void JSValueVerify();
6421 #endif
6422 6377
6423 // Layout description. 6378 // Layout description.
6424 static const int kValueOffset = JSObject::kHeaderSize; 6379 static const int kValueOffset = JSObject::kHeaderSize;
6425 static const int kSize = kValueOffset + kPointerSize; 6380 static const int kSize = kValueOffset + kPointerSize;
6426 6381
6427 private: 6382 private:
6428 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue); 6383 DISALLOW_IMPLICIT_CONSTRUCTORS(JSValue);
6429 }; 6384 };
6430 6385
6431 6386
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
6465 void SetValue(Object* value, bool is_value_nan); 6420 void SetValue(Object* value, bool is_value_nan);
6466 6421
6467 6422
6468 // Dispatched behavior. 6423 // Dispatched behavior.
6469 #ifdef OBJECT_PRINT 6424 #ifdef OBJECT_PRINT
6470 inline void JSDatePrint() { 6425 inline void JSDatePrint() {
6471 JSDatePrint(stdout); 6426 JSDatePrint(stdout);
6472 } 6427 }
6473 void JSDatePrint(FILE* out); 6428 void JSDatePrint(FILE* out);
6474 #endif 6429 #endif
6475 #ifdef DEBUG 6430 DECLARE_VERIFIER(JSDate)
6476 void JSDateVerify(); 6431
6477 #endif
6478 // The order is important. It must be kept in sync with date macros 6432 // The order is important. It must be kept in sync with date macros
6479 // in macros.py. 6433 // in macros.py.
6480 enum FieldIndex { 6434 enum FieldIndex {
6481 kDateValue, 6435 kDateValue,
6482 kYear, 6436 kYear,
6483 kMonth, 6437 kMonth,
6484 kDay, 6438 kDay,
6485 kWeekday, 6439 kWeekday,
6486 kHour, 6440 kHour,
6487 kMinute, 6441 kMinute,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
6563 // Casting. 6517 // Casting.
6564 static inline JSMessageObject* cast(Object* obj); 6518 static inline JSMessageObject* cast(Object* obj);
6565 6519
6566 // Dispatched behavior. 6520 // Dispatched behavior.
6567 #ifdef OBJECT_PRINT 6521 #ifdef OBJECT_PRINT
6568 inline void JSMessageObjectPrint() { 6522 inline void JSMessageObjectPrint() {
6569 JSMessageObjectPrint(stdout); 6523 JSMessageObjectPrint(stdout);
6570 } 6524 }
6571 void JSMessageObjectPrint(FILE* out); 6525 void JSMessageObjectPrint(FILE* out);
6572 #endif 6526 #endif
6573 #ifdef DEBUG 6527 DECLARE_VERIFIER(JSMessageObject)
6574 void JSMessageObjectVerify();
6575 #endif
6576 6528
6577 // Layout description. 6529 // Layout description.
6578 static const int kTypeOffset = JSObject::kHeaderSize; 6530 static const int kTypeOffset = JSObject::kHeaderSize;
6579 static const int kArgumentsOffset = kTypeOffset + kPointerSize; 6531 static const int kArgumentsOffset = kTypeOffset + kPointerSize;
6580 static const int kScriptOffset = kArgumentsOffset + kPointerSize; 6532 static const int kScriptOffset = kArgumentsOffset + kPointerSize;
6581 static const int kStackTraceOffset = kScriptOffset + kPointerSize; 6533 static const int kStackTraceOffset = kScriptOffset + kPointerSize;
6582 static const int kStackFramesOffset = kStackTraceOffset + kPointerSize; 6534 static const int kStackFramesOffset = kStackTraceOffset + kPointerSize;
6583 static const int kStartPositionOffset = kStackFramesOffset + kPointerSize; 6535 static const int kStartPositionOffset = kStackFramesOffset + kPointerSize;
6584 static const int kEndPositionOffset = kStartPositionOffset + kPointerSize; 6536 static const int kEndPositionOffset = kStartPositionOffset + kPointerSize;
6585 static const int kSize = kEndPositionOffset + kPointerSize; 6537 static const int kSize = kEndPositionOffset + kPointerSize;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
6654 if (is_ascii) { 6606 if (is_ascii) {
6655 return kIrregexpASCIICodeSavedIndex; 6607 return kIrregexpASCIICodeSavedIndex;
6656 } else { 6608 } else {
6657 return kIrregexpUC16CodeSavedIndex; 6609 return kIrregexpUC16CodeSavedIndex;
6658 } 6610 }
6659 } 6611 }
6660 6612
6661 static inline JSRegExp* cast(Object* obj); 6613 static inline JSRegExp* cast(Object* obj);
6662 6614
6663 // Dispatched behavior. 6615 // Dispatched behavior.
6664 #ifdef DEBUG 6616 DECLARE_VERIFIER(JSRegExp)
6665 void JSRegExpVerify();
6666 #endif
6667 6617
6668 static const int kDataOffset = JSObject::kHeaderSize; 6618 static const int kDataOffset = JSObject::kHeaderSize;
6669 static const int kSize = kDataOffset + kPointerSize; 6619 static const int kSize = kDataOffset + kPointerSize;
6670 6620
6671 // Indices in the data array. 6621 // Indices in the data array.
6672 static const int kTagIndex = 0; 6622 static const int kTagIndex = 0;
6673 static const int kSourceIndex = kTagIndex + 1; 6623 static const int kSourceIndex = kTagIndex + 1;
6674 static const int kFlagsIndex = kSourceIndex + 1; 6624 static const int kFlagsIndex = kSourceIndex + 1;
6675 static const int kDataIndex = kFlagsIndex + 1; 6625 static const int kDataIndex = kFlagsIndex + 1;
6676 // The data fields are used in different ways depending on the 6626 // The data fields are used in different ways depending on the
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
6812 void RemoveByIndex(Object* name, Code* code, int index); 6762 void RemoveByIndex(Object* name, Code* code, int index);
6813 6763
6814 static inline CodeCache* cast(Object* obj); 6764 static inline CodeCache* cast(Object* obj);
6815 6765
6816 #ifdef OBJECT_PRINT 6766 #ifdef OBJECT_PRINT
6817 inline void CodeCachePrint() { 6767 inline void CodeCachePrint() {
6818 CodeCachePrint(stdout); 6768 CodeCachePrint(stdout);
6819 } 6769 }
6820 void CodeCachePrint(FILE* out); 6770 void CodeCachePrint(FILE* out);
6821 #endif 6771 #endif
6822 #ifdef DEBUG 6772 DECLARE_VERIFIER(CodeCache)
6823 void CodeCacheVerify();
6824 #endif
6825 6773
6826 static const int kDefaultCacheOffset = HeapObject::kHeaderSize; 6774 static const int kDefaultCacheOffset = HeapObject::kHeaderSize;
6827 static const int kNormalTypeCacheOffset = 6775 static const int kNormalTypeCacheOffset =
6828 kDefaultCacheOffset + kPointerSize; 6776 kDefaultCacheOffset + kPointerSize;
6829 static const int kSize = kNormalTypeCacheOffset + kPointerSize; 6777 static const int kSize = kNormalTypeCacheOffset + kPointerSize;
6830 6778
6831 private: 6779 private:
6832 MUST_USE_RESULT MaybeObject* UpdateDefaultCache(String* name, Code* code); 6780 MUST_USE_RESULT MaybeObject* UpdateDefaultCache(String* name, Code* code);
6833 MUST_USE_RESULT MaybeObject* UpdateNormalTypeCache(String* name, Code* code); 6781 MUST_USE_RESULT MaybeObject* UpdateNormalTypeCache(String* name, Code* code);
6834 Object* LookupDefaultCache(String* name, Code::Flags flags); 6782 Object* LookupDefaultCache(String* name, Code::Flags flags);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
6903 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags); 6851 Handle<Object> Lookup(MapHandleList* maps, Code::Flags flags);
6904 6852
6905 static inline PolymorphicCodeCache* cast(Object* obj); 6853 static inline PolymorphicCodeCache* cast(Object* obj);
6906 6854
6907 #ifdef OBJECT_PRINT 6855 #ifdef OBJECT_PRINT
6908 inline void PolymorphicCodeCachePrint() { 6856 inline void PolymorphicCodeCachePrint() {
6909 PolymorphicCodeCachePrint(stdout); 6857 PolymorphicCodeCachePrint(stdout);
6910 } 6858 }
6911 void PolymorphicCodeCachePrint(FILE* out); 6859 void PolymorphicCodeCachePrint(FILE* out);
6912 #endif 6860 #endif
6913 #ifdef DEBUG 6861 DECLARE_VERIFIER(PolymorphicCodeCache)
6914 void PolymorphicCodeCacheVerify();
6915 #endif
6916 6862
6917 static const int kCacheOffset = HeapObject::kHeaderSize; 6863 static const int kCacheOffset = HeapObject::kHeaderSize;
6918 static const int kSize = kCacheOffset + kPointerSize; 6864 static const int kSize = kCacheOffset + kPointerSize;
6919 6865
6920 private: 6866 private:
6921 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache); 6867 DISALLOW_IMPLICIT_CONSTRUCTORS(PolymorphicCodeCache);
6922 }; 6868 };
6923 6869
6924 6870
6925 class PolymorphicCodeCacheHashTable 6871 class PolymorphicCodeCacheHashTable
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
6958 DECL_ACCESSORS(type_feedback_cells, TypeFeedbackCells) 6904 DECL_ACCESSORS(type_feedback_cells, TypeFeedbackCells)
6959 6905
6960 static inline TypeFeedbackInfo* cast(Object* obj); 6906 static inline TypeFeedbackInfo* cast(Object* obj);
6961 6907
6962 #ifdef OBJECT_PRINT 6908 #ifdef OBJECT_PRINT
6963 inline void TypeFeedbackInfoPrint() { 6909 inline void TypeFeedbackInfoPrint() {
6964 TypeFeedbackInfoPrint(stdout); 6910 TypeFeedbackInfoPrint(stdout);
6965 } 6911 }
6966 void TypeFeedbackInfoPrint(FILE* out); 6912 void TypeFeedbackInfoPrint(FILE* out);
6967 #endif 6913 #endif
6968 #ifdef DEBUG 6914 DECLARE_VERIFIER(TypeFeedbackInfo)
6969 void TypeFeedbackInfoVerify();
6970 #endif
6971 6915
6972 static const int kStorage1Offset = HeapObject::kHeaderSize; 6916 static const int kStorage1Offset = HeapObject::kHeaderSize;
6973 static const int kStorage2Offset = kStorage1Offset + kPointerSize; 6917 static const int kStorage2Offset = kStorage1Offset + kPointerSize;
6974 static const int kTypeFeedbackCellsOffset = kStorage2Offset + kPointerSize; 6918 static const int kTypeFeedbackCellsOffset = kStorage2Offset + kPointerSize;
6975 static const int kSize = kTypeFeedbackCellsOffset + kPointerSize; 6919 static const int kSize = kTypeFeedbackCellsOffset + kPointerSize;
6976 6920
6977 private: 6921 private:
6978 static const int kTypeChangeChecksumBits = 7; 6922 static const int kTypeChangeChecksumBits = 7;
6979 6923
6980 class ICTotalCountField: public BitField<int, 0, 6924 class ICTotalCountField: public BitField<int, 0,
(...skipping 25 matching lines...) Expand all
7006 inline void set_aliased_context_slot(int count); 6950 inline void set_aliased_context_slot(int count);
7007 6951
7008 static inline AliasedArgumentsEntry* cast(Object* obj); 6952 static inline AliasedArgumentsEntry* cast(Object* obj);
7009 6953
7010 #ifdef OBJECT_PRINT 6954 #ifdef OBJECT_PRINT
7011 inline void AliasedArgumentsEntryPrint() { 6955 inline void AliasedArgumentsEntryPrint() {
7012 AliasedArgumentsEntryPrint(stdout); 6956 AliasedArgumentsEntryPrint(stdout);
7013 } 6957 }
7014 void AliasedArgumentsEntryPrint(FILE* out); 6958 void AliasedArgumentsEntryPrint(FILE* out);
7015 #endif 6959 #endif
7016 #ifdef DEBUG 6960 DECLARE_VERIFIER(AliasedArgumentsEntry)
7017 void AliasedArgumentsEntryVerify();
7018 #endif
7019 6961
7020 static const int kAliasedContextSlot = HeapObject::kHeaderSize; 6962 static const int kAliasedContextSlot = HeapObject::kHeaderSize;
7021 static const int kSize = kAliasedContextSlot + kPointerSize; 6963 static const int kSize = kAliasedContextSlot + kPointerSize;
7022 6964
7023 private: 6965 private:
7024 DISALLOW_IMPLICIT_CONSTRUCTORS(AliasedArgumentsEntry); 6966 DISALLOW_IMPLICIT_CONSTRUCTORS(AliasedArgumentsEntry);
7025 }; 6967 };
7026 6968
7027 6969
7028 enum AllowNullsFlag {ALLOW_NULLS, DISALLOW_NULLS}; 6970 enum AllowNullsFlag {ALLOW_NULLS, DISALLOW_NULLS};
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
7355 // Dispatched behavior. 7297 // Dispatched behavior.
7356 void StringShortPrint(StringStream* accumulator); 7298 void StringShortPrint(StringStream* accumulator);
7357 #ifdef OBJECT_PRINT 7299 #ifdef OBJECT_PRINT
7358 inline void StringPrint() { 7300 inline void StringPrint() {
7359 StringPrint(stdout); 7301 StringPrint(stdout);
7360 } 7302 }
7361 void StringPrint(FILE* out); 7303 void StringPrint(FILE* out);
7362 7304
7363 char* ToAsciiArray(); 7305 char* ToAsciiArray();
7364 #endif 7306 #endif
7365 #ifdef DEBUG 7307 DECLARE_VERIFIER(String)
7366 void StringVerify(); 7308
7367 #endif
7368 inline bool IsFlat(); 7309 inline bool IsFlat();
7369 7310
7370 // Layout description. 7311 // Layout description.
7371 static const int kLengthOffset = HeapObject::kHeaderSize; 7312 static const int kLengthOffset = HeapObject::kHeaderSize;
7372 static const int kHashFieldOffset = kLengthOffset + kPointerSize; 7313 static const int kHashFieldOffset = kLengthOffset + kPointerSize;
7373 static const int kSize = kHashFieldOffset + kPointerSize; 7314 static const int kSize = kHashFieldOffset + kPointerSize;
7374 7315
7375 // Maximum number of characters to consider when trying to convert a string 7316 // Maximum number of characters to consider when trying to convert a string
7376 // value into an array index. 7317 // value into an array index.
7377 static const int kMaxArrayIndexSize = 10; 7318 static const int kMaxArrayIndexSize = 10;
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
7594 static const int kMaxLength = (kMaxSize - kHeaderSize); 7535 static const int kMaxLength = (kMaxSize - kHeaderSize);
7595 7536
7596 // Support for StringInputBuffer. 7537 // Support for StringInputBuffer.
7597 inline void SeqAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, 7538 inline void SeqAsciiStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
7598 unsigned* offset, 7539 unsigned* offset,
7599 unsigned chars); 7540 unsigned chars);
7600 inline const unibrow::byte* SeqAsciiStringReadBlock(unsigned* remaining, 7541 inline const unibrow::byte* SeqAsciiStringReadBlock(unsigned* remaining,
7601 unsigned* offset, 7542 unsigned* offset,
7602 unsigned chars); 7543 unsigned chars);
7603 7544
7604 #ifdef DEBUG 7545 DECLARE_VERIFIER(SeqAsciiString)
7605 void SeqAsciiStringVerify();
7606 #endif
7607 7546
7608 private: 7547 private:
7609 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqAsciiString); 7548 DISALLOW_IMPLICIT_CONSTRUCTORS(SeqAsciiString);
7610 }; 7549 };
7611 7550
7612 7551
7613 // The TwoByteString class captures sequential unicode string objects. 7552 // The TwoByteString class captures sequential unicode string objects.
7614 // Each character in the TwoByteString is a two-byte uint16_t. 7553 // Each character in the TwoByteString is a two-byte uint16_t.
7615 class SeqTwoByteString: public SeqString { 7554 class SeqTwoByteString: public SeqString {
7616 public: 7555 public:
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
7701 inline void ConsStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, 7640 inline void ConsStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
7702 unsigned* offset_ptr, 7641 unsigned* offset_ptr,
7703 unsigned chars); 7642 unsigned chars);
7704 7643
7705 // Minimum length for a cons string. 7644 // Minimum length for a cons string.
7706 static const int kMinLength = 13; 7645 static const int kMinLength = 13;
7707 7646
7708 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize> 7647 typedef FixedBodyDescriptor<kFirstOffset, kSecondOffset + kPointerSize, kSize>
7709 BodyDescriptor; 7648 BodyDescriptor;
7710 7649
7711 #ifdef DEBUG 7650 DECLARE_VERIFIER(ConsString)
7712 void ConsStringVerify();
7713 #endif
7714 7651
7715 private: 7652 private:
7716 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString); 7653 DISALLOW_IMPLICIT_CONSTRUCTORS(ConsString);
7717 }; 7654 };
7718 7655
7719 7656
7720 // The Sliced String class describes strings that are substrings of another 7657 // The Sliced String class describes strings that are substrings of another
7721 // sequential string. The motivation is to save time and memory when creating 7658 // sequential string. The motivation is to save time and memory when creating
7722 // a substring. A Sliced String is described as a pointer to the parent, 7659 // a substring. A Sliced String is described as a pointer to the parent,
7723 // the offset from the start of the parent string and the length. Using 7660 // the offset from the start of the parent string and the length. Using
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
7755 inline void SlicedStringReadBlockIntoBuffer(ReadBlockBuffer* buffer, 7692 inline void SlicedStringReadBlockIntoBuffer(ReadBlockBuffer* buffer,
7756 unsigned* offset_ptr, 7693 unsigned* offset_ptr,
7757 unsigned chars); 7694 unsigned chars);
7758 // Minimum length for a sliced string. 7695 // Minimum length for a sliced string.
7759 static const int kMinLength = 13; 7696 static const int kMinLength = 13;
7760 7697
7761 typedef FixedBodyDescriptor<kParentOffset, 7698 typedef FixedBodyDescriptor<kParentOffset,
7762 kOffsetOffset + kPointerSize, kSize> 7699 kOffsetOffset + kPointerSize, kSize>
7763 BodyDescriptor; 7700 BodyDescriptor;
7764 7701
7765 #ifdef DEBUG 7702 DECLARE_VERIFIER(SlicedString)
7766 void SlicedStringVerify();
7767 #endif
7768 7703
7769 private: 7704 private:
7770 DISALLOW_IMPLICIT_CONSTRUCTORS(SlicedString); 7705 DISALLOW_IMPLICIT_CONSTRUCTORS(SlicedString);
7771 }; 7706 };
7772 7707
7773 7708
7774 // The ExternalString class describes string values that are backed by 7709 // The ExternalString class describes string values that are backed by
7775 // a string resource that lies outside the V8 heap. ExternalStrings 7710 // a string resource that lies outside the V8 heap. ExternalStrings
7776 // consist of the length field common to all strings, a pointer to the 7711 // consist of the length field common to all strings, a pointer to the
7777 // external resource. It is important to ensure (externally) that the 7712 // external resource. It is important to ensure (externally) that the
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
7984 // [to_number]: Cached to_number computed at startup. 7919 // [to_number]: Cached to_number computed at startup.
7985 DECL_ACCESSORS(to_number, Object) 7920 DECL_ACCESSORS(to_number, Object)
7986 7921
7987 inline byte kind(); 7922 inline byte kind();
7988 inline void set_kind(byte kind); 7923 inline void set_kind(byte kind);
7989 7924
7990 // Casting. 7925 // Casting.
7991 static inline Oddball* cast(Object* obj); 7926 static inline Oddball* cast(Object* obj);
7992 7927
7993 // Dispatched behavior. 7928 // Dispatched behavior.
7994 #ifdef DEBUG 7929 DECLARE_VERIFIER(Oddball)
7995 void OddballVerify();
7996 #endif
7997 7930
7998 // Initialize the fields. 7931 // Initialize the fields.
7999 MUST_USE_RESULT MaybeObject* Initialize(const char* to_string, 7932 MUST_USE_RESULT MaybeObject* Initialize(const char* to_string,
8000 Object* to_number, 7933 Object* to_number,
8001 byte kind); 7934 byte kind);
8002 7935
8003 // Layout description. 7936 // Layout description.
8004 static const int kToStringOffset = HeapObject::kHeaderSize; 7937 static const int kToStringOffset = HeapObject::kHeaderSize;
8005 static const int kToNumberOffset = kToStringOffset + kPointerSize; 7938 static const int kToNumberOffset = kToStringOffset + kPointerSize;
8006 static const int kKindOffset = kToNumberOffset + kPointerSize; 7939 static const int kKindOffset = kToNumberOffset + kPointerSize;
(...skipping 30 matching lines...) Expand all
8037 static inline JSGlobalPropertyCell* cast(Object* obj); 7970 static inline JSGlobalPropertyCell* cast(Object* obj);
8038 7971
8039 static inline JSGlobalPropertyCell* FromValueAddress(Address value) { 7972 static inline JSGlobalPropertyCell* FromValueAddress(Address value) {
8040 return cast(FromAddress(value - kValueOffset)); 7973 return cast(FromAddress(value - kValueOffset));
8041 } 7974 }
8042 7975
8043 inline Address ValueAddress() { 7976 inline Address ValueAddress() {
8044 return address() + kValueOffset; 7977 return address() + kValueOffset;
8045 } 7978 }
8046 7979
8047 #ifdef DEBUG 7980 DECLARE_VERIFIER(JSGlobalPropertyCell)
8048 void JSGlobalPropertyCellVerify(); 7981
8049 #endif
8050 #ifdef OBJECT_PRINT 7982 #ifdef OBJECT_PRINT
8051 inline void JSGlobalPropertyCellPrint() { 7983 inline void JSGlobalPropertyCellPrint() {
8052 JSGlobalPropertyCellPrint(stdout); 7984 JSGlobalPropertyCellPrint(stdout);
8053 } 7985 }
8054 void JSGlobalPropertyCellPrint(FILE* out); 7986 void JSGlobalPropertyCellPrint(FILE* out);
8055 #endif 7987 #endif
8056 7988
8057 // Layout description. 7989 // Layout description.
8058 static const int kValueOffset = HeapObject::kHeaderSize; 7990 static const int kValueOffset = HeapObject::kHeaderSize;
8059 static const int kSize = kValueOffset + kPointerSize; 7991 static const int kSize = kValueOffset + kPointerSize;
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
8142 int argc, 8074 int argc,
8143 Handle<Object> args[]); 8075 Handle<Object> args[]);
8144 8076
8145 // Dispatched behavior. 8077 // Dispatched behavior.
8146 #ifdef OBJECT_PRINT 8078 #ifdef OBJECT_PRINT
8147 inline void JSProxyPrint() { 8079 inline void JSProxyPrint() {
8148 JSProxyPrint(stdout); 8080 JSProxyPrint(stdout);
8149 } 8081 }
8150 void JSProxyPrint(FILE* out); 8082 void JSProxyPrint(FILE* out);
8151 #endif 8083 #endif
8152 #ifdef DEBUG 8084 DECLARE_VERIFIER(JSProxy)
8153 void JSProxyVerify();
8154 #endif
8155 8085
8156 // Layout description. We add padding so that a proxy has the same 8086 // Layout description. We add padding so that a proxy has the same
8157 // size as a virgin JSObject. This is essential for becoming a JSObject 8087 // size as a virgin JSObject. This is essential for becoming a JSObject
8158 // upon freeze. 8088 // upon freeze.
8159 static const int kHandlerOffset = HeapObject::kHeaderSize; 8089 static const int kHandlerOffset = HeapObject::kHeaderSize;
8160 static const int kHashOffset = kHandlerOffset + kPointerSize; 8090 static const int kHashOffset = kHandlerOffset + kPointerSize;
8161 static const int kPaddingOffset = kHashOffset + kPointerSize; 8091 static const int kPaddingOffset = kHashOffset + kPointerSize;
8162 static const int kSize = JSObject::kHeaderSize; 8092 static const int kSize = JSObject::kHeaderSize;
8163 static const int kHeaderSize = kPaddingOffset; 8093 static const int kHeaderSize = kPaddingOffset;
8164 static const int kPaddingSize = kSize - kPaddingOffset; 8094 static const int kPaddingSize = kSize - kPaddingOffset;
(...skipping 20 matching lines...) Expand all
8185 // Casting. 8115 // Casting.
8186 static inline JSFunctionProxy* cast(Object* obj); 8116 static inline JSFunctionProxy* cast(Object* obj);
8187 8117
8188 // Dispatched behavior. 8118 // Dispatched behavior.
8189 #ifdef OBJECT_PRINT 8119 #ifdef OBJECT_PRINT
8190 inline void JSFunctionProxyPrint() { 8120 inline void JSFunctionProxyPrint() {
8191 JSFunctionProxyPrint(stdout); 8121 JSFunctionProxyPrint(stdout);
8192 } 8122 }
8193 void JSFunctionProxyPrint(FILE* out); 8123 void JSFunctionProxyPrint(FILE* out);
8194 #endif 8124 #endif
8195 #ifdef DEBUG 8125 DECLARE_VERIFIER(JSFunctionProxy)
8196 void JSFunctionProxyVerify();
8197 #endif
8198 8126
8199 // Layout description. 8127 // Layout description.
8200 static const int kCallTrapOffset = JSProxy::kPaddingOffset; 8128 static const int kCallTrapOffset = JSProxy::kPaddingOffset;
8201 static const int kConstructTrapOffset = kCallTrapOffset + kPointerSize; 8129 static const int kConstructTrapOffset = kCallTrapOffset + kPointerSize;
8202 static const int kPaddingOffset = kConstructTrapOffset + kPointerSize; 8130 static const int kPaddingOffset = kConstructTrapOffset + kPointerSize;
8203 static const int kSize = JSFunction::kSize; 8131 static const int kSize = JSFunction::kSize;
8204 static const int kPaddingSize = kSize - kPaddingOffset; 8132 static const int kPaddingSize = kSize - kPaddingOffset;
8205 8133
8206 STATIC_CHECK(kPaddingSize >= 0); 8134 STATIC_CHECK(kPaddingSize >= 0);
8207 8135
(...skipping 14 matching lines...) Expand all
8222 8150
8223 // Casting. 8151 // Casting.
8224 static inline JSSet* cast(Object* obj); 8152 static inline JSSet* cast(Object* obj);
8225 8153
8226 #ifdef OBJECT_PRINT 8154 #ifdef OBJECT_PRINT
8227 inline void JSSetPrint() { 8155 inline void JSSetPrint() {
8228 JSSetPrint(stdout); 8156 JSSetPrint(stdout);
8229 } 8157 }
8230 void JSSetPrint(FILE* out); 8158 void JSSetPrint(FILE* out);
8231 #endif 8159 #endif
8232 #ifdef DEBUG 8160 DECLARE_VERIFIER(JSSet)
8233 void JSSetVerify();
8234 #endif
8235 8161
8236 static const int kTableOffset = JSObject::kHeaderSize; 8162 static const int kTableOffset = JSObject::kHeaderSize;
8237 static const int kSize = kTableOffset + kPointerSize; 8163 static const int kSize = kTableOffset + kPointerSize;
8238 8164
8239 private: 8165 private:
8240 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet); 8166 DISALLOW_IMPLICIT_CONSTRUCTORS(JSSet);
8241 }; 8167 };
8242 8168
8243 8169
8244 // The JSMap describes EcmaScript Harmony maps 8170 // The JSMap describes EcmaScript Harmony maps
8245 class JSMap: public JSObject { 8171 class JSMap: public JSObject {
8246 public: 8172 public:
8247 // [table]: the backing hash table mapping keys to values. 8173 // [table]: the backing hash table mapping keys to values.
8248 DECL_ACCESSORS(table, Object) 8174 DECL_ACCESSORS(table, Object)
8249 8175
8250 // Casting. 8176 // Casting.
8251 static inline JSMap* cast(Object* obj); 8177 static inline JSMap* cast(Object* obj);
8252 8178
8253 #ifdef OBJECT_PRINT 8179 #ifdef OBJECT_PRINT
8254 inline void JSMapPrint() { 8180 inline void JSMapPrint() {
8255 JSMapPrint(stdout); 8181 JSMapPrint(stdout);
8256 } 8182 }
8257 void JSMapPrint(FILE* out); 8183 void JSMapPrint(FILE* out);
8258 #endif 8184 #endif
8259 #ifdef DEBUG 8185 DECLARE_VERIFIER(JSMap)
8260 void JSMapVerify();
8261 #endif
8262 8186
8263 static const int kTableOffset = JSObject::kHeaderSize; 8187 static const int kTableOffset = JSObject::kHeaderSize;
8264 static const int kSize = kTableOffset + kPointerSize; 8188 static const int kSize = kTableOffset + kPointerSize;
8265 8189
8266 private: 8190 private:
8267 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap); 8191 DISALLOW_IMPLICIT_CONSTRUCTORS(JSMap);
8268 }; 8192 };
8269 8193
8270 8194
8271 // The JSWeakMap describes EcmaScript Harmony weak maps 8195 // The JSWeakMap describes EcmaScript Harmony weak maps
8272 class JSWeakMap: public JSObject { 8196 class JSWeakMap: public JSObject {
8273 public: 8197 public:
8274 // [table]: the backing hash table mapping keys to values. 8198 // [table]: the backing hash table mapping keys to values.
8275 DECL_ACCESSORS(table, Object) 8199 DECL_ACCESSORS(table, Object)
8276 8200
8277 // [next]: linked list of encountered weak maps during GC. 8201 // [next]: linked list of encountered weak maps during GC.
8278 DECL_ACCESSORS(next, Object) 8202 DECL_ACCESSORS(next, Object)
8279 8203
8280 // Casting. 8204 // Casting.
8281 static inline JSWeakMap* cast(Object* obj); 8205 static inline JSWeakMap* cast(Object* obj);
8282 8206
8283 #ifdef OBJECT_PRINT 8207 #ifdef OBJECT_PRINT
8284 inline void JSWeakMapPrint() { 8208 inline void JSWeakMapPrint() {
8285 JSWeakMapPrint(stdout); 8209 JSWeakMapPrint(stdout);
8286 } 8210 }
8287 void JSWeakMapPrint(FILE* out); 8211 void JSWeakMapPrint(FILE* out);
8288 #endif 8212 #endif
8289 #ifdef DEBUG 8213 DECLARE_VERIFIER(JSWeakMap)
8290 void JSWeakMapVerify();
8291 #endif
8292 8214
8293 static const int kTableOffset = JSObject::kHeaderSize; 8215 static const int kTableOffset = JSObject::kHeaderSize;
8294 static const int kNextOffset = kTableOffset + kPointerSize; 8216 static const int kNextOffset = kTableOffset + kPointerSize;
8295 static const int kSize = kNextOffset + kPointerSize; 8217 static const int kSize = kNextOffset + kPointerSize;
8296 8218
8297 private: 8219 private:
8298 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap); 8220 DISALLOW_IMPLICIT_CONSTRUCTORS(JSWeakMap);
8299 }; 8221 };
8300 8222
8301 8223
(...skipping 14 matching lines...) Expand all
8316 8238
8317 template<typename StaticVisitor> 8239 template<typename StaticVisitor>
8318 inline void ForeignIterateBody(); 8240 inline void ForeignIterateBody();
8319 8241
8320 #ifdef OBJECT_PRINT 8242 #ifdef OBJECT_PRINT
8321 inline void ForeignPrint() { 8243 inline void ForeignPrint() {
8322 ForeignPrint(stdout); 8244 ForeignPrint(stdout);
8323 } 8245 }
8324 void ForeignPrint(FILE* out); 8246 void ForeignPrint(FILE* out);
8325 #endif 8247 #endif
8326 #ifdef DEBUG 8248 DECLARE_VERIFIER(Foreign)
8327 void ForeignVerify();
8328 #endif
8329 8249
8330 // Layout description. 8250 // Layout description.
8331 8251
8332 static const int kForeignAddressOffset = HeapObject::kHeaderSize; 8252 static const int kForeignAddressOffset = HeapObject::kHeaderSize;
8333 static const int kSize = kForeignAddressOffset + kPointerSize; 8253 static const int kSize = kForeignAddressOffset + kPointerSize;
8334 8254
8335 STATIC_CHECK(kForeignAddressOffset == Internals::kForeignAddressOffset); 8255 STATIC_CHECK(kForeignAddressOffset == Internals::kForeignAddressOffset);
8336 8256
8337 private: 8257 private:
8338 DISALLOW_IMPLICIT_CONSTRUCTORS(Foreign); 8258 DISALLOW_IMPLICIT_CONSTRUCTORS(Foreign);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
8375 // least the stated size. 8295 // least the stated size.
8376 inline void EnsureSize(int minimum_size_of_backing_fixed_array); 8296 inline void EnsureSize(int minimum_size_of_backing_fixed_array);
8377 8297
8378 // Dispatched behavior. 8298 // Dispatched behavior.
8379 #ifdef OBJECT_PRINT 8299 #ifdef OBJECT_PRINT
8380 inline void JSArrayPrint() { 8300 inline void JSArrayPrint() {
8381 JSArrayPrint(stdout); 8301 JSArrayPrint(stdout);
8382 } 8302 }
8383 void JSArrayPrint(FILE* out); 8303 void JSArrayPrint(FILE* out);
8384 #endif 8304 #endif
8385 #ifdef DEBUG 8305 DECLARE_VERIFIER(JSArray)
8386 void JSArrayVerify();
8387 #endif
8388 8306
8389 // Number of element slots to pre-allocate for an empty array. 8307 // Number of element slots to pre-allocate for an empty array.
8390 static const int kPreallocatedArrayElements = 4; 8308 static const int kPreallocatedArrayElements = 4;
8391 8309
8392 // Layout description. 8310 // Layout description.
8393 static const int kLengthOffset = JSObject::kHeaderSize; 8311 static const int kLengthOffset = JSObject::kHeaderSize;
8394 static const int kSize = kLengthOffset + kPointerSize; 8312 static const int kSize = kLengthOffset + kPointerSize;
8395 8313
8396 private: 8314 private:
8397 // Expand the fixed array backing of a fast-case JSArray to at least 8315 // Expand the fixed array backing of a fast-case JSArray to at least
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
8456 inline bool IsCompatibleReceiver(Object* receiver); 8374 inline bool IsCompatibleReceiver(Object* receiver);
8457 8375
8458 static inline AccessorInfo* cast(Object* obj); 8376 static inline AccessorInfo* cast(Object* obj);
8459 8377
8460 #ifdef OBJECT_PRINT 8378 #ifdef OBJECT_PRINT
8461 inline void AccessorInfoPrint() { 8379 inline void AccessorInfoPrint() {
8462 AccessorInfoPrint(stdout); 8380 AccessorInfoPrint(stdout);
8463 } 8381 }
8464 void AccessorInfoPrint(FILE* out); 8382 void AccessorInfoPrint(FILE* out);
8465 #endif 8383 #endif
8466 #ifdef DEBUG 8384 DECLARE_VERIFIER(AccessorInfo)
8467 void AccessorInfoVerify();
8468 #endif
8469 8385
8470 static const int kGetterOffset = HeapObject::kHeaderSize; 8386 static const int kGetterOffset = HeapObject::kHeaderSize;
8471 static const int kSetterOffset = kGetterOffset + kPointerSize; 8387 static const int kSetterOffset = kGetterOffset + kPointerSize;
8472 static const int kDataOffset = kSetterOffset + kPointerSize; 8388 static const int kDataOffset = kSetterOffset + kPointerSize;
8473 static const int kNameOffset = kDataOffset + kPointerSize; 8389 static const int kNameOffset = kDataOffset + kPointerSize;
8474 static const int kFlagOffset = kNameOffset + kPointerSize; 8390 static const int kFlagOffset = kNameOffset + kPointerSize;
8475 static const int kExpectedReceiverTypeOffset = kFlagOffset + kPointerSize; 8391 static const int kExpectedReceiverTypeOffset = kFlagOffset + kPointerSize;
8476 static const int kSize = kExpectedReceiverTypeOffset + kPointerSize; 8392 static const int kSize = kExpectedReceiverTypeOffset + kPointerSize;
8477 8393
8478 private: 8394 private:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
8522 if (!setter->IsNull()) set_setter(setter); 8438 if (!setter->IsNull()) set_setter(setter);
8523 } 8439 }
8524 8440
8525 bool ContainsAccessor() { 8441 bool ContainsAccessor() {
8526 return IsJSAccessor(getter()) || IsJSAccessor(setter()); 8442 return IsJSAccessor(getter()) || IsJSAccessor(setter());
8527 } 8443 }
8528 8444
8529 #ifdef OBJECT_PRINT 8445 #ifdef OBJECT_PRINT
8530 void AccessorPairPrint(FILE* out = stdout); 8446 void AccessorPairPrint(FILE* out = stdout);
8531 #endif 8447 #endif
8532 #ifdef DEBUG 8448 DECLARE_VERIFIER(AccessorPair)
8533 void AccessorPairVerify();
8534 #endif
8535 8449
8536 static const int kGetterOffset = HeapObject::kHeaderSize; 8450 static const int kGetterOffset = HeapObject::kHeaderSize;
8537 static const int kSetterOffset = kGetterOffset + kPointerSize; 8451 static const int kSetterOffset = kGetterOffset + kPointerSize;
8538 static const int kSize = kSetterOffset + kPointerSize; 8452 static const int kSize = kSetterOffset + kPointerSize;
8539 8453
8540 private: 8454 private:
8541 // Strangely enough, in addition to functions and harmony proxies, the spec 8455 // Strangely enough, in addition to functions and harmony proxies, the spec
8542 // requires us to consider undefined as a kind of accessor, too: 8456 // requires us to consider undefined as a kind of accessor, too:
8543 // var obj = {}; 8457 // var obj = {};
8544 // Object.defineProperty(obj, "foo", {get: undefined}); 8458 // Object.defineProperty(obj, "foo", {get: undefined});
(...skipping 13 matching lines...) Expand all
8558 DECL_ACCESSORS(data, Object) 8472 DECL_ACCESSORS(data, Object)
8559 8473
8560 static inline AccessCheckInfo* cast(Object* obj); 8474 static inline AccessCheckInfo* cast(Object* obj);
8561 8475
8562 #ifdef OBJECT_PRINT 8476 #ifdef OBJECT_PRINT
8563 inline void AccessCheckInfoPrint() { 8477 inline void AccessCheckInfoPrint() {
8564 AccessCheckInfoPrint(stdout); 8478 AccessCheckInfoPrint(stdout);
8565 } 8479 }
8566 void AccessCheckInfoPrint(FILE* out); 8480 void AccessCheckInfoPrint(FILE* out);
8567 #endif 8481 #endif
8568 #ifdef DEBUG 8482 DECLARE_VERIFIER(AccessCheckInfo)
8569 void AccessCheckInfoVerify();
8570 #endif
8571 8483
8572 static const int kNamedCallbackOffset = HeapObject::kHeaderSize; 8484 static const int kNamedCallbackOffset = HeapObject::kHeaderSize;
8573 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize; 8485 static const int kIndexedCallbackOffset = kNamedCallbackOffset + kPointerSize;
8574 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize; 8486 static const int kDataOffset = kIndexedCallbackOffset + kPointerSize;
8575 static const int kSize = kDataOffset + kPointerSize; 8487 static const int kSize = kDataOffset + kPointerSize;
8576 8488
8577 private: 8489 private:
8578 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo); 8490 DISALLOW_IMPLICIT_CONSTRUCTORS(AccessCheckInfo);
8579 }; 8491 };
8580 8492
8581 8493
8582 class InterceptorInfo: public Struct { 8494 class InterceptorInfo: public Struct {
8583 public: 8495 public:
8584 DECL_ACCESSORS(getter, Object) 8496 DECL_ACCESSORS(getter, Object)
8585 DECL_ACCESSORS(setter, Object) 8497 DECL_ACCESSORS(setter, Object)
8586 DECL_ACCESSORS(query, Object) 8498 DECL_ACCESSORS(query, Object)
8587 DECL_ACCESSORS(deleter, Object) 8499 DECL_ACCESSORS(deleter, Object)
8588 DECL_ACCESSORS(enumerator, Object) 8500 DECL_ACCESSORS(enumerator, Object)
8589 DECL_ACCESSORS(data, Object) 8501 DECL_ACCESSORS(data, Object)
8590 8502
8591 static inline InterceptorInfo* cast(Object* obj); 8503 static inline InterceptorInfo* cast(Object* obj);
8592 8504
8593 #ifdef OBJECT_PRINT 8505 #ifdef OBJECT_PRINT
8594 inline void InterceptorInfoPrint() { 8506 inline void InterceptorInfoPrint() {
8595 InterceptorInfoPrint(stdout); 8507 InterceptorInfoPrint(stdout);
8596 } 8508 }
8597 void InterceptorInfoPrint(FILE* out); 8509 void InterceptorInfoPrint(FILE* out);
8598 #endif 8510 #endif
8599 #ifdef DEBUG 8511 DECLARE_VERIFIER(InterceptorInfo)
8600 void InterceptorInfoVerify();
8601 #endif
8602 8512
8603 static const int kGetterOffset = HeapObject::kHeaderSize; 8513 static const int kGetterOffset = HeapObject::kHeaderSize;
8604 static const int kSetterOffset = kGetterOffset + kPointerSize; 8514 static const int kSetterOffset = kGetterOffset + kPointerSize;
8605 static const int kQueryOffset = kSetterOffset + kPointerSize; 8515 static const int kQueryOffset = kSetterOffset + kPointerSize;
8606 static const int kDeleterOffset = kQueryOffset + kPointerSize; 8516 static const int kDeleterOffset = kQueryOffset + kPointerSize;
8607 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize; 8517 static const int kEnumeratorOffset = kDeleterOffset + kPointerSize;
8608 static const int kDataOffset = kEnumeratorOffset + kPointerSize; 8518 static const int kDataOffset = kEnumeratorOffset + kPointerSize;
8609 static const int kSize = kDataOffset + kPointerSize; 8519 static const int kSize = kDataOffset + kPointerSize;
8610 8520
8611 private: 8521 private:
8612 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo); 8522 DISALLOW_IMPLICIT_CONSTRUCTORS(InterceptorInfo);
8613 }; 8523 };
8614 8524
8615 8525
8616 class CallHandlerInfo: public Struct { 8526 class CallHandlerInfo: public Struct {
8617 public: 8527 public:
8618 DECL_ACCESSORS(callback, Object) 8528 DECL_ACCESSORS(callback, Object)
8619 DECL_ACCESSORS(data, Object) 8529 DECL_ACCESSORS(data, Object)
8620 8530
8621 static inline CallHandlerInfo* cast(Object* obj); 8531 static inline CallHandlerInfo* cast(Object* obj);
8622 8532
8623 #ifdef OBJECT_PRINT 8533 #ifdef OBJECT_PRINT
8624 inline void CallHandlerInfoPrint() { 8534 inline void CallHandlerInfoPrint() {
8625 CallHandlerInfoPrint(stdout); 8535 CallHandlerInfoPrint(stdout);
8626 } 8536 }
8627 void CallHandlerInfoPrint(FILE* out); 8537 void CallHandlerInfoPrint(FILE* out);
8628 #endif 8538 #endif
8629 #ifdef DEBUG 8539 DECLARE_VERIFIER(CallHandlerInfo)
8630 void CallHandlerInfoVerify();
8631 #endif
8632 8540
8633 static const int kCallbackOffset = HeapObject::kHeaderSize; 8541 static const int kCallbackOffset = HeapObject::kHeaderSize;
8634 static const int kDataOffset = kCallbackOffset + kPointerSize; 8542 static const int kDataOffset = kCallbackOffset + kPointerSize;
8635 static const int kSize = kDataOffset + kPointerSize; 8543 static const int kSize = kDataOffset + kPointerSize;
8636 8544
8637 private: 8545 private:
8638 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo); 8546 DISALLOW_IMPLICIT_CONSTRUCTORS(CallHandlerInfo);
8639 }; 8547 };
8640 8548
8641 8549
8642 class TemplateInfo: public Struct { 8550 class TemplateInfo: public Struct {
8643 public: 8551 public:
8644 DECL_ACCESSORS(tag, Object) 8552 DECL_ACCESSORS(tag, Object)
8645 DECL_ACCESSORS(property_list, Object) 8553 DECL_ACCESSORS(property_list, Object)
8646 8554
8647 #ifdef DEBUG 8555 DECLARE_VERIFIER(TemplateInfo)
8648 void TemplateInfoVerify();
8649 #endif
8650 8556
8651 static const int kTagOffset = HeapObject::kHeaderSize; 8557 static const int kTagOffset = HeapObject::kHeaderSize;
8652 static const int kPropertyListOffset = kTagOffset + kPointerSize; 8558 static const int kPropertyListOffset = kTagOffset + kPointerSize;
8653 static const int kHeaderSize = kPropertyListOffset + kPointerSize; 8559 static const int kHeaderSize = kPropertyListOffset + kPointerSize;
8654 8560
8655 private: 8561 private:
8656 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo); 8562 DISALLOW_IMPLICIT_CONSTRUCTORS(TemplateInfo);
8657 }; 8563 };
8658 8564
8659 8565
(...skipping 22 matching lines...) Expand all
8682 DECL_BOOLEAN_ACCESSORS(read_only_prototype) 8588 DECL_BOOLEAN_ACCESSORS(read_only_prototype)
8683 8589
8684 static inline FunctionTemplateInfo* cast(Object* obj); 8590 static inline FunctionTemplateInfo* cast(Object* obj);
8685 8591
8686 #ifdef OBJECT_PRINT 8592 #ifdef OBJECT_PRINT
8687 inline void FunctionTemplateInfoPrint() { 8593 inline void FunctionTemplateInfoPrint() {
8688 FunctionTemplateInfoPrint(stdout); 8594 FunctionTemplateInfoPrint(stdout);
8689 } 8595 }
8690 void FunctionTemplateInfoPrint(FILE* out); 8596 void FunctionTemplateInfoPrint(FILE* out);
8691 #endif 8597 #endif
8692 #ifdef DEBUG 8598 DECLARE_VERIFIER(FunctionTemplateInfo)
8693 void FunctionTemplateInfoVerify();
8694 #endif
8695 8599
8696 static const int kSerialNumberOffset = TemplateInfo::kHeaderSize; 8600 static const int kSerialNumberOffset = TemplateInfo::kHeaderSize;
8697 static const int kCallCodeOffset = kSerialNumberOffset + kPointerSize; 8601 static const int kCallCodeOffset = kSerialNumberOffset + kPointerSize;
8698 static const int kPropertyAccessorsOffset = kCallCodeOffset + kPointerSize; 8602 static const int kPropertyAccessorsOffset = kCallCodeOffset + kPointerSize;
8699 static const int kPrototypeTemplateOffset = 8603 static const int kPrototypeTemplateOffset =
8700 kPropertyAccessorsOffset + kPointerSize; 8604 kPropertyAccessorsOffset + kPointerSize;
8701 static const int kParentTemplateOffset = 8605 static const int kParentTemplateOffset =
8702 kPrototypeTemplateOffset + kPointerSize; 8606 kPrototypeTemplateOffset + kPointerSize;
8703 static const int kNamedPropertyHandlerOffset = 8607 static const int kNamedPropertyHandlerOffset =
8704 kParentTemplateOffset + kPointerSize; 8608 kParentTemplateOffset + kPointerSize;
(...skipping 26 matching lines...) Expand all
8731 DECL_ACCESSORS(internal_field_count, Object) 8635 DECL_ACCESSORS(internal_field_count, Object)
8732 8636
8733 static inline ObjectTemplateInfo* cast(Object* obj); 8637 static inline ObjectTemplateInfo* cast(Object* obj);
8734 8638
8735 #ifdef OBJECT_PRINT 8639 #ifdef OBJECT_PRINT
8736 inline void ObjectTemplateInfoPrint() { 8640 inline void ObjectTemplateInfoPrint() {
8737 ObjectTemplateInfoPrint(stdout); 8641 ObjectTemplateInfoPrint(stdout);
8738 } 8642 }
8739 void ObjectTemplateInfoPrint(FILE* out); 8643 void ObjectTemplateInfoPrint(FILE* out);
8740 #endif 8644 #endif
8741 #ifdef DEBUG 8645 DECLARE_VERIFIER(ObjectTemplateInfo)
8742 void ObjectTemplateInfoVerify();
8743 #endif
8744 8646
8745 static const int kConstructorOffset = TemplateInfo::kHeaderSize; 8647 static const int kConstructorOffset = TemplateInfo::kHeaderSize;
8746 static const int kInternalFieldCountOffset = 8648 static const int kInternalFieldCountOffset =
8747 kConstructorOffset + kPointerSize; 8649 kConstructorOffset + kPointerSize;
8748 static const int kSize = kInternalFieldCountOffset + kPointerSize; 8650 static const int kSize = kInternalFieldCountOffset + kPointerSize;
8749 }; 8651 };
8750 8652
8751 8653
8752 class SignatureInfo: public Struct { 8654 class SignatureInfo: public Struct {
8753 public: 8655 public:
8754 DECL_ACCESSORS(receiver, Object) 8656 DECL_ACCESSORS(receiver, Object)
8755 DECL_ACCESSORS(args, Object) 8657 DECL_ACCESSORS(args, Object)
8756 8658
8757 static inline SignatureInfo* cast(Object* obj); 8659 static inline SignatureInfo* cast(Object* obj);
8758 8660
8759 #ifdef OBJECT_PRINT 8661 #ifdef OBJECT_PRINT
8760 inline void SignatureInfoPrint() { 8662 inline void SignatureInfoPrint() {
8761 SignatureInfoPrint(stdout); 8663 SignatureInfoPrint(stdout);
8762 } 8664 }
8763 void SignatureInfoPrint(FILE* out); 8665 void SignatureInfoPrint(FILE* out);
8764 #endif 8666 #endif
8765 #ifdef DEBUG 8667 DECLARE_VERIFIER(SignatureInfo)
8766 void SignatureInfoVerify();
8767 #endif
8768 8668
8769 static const int kReceiverOffset = Struct::kHeaderSize; 8669 static const int kReceiverOffset = Struct::kHeaderSize;
8770 static const int kArgsOffset = kReceiverOffset + kPointerSize; 8670 static const int kArgsOffset = kReceiverOffset + kPointerSize;
8771 static const int kSize = kArgsOffset + kPointerSize; 8671 static const int kSize = kArgsOffset + kPointerSize;
8772 8672
8773 private: 8673 private:
8774 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo); 8674 DISALLOW_IMPLICIT_CONSTRUCTORS(SignatureInfo);
8775 }; 8675 };
8776 8676
8777 8677
8778 class TypeSwitchInfo: public Struct { 8678 class TypeSwitchInfo: public Struct {
8779 public: 8679 public:
8780 DECL_ACCESSORS(types, Object) 8680 DECL_ACCESSORS(types, Object)
8781 8681
8782 static inline TypeSwitchInfo* cast(Object* obj); 8682 static inline TypeSwitchInfo* cast(Object* obj);
8783 8683
8784 #ifdef OBJECT_PRINT 8684 #ifdef OBJECT_PRINT
8785 inline void TypeSwitchInfoPrint() { 8685 inline void TypeSwitchInfoPrint() {
8786 TypeSwitchInfoPrint(stdout); 8686 TypeSwitchInfoPrint(stdout);
8787 } 8687 }
8788 void TypeSwitchInfoPrint(FILE* out); 8688 void TypeSwitchInfoPrint(FILE* out);
8789 #endif 8689 #endif
8790 #ifdef DEBUG 8690 DECLARE_VERIFIER(TypeSwitchInfo)
8791 void TypeSwitchInfoVerify();
8792 #endif
8793 8691
8794 static const int kTypesOffset = Struct::kHeaderSize; 8692 static const int kTypesOffset = Struct::kHeaderSize;
8795 static const int kSize = kTypesOffset + kPointerSize; 8693 static const int kSize = kTypesOffset + kPointerSize;
8796 }; 8694 };
8797 8695
8798 8696
8799 #ifdef ENABLE_DEBUGGER_SUPPORT 8697 #ifdef ENABLE_DEBUGGER_SUPPORT
8800 // The DebugInfo class holds additional information for a function being 8698 // The DebugInfo class holds additional information for a function being
8801 // debugged. 8699 // debugged.
8802 class DebugInfo: public Struct { 8700 class DebugInfo: public Struct {
(...skipping 29 matching lines...) Expand all
8832 int GetBreakPointCount(); 8730 int GetBreakPointCount();
8833 8731
8834 static inline DebugInfo* cast(Object* obj); 8732 static inline DebugInfo* cast(Object* obj);
8835 8733
8836 #ifdef OBJECT_PRINT 8734 #ifdef OBJECT_PRINT
8837 inline void DebugInfoPrint() { 8735 inline void DebugInfoPrint() {
8838 DebugInfoPrint(stdout); 8736 DebugInfoPrint(stdout);
8839 } 8737 }
8840 void DebugInfoPrint(FILE* out); 8738 void DebugInfoPrint(FILE* out);
8841 #endif 8739 #endif
8842 #ifdef DEBUG 8740 DECLARE_VERIFIER(DebugInfo)
8843 void DebugInfoVerify();
8844 #endif
8845 8741
8846 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize; 8742 static const int kSharedFunctionInfoIndex = Struct::kHeaderSize;
8847 static const int kOriginalCodeIndex = kSharedFunctionInfoIndex + kPointerSize; 8743 static const int kOriginalCodeIndex = kSharedFunctionInfoIndex + kPointerSize;
8848 static const int kPatchedCodeIndex = kOriginalCodeIndex + kPointerSize; 8744 static const int kPatchedCodeIndex = kOriginalCodeIndex + kPointerSize;
8849 static const int kActiveBreakPointsCountIndex = 8745 static const int kActiveBreakPointsCountIndex =
8850 kPatchedCodeIndex + kPointerSize; 8746 kPatchedCodeIndex + kPointerSize;
8851 static const int kBreakPointsStateIndex = 8747 static const int kBreakPointsStateIndex =
8852 kActiveBreakPointsCountIndex + kPointerSize; 8748 kActiveBreakPointsCountIndex + kPointerSize;
8853 static const int kSize = kBreakPointsStateIndex + kPointerSize; 8749 static const int kSize = kBreakPointsStateIndex + kPointerSize;
8854 8750
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
8890 int GetBreakPointCount(); 8786 int GetBreakPointCount();
8891 8787
8892 static inline BreakPointInfo* cast(Object* obj); 8788 static inline BreakPointInfo* cast(Object* obj);
8893 8789
8894 #ifdef OBJECT_PRINT 8790 #ifdef OBJECT_PRINT
8895 inline void BreakPointInfoPrint() { 8791 inline void BreakPointInfoPrint() {
8896 BreakPointInfoPrint(stdout); 8792 BreakPointInfoPrint(stdout);
8897 } 8793 }
8898 void BreakPointInfoPrint(FILE* out); 8794 void BreakPointInfoPrint(FILE* out);
8899 #endif 8795 #endif
8900 #ifdef DEBUG 8796 DECLARE_VERIFIER(BreakPointInfo)
8901 void BreakPointInfoVerify();
8902 #endif
8903 8797
8904 static const int kCodePositionIndex = Struct::kHeaderSize; 8798 static const int kCodePositionIndex = Struct::kHeaderSize;
8905 static const int kSourcePositionIndex = kCodePositionIndex + kPointerSize; 8799 static const int kSourcePositionIndex = kCodePositionIndex + kPointerSize;
8906 static const int kStatementPositionIndex = 8800 static const int kStatementPositionIndex =
8907 kSourcePositionIndex + kPointerSize; 8801 kSourcePositionIndex + kPointerSize;
8908 static const int kBreakPointObjectsIndex = 8802 static const int kBreakPointObjectsIndex =
8909 kStatementPositionIndex + kPointerSize; 8803 kStatementPositionIndex + kPointerSize;
8910 static const int kSize = kBreakPointObjectsIndex + kPointerSize; 8804 static const int kSize = kBreakPointObjectsIndex + kPointerSize;
8911 8805
8912 private: 8806 private:
8913 DISALLOW_IMPLICIT_CONSTRUCTORS(BreakPointInfo); 8807 DISALLOW_IMPLICIT_CONSTRUCTORS(BreakPointInfo);
8914 }; 8808 };
8915 #endif // ENABLE_DEBUGGER_SUPPORT 8809 #endif // ENABLE_DEBUGGER_SUPPORT
8916 8810
8917 8811
8918 #undef DECL_BOOLEAN_ACCESSORS 8812 #undef DECL_BOOLEAN_ACCESSORS
8919 #undef DECL_ACCESSORS 8813 #undef DECL_ACCESSORS
Michael Starzinger 2012/10/12 10:53:16 We should also undef the DECLARE_VERIFIER macro he
mvstanton1 2012/10/12 11:16:27 Done.
8920 8814
8921 #define VISITOR_SYNCHRONIZATION_TAGS_LIST(V) \ 8815 #define VISITOR_SYNCHRONIZATION_TAGS_LIST(V) \
8922 V(kSymbolTable, "symbol_table", "(Symbols)") \ 8816 V(kSymbolTable, "symbol_table", "(Symbols)") \
8923 V(kExternalStringsTable, "external_strings_table", "(External strings)") \ 8817 V(kExternalStringsTable, "external_strings_table", "(External strings)") \
8924 V(kStrongRootList, "strong_root_list", "(Strong roots)") \ 8818 V(kStrongRootList, "strong_root_list", "(Strong roots)") \
8925 V(kSymbol, "symbol", "(Symbol)") \ 8819 V(kSymbol, "symbol", "(Symbol)") \
8926 V(kBootstrapper, "bootstrapper", "(Bootstrapper)") \ 8820 V(kBootstrapper, "bootstrapper", "(Bootstrapper)") \
8927 V(kTop, "top", "(Isolate)") \ 8821 V(kTop, "top", "(Isolate)") \
8928 V(kRelocatable, "relocatable", "(Relocatable)") \ 8822 V(kRelocatable, "relocatable", "(Relocatable)") \
8929 V(kDebug, "debug", "(Debugger)") \ 8823 V(kDebug, "debug", "(Debugger)") \
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
9039 } else { 8933 } else {
9040 value &= ~(1 << bit_position); 8934 value &= ~(1 << bit_position);
9041 } 8935 }
9042 return value; 8936 return value;
9043 } 8937 }
9044 }; 8938 };
9045 8939
9046 } } // namespace v8::internal 8940 } } // namespace v8::internal
9047 8941
9048 #endif // V8_OBJECTS_H_ 8942 #endif // V8_OBJECTS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698