| OLD | NEW |
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 | 194 |
| 195 | 195 |
| 196 // PropertyNormalizationMode is used to specify whether to keep | 196 // PropertyNormalizationMode is used to specify whether to keep |
| 197 // inobject properties when normalizing properties of a JSObject. | 197 // inobject properties when normalizing properties of a JSObject. |
| 198 enum PropertyNormalizationMode { | 198 enum PropertyNormalizationMode { |
| 199 CLEAR_INOBJECT_PROPERTIES, | 199 CLEAR_INOBJECT_PROPERTIES, |
| 200 KEEP_INOBJECT_PROPERTIES | 200 KEEP_INOBJECT_PROPERTIES |
| 201 }; | 201 }; |
| 202 | 202 |
| 203 | 203 |
| 204 // Instance size sentinel for objects of variable size. |
| 205 static const int kVariableSizeSentinel = 0; |
| 206 |
| 207 |
| 204 // All Maps have a field instance_type containing a InstanceType. | 208 // All Maps have a field instance_type containing a InstanceType. |
| 205 // It describes the type of the instances. | 209 // It describes the type of the instances. |
| 206 // | 210 // |
| 207 // As an example, a JavaScript object is a heap object and its map | 211 // As an example, a JavaScript object is a heap object and its map |
| 208 // instance_type is JS_OBJECT_TYPE. | 212 // instance_type is JS_OBJECT_TYPE. |
| 209 // | 213 // |
| 210 // The names of the string instance types are intended to systematically | 214 // The names of the string instance types are intended to systematically |
| 211 // mirror their encoding in the instance_type field of the map. The default | 215 // mirror their encoding in the instance_type field of the map. The default |
| 212 // encoding is considered TWO_BYTE. It is not mentioned in the name. ASCII | 216 // encoding is considered TWO_BYTE. It is not mentioned in the name. ASCII |
| 213 // encoding is mentioned explicitly in the name. Likewise, the default | 217 // encoding is mentioned explicitly in the name. Likewise, the default |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 | 301 |
| 298 #define INSTANCE_TYPE_LIST(V) \ | 302 #define INSTANCE_TYPE_LIST(V) \ |
| 299 INSTANCE_TYPE_LIST_ALL(V) \ | 303 INSTANCE_TYPE_LIST_ALL(V) \ |
| 300 INSTANCE_TYPE_LIST_DEBUGGER(V) | 304 INSTANCE_TYPE_LIST_DEBUGGER(V) |
| 301 | 305 |
| 302 | 306 |
| 303 // Since string types are not consecutive, this macro is used to | 307 // Since string types are not consecutive, this macro is used to |
| 304 // iterate over them. | 308 // iterate over them. |
| 305 #define STRING_TYPE_LIST(V) \ | 309 #define STRING_TYPE_LIST(V) \ |
| 306 V(SYMBOL_TYPE, \ | 310 V(SYMBOL_TYPE, \ |
| 307 SeqTwoByteString::kAlignedSize, \ | 311 kVariableSizeSentinel, \ |
| 308 symbol, \ | 312 symbol, \ |
| 309 Symbol) \ | 313 Symbol) \ |
| 310 V(ASCII_SYMBOL_TYPE, \ | 314 V(ASCII_SYMBOL_TYPE, \ |
| 311 SeqAsciiString::kAlignedSize, \ | 315 kVariableSizeSentinel, \ |
| 312 ascii_symbol, \ | 316 ascii_symbol, \ |
| 313 AsciiSymbol) \ | 317 AsciiSymbol) \ |
| 314 V(CONS_SYMBOL_TYPE, \ | 318 V(CONS_SYMBOL_TYPE, \ |
| 315 ConsString::kSize, \ | 319 ConsString::kSize, \ |
| 316 cons_symbol, \ | 320 cons_symbol, \ |
| 317 ConsSymbol) \ | 321 ConsSymbol) \ |
| 318 V(CONS_ASCII_SYMBOL_TYPE, \ | 322 V(CONS_ASCII_SYMBOL_TYPE, \ |
| 319 ConsString::kSize, \ | 323 ConsString::kSize, \ |
| 320 cons_ascii_symbol, \ | 324 cons_ascii_symbol, \ |
| 321 ConsAsciiSymbol) \ | 325 ConsAsciiSymbol) \ |
| 322 V(EXTERNAL_SYMBOL_TYPE, \ | 326 V(EXTERNAL_SYMBOL_TYPE, \ |
| 323 ExternalTwoByteString::kSize, \ | 327 ExternalTwoByteString::kSize, \ |
| 324 external_symbol, \ | 328 external_symbol, \ |
| 325 ExternalSymbol) \ | 329 ExternalSymbol) \ |
| 326 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \ | 330 V(EXTERNAL_SYMBOL_WITH_ASCII_DATA_TYPE, \ |
| 327 ExternalTwoByteString::kSize, \ | 331 ExternalTwoByteString::kSize, \ |
| 328 external_symbol_with_ascii_data, \ | 332 external_symbol_with_ascii_data, \ |
| 329 ExternalSymbolWithAsciiData) \ | 333 ExternalSymbolWithAsciiData) \ |
| 330 V(EXTERNAL_ASCII_SYMBOL_TYPE, \ | 334 V(EXTERNAL_ASCII_SYMBOL_TYPE, \ |
| 331 ExternalAsciiString::kSize, \ | 335 ExternalAsciiString::kSize, \ |
| 332 external_ascii_symbol, \ | 336 external_ascii_symbol, \ |
| 333 ExternalAsciiSymbol) \ | 337 ExternalAsciiSymbol) \ |
| 334 V(STRING_TYPE, \ | 338 V(STRING_TYPE, \ |
| 335 SeqTwoByteString::kAlignedSize, \ | 339 kVariableSizeSentinel, \ |
| 336 string, \ | 340 string, \ |
| 337 String) \ | 341 String) \ |
| 338 V(ASCII_STRING_TYPE, \ | 342 V(ASCII_STRING_TYPE, \ |
| 339 SeqAsciiString::kAlignedSize, \ | 343 kVariableSizeSentinel, \ |
| 340 ascii_string, \ | 344 ascii_string, \ |
| 341 AsciiString) \ | 345 AsciiString) \ |
| 342 V(CONS_STRING_TYPE, \ | 346 V(CONS_STRING_TYPE, \ |
| 343 ConsString::kSize, \ | 347 ConsString::kSize, \ |
| 344 cons_string, \ | 348 cons_string, \ |
| 345 ConsString) \ | 349 ConsString) \ |
| 346 V(CONS_ASCII_STRING_TYPE, \ | 350 V(CONS_ASCII_STRING_TYPE, \ |
| 347 ConsString::kSize, \ | 351 ConsString::kSize, \ |
| 348 cons_ascii_string, \ | 352 cons_ascii_string, \ |
| 349 ConsAsciiString) \ | 353 ConsAsciiString) \ |
| 350 V(EXTERNAL_STRING_TYPE, \ | 354 V(EXTERNAL_STRING_TYPE, \ |
| 351 ExternalTwoByteString::kSize, \ | 355 ExternalTwoByteString::kSize, \ |
| 352 external_string, \ | 356 external_string, \ |
| 353 ExternalString) \ | 357 ExternalString) \ |
| 354 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \ | 358 V(EXTERNAL_STRING_WITH_ASCII_DATA_TYPE, \ |
| 355 ExternalTwoByteString::kSize, \ | 359 ExternalTwoByteString::kSize, \ |
| 356 external_string_with_ascii_data, \ | 360 external_string_with_ascii_data, \ |
| 357 ExternalStringWithAsciiData) \ | 361 ExternalStringWithAsciiData) \ |
| 358 V(EXTERNAL_ASCII_STRING_TYPE, \ | 362 V(EXTERNAL_ASCII_STRING_TYPE, \ |
| 359 ExternalAsciiString::kSize, \ | 363 ExternalAsciiString::kSize, \ |
| 360 external_ascii_string, \ | 364 external_ascii_string, \ |
| 361 ExternalAsciiString) \ | 365 ExternalAsciiString) |
| 362 | 366 |
| 363 // A struct is a simple object a set of object-valued fields. Including an | 367 // A struct is a simple object a set of object-valued fields. Including an |
| 364 // object type in this causes the compiler to generate most of the boilerplate | 368 // object type in this causes the compiler to generate most of the boilerplate |
| 365 // code for the class including allocation and garbage collection routines, | 369 // code for the class including allocation and garbage collection routines, |
| 366 // casts and predicates. All you need to define is the class, methods and | 370 // casts and predicates. All you need to define is the class, methods and |
| 367 // object verification routines. Easy, no? | 371 // object verification routines. Easy, no? |
| 368 // | 372 // |
| 369 // Note that for subtle reasons related to the ordering or numerical values of | 373 // Note that for subtle reasons related to the ordering or numerical values of |
| 370 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST | 374 // type tags, elements in this list have to be added to the INSTANCE_TYPE_LIST |
| 371 // manually. | 375 // manually. |
| (...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1011 | 1015 |
| 1012 // Iterates over pointers contained in the object (including the Map) | 1016 // Iterates over pointers contained in the object (including the Map) |
| 1013 void Iterate(ObjectVisitor* v); | 1017 void Iterate(ObjectVisitor* v); |
| 1014 | 1018 |
| 1015 // Iterates over all pointers contained in the object except the | 1019 // Iterates over all pointers contained in the object except the |
| 1016 // first map pointer. The object type is given in the first | 1020 // first map pointer. The object type is given in the first |
| 1017 // parameter. This function does not access the map pointer in the | 1021 // parameter. This function does not access the map pointer in the |
| 1018 // object, and so is safe to call while the map pointer is modified. | 1022 // object, and so is safe to call while the map pointer is modified. |
| 1019 void IterateBody(InstanceType type, int object_size, ObjectVisitor* v); | 1023 void IterateBody(InstanceType type, int object_size, ObjectVisitor* v); |
| 1020 | 1024 |
| 1021 // This method only applies to struct objects. Iterates over all the fields | |
| 1022 // of this struct. | |
| 1023 void IterateStructBody(int object_size, ObjectVisitor* v); | |
| 1024 | |
| 1025 // Returns the heap object's size in bytes | 1025 // Returns the heap object's size in bytes |
| 1026 inline int Size(); | 1026 inline int Size(); |
| 1027 | 1027 |
| 1028 // Given a heap object's map pointer, returns the heap size in bytes | 1028 // Given a heap object's map pointer, returns the heap size in bytes |
| 1029 // Useful when the map pointer field is used for other purposes. | 1029 // Useful when the map pointer field is used for other purposes. |
| 1030 // GC internal. | 1030 // GC internal. |
| 1031 inline int SizeFromMap(Map* map); | 1031 inline int SizeFromMap(Map* map); |
| 1032 | 1032 |
| 1033 // Support for the marking heap objects during the marking phase of GC. | 1033 // Support for the marking heap objects during the marking phase of GC. |
| 1034 // True if the object is marked live. | 1034 // True if the object is marked live. |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1093 | 1093 |
| 1094 STATIC_CHECK(kMapOffset == Internals::kHeapObjectMapOffset); | 1094 STATIC_CHECK(kMapOffset == Internals::kHeapObjectMapOffset); |
| 1095 | 1095 |
| 1096 protected: | 1096 protected: |
| 1097 // helpers for calling an ObjectVisitor to iterate over pointers in the | 1097 // helpers for calling an ObjectVisitor to iterate over pointers in the |
| 1098 // half-open range [start, end) specified as integer offsets | 1098 // half-open range [start, end) specified as integer offsets |
| 1099 inline void IteratePointers(ObjectVisitor* v, int start, int end); | 1099 inline void IteratePointers(ObjectVisitor* v, int start, int end); |
| 1100 // as above, for the single element at "offset" | 1100 // as above, for the single element at "offset" |
| 1101 inline void IteratePointer(ObjectVisitor* v, int offset); | 1101 inline void IteratePointer(ObjectVisitor* v, int offset); |
| 1102 | 1102 |
| 1103 // Computes the object size from the map. | |
| 1104 // Should only be used from SizeFromMap. | |
| 1105 int SlowSizeFromMap(Map* map); | |
| 1106 | |
| 1107 private: | 1103 private: |
| 1108 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapObject); | 1104 DISALLOW_IMPLICIT_CONSTRUCTORS(HeapObject); |
| 1109 }; | 1105 }; |
| 1110 | 1106 |
| 1111 | 1107 |
| 1112 #define SLOT_ADDR(obj, offset) \ | 1108 #define SLOT_ADDR(obj, offset) \ |
| 1113 reinterpret_cast<Object**>((obj)->address() + offset) | 1109 reinterpret_cast<Object**>((obj)->address() + offset) |
| 1114 | 1110 |
| 1115 // This class describes a body of an object of a fixed size | 1111 // This class describes a body of an object of a fixed size |
| 1116 // in which all pointer fields are located in the [start_offset, end_offset) | 1112 // in which all pointer fields are located in the [start_offset, end_offset) |
| (...skipping 1763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2880 static inline InlineCacheState ExtractICStateFromFlags(Flags flags); | 2876 static inline InlineCacheState ExtractICStateFromFlags(Flags flags); |
| 2881 static inline InLoopFlag ExtractICInLoopFromFlags(Flags flags); | 2877 static inline InLoopFlag ExtractICInLoopFromFlags(Flags flags); |
| 2882 static inline PropertyType ExtractTypeFromFlags(Flags flags); | 2878 static inline PropertyType ExtractTypeFromFlags(Flags flags); |
| 2883 static inline int ExtractArgumentsCountFromFlags(Flags flags); | 2879 static inline int ExtractArgumentsCountFromFlags(Flags flags); |
| 2884 static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags); | 2880 static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags); |
| 2885 static inline Flags RemoveTypeFromFlags(Flags flags); | 2881 static inline Flags RemoveTypeFromFlags(Flags flags); |
| 2886 | 2882 |
| 2887 // Convert a target address into a code object. | 2883 // Convert a target address into a code object. |
| 2888 static inline Code* GetCodeFromTargetAddress(Address address); | 2884 static inline Code* GetCodeFromTargetAddress(Address address); |
| 2889 | 2885 |
| 2886 // Convert an entry address into an object. |
| 2887 static inline Object* GetObjectFromEntryAddress(Address location_of_address); |
| 2888 |
| 2890 // Returns the address of the first instruction. | 2889 // Returns the address of the first instruction. |
| 2891 inline byte* instruction_start(); | 2890 inline byte* instruction_start(); |
| 2892 | 2891 |
| 2893 // Returns the address right after the last instruction. | 2892 // Returns the address right after the last instruction. |
| 2894 inline byte* instruction_end(); | 2893 inline byte* instruction_end(); |
| 2895 | 2894 |
| 2896 // Returns the size of the instructions, padding, and relocation information. | 2895 // Returns the size of the instructions, padding, and relocation information. |
| 2897 inline int body_size(); | 2896 inline int body_size(); |
| 2898 | 2897 |
| 2899 // Returns the address of the first relocation info (read backwards!). | 2898 // Returns the address of the first relocation info (read backwards!). |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2986 }; | 2985 }; |
| 2987 | 2986 |
| 2988 | 2987 |
| 2989 // All heap objects have a Map that describes their structure. | 2988 // All heap objects have a Map that describes their structure. |
| 2990 // A Map contains information about: | 2989 // A Map contains information about: |
| 2991 // - Size information about the object | 2990 // - Size information about the object |
| 2992 // - How to iterate over an object (for garbage collection) | 2991 // - How to iterate over an object (for garbage collection) |
| 2993 class Map: public HeapObject { | 2992 class Map: public HeapObject { |
| 2994 public: | 2993 public: |
| 2995 // Instance size. | 2994 // Instance size. |
| 2995 // Size in bytes or kVariableSizeSentinel if instances do not have |
| 2996 // a fixed size. |
| 2996 inline int instance_size(); | 2997 inline int instance_size(); |
| 2997 inline void set_instance_size(int value); | 2998 inline void set_instance_size(int value); |
| 2998 | 2999 |
| 2999 // Count of properties allocated in the object. | 3000 // Count of properties allocated in the object. |
| 3000 inline int inobject_properties(); | 3001 inline int inobject_properties(); |
| 3001 inline void set_inobject_properties(int value); | 3002 inline void set_inobject_properties(int value); |
| 3002 | 3003 |
| 3003 // Count of property fields pre-allocated in the object when first allocated. | 3004 // Count of property fields pre-allocated in the object when first allocated. |
| 3004 inline int pre_allocated_property_fields(); | 3005 inline int pre_allocated_property_fields(); |
| 3005 inline void set_pre_allocated_property_fields(int value); | 3006 inline void set_pre_allocated_property_fields(int value); |
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3700 // set to 'value', but there is no guarantees on instances created | 3701 // set to 'value', but there is no guarantees on instances created |
| 3701 // before. | 3702 // before. |
| 3702 Object* SetInstanceClassName(String* name); | 3703 Object* SetInstanceClassName(String* name); |
| 3703 | 3704 |
| 3704 // Returns if this function has been compiled to native code yet. | 3705 // Returns if this function has been compiled to native code yet. |
| 3705 inline bool is_compiled(); | 3706 inline bool is_compiled(); |
| 3706 | 3707 |
| 3707 // Casting. | 3708 // Casting. |
| 3708 static inline JSFunction* cast(Object* obj); | 3709 static inline JSFunction* cast(Object* obj); |
| 3709 | 3710 |
| 3711 // Iterates the objects, including code objects indirectly referenced |
| 3712 // through pointers to the first instruction in the code object. |
| 3713 void JSFunctionIterateBody(int object_size, ObjectVisitor* v); |
| 3714 |
| 3710 // Dispatched behavior. | 3715 // Dispatched behavior. |
| 3711 #ifdef DEBUG | 3716 #ifdef DEBUG |
| 3712 void JSFunctionPrint(); | 3717 void JSFunctionPrint(); |
| 3713 void JSFunctionVerify(); | 3718 void JSFunctionVerify(); |
| 3714 #endif | 3719 #endif |
| 3715 | 3720 |
| 3716 // Returns the number of allocated literals. | 3721 // Returns the number of allocated literals. |
| 3717 inline int NumberOfLiterals(); | 3722 inline int NumberOfLiterals(); |
| 3718 | 3723 |
| 3719 // Retrieve the global context from a function's literal array. | 3724 // Retrieve the global context from a function's literal array. |
| 3720 static Context* GlobalContextFromLiterals(FixedArray* literals); | 3725 static Context* GlobalContextFromLiterals(FixedArray* literals); |
| 3721 | 3726 |
| 3722 // Layout descriptors. | 3727 // Layout descriptors. |
| 3723 static const int kCodeOffset = JSObject::kHeaderSize; | 3728 static const int kCodeEntryOffset = JSObject::kHeaderSize; |
| 3724 static const int kPrototypeOrInitialMapOffset = | 3729 static const int kPrototypeOrInitialMapOffset = |
| 3725 kCodeOffset + kPointerSize; | 3730 kCodeEntryOffset + kPointerSize; |
| 3726 static const int kSharedFunctionInfoOffset = | 3731 static const int kSharedFunctionInfoOffset = |
| 3727 kPrototypeOrInitialMapOffset + kPointerSize; | 3732 kPrototypeOrInitialMapOffset + kPointerSize; |
| 3728 static const int kContextOffset = kSharedFunctionInfoOffset + kPointerSize; | 3733 static const int kContextOffset = kSharedFunctionInfoOffset + kPointerSize; |
| 3729 static const int kLiteralsOffset = kContextOffset + kPointerSize; | 3734 static const int kLiteralsOffset = kContextOffset + kPointerSize; |
| 3730 static const int kSize = kLiteralsOffset + kPointerSize; | 3735 static const int kSize = kLiteralsOffset + kPointerSize; |
| 3731 | 3736 |
| 3732 // Layout of the literals array. | 3737 // Layout of the literals array. |
| 3733 static const int kLiteralsPrefixSize = 1; | 3738 static const int kLiteralsPrefixSize = 1; |
| 3734 static const int kLiteralGlobalContextIndex = 0; | 3739 static const int kLiteralGlobalContextIndex = 0; |
| 3735 private: | 3740 private: |
| (...skipping 1694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5430 // Visits a contiguous arrays of pointers in the half-open range | 5435 // Visits a contiguous arrays of pointers in the half-open range |
| 5431 // [start, end). Any or all of the values may be modified on return. | 5436 // [start, end). Any or all of the values may be modified on return. |
| 5432 virtual void VisitPointers(Object** start, Object** end) = 0; | 5437 virtual void VisitPointers(Object** start, Object** end) = 0; |
| 5433 | 5438 |
| 5434 // To allow lazy clearing of inline caches the visitor has | 5439 // To allow lazy clearing of inline caches the visitor has |
| 5435 // a rich interface for iterating over Code objects.. | 5440 // a rich interface for iterating over Code objects.. |
| 5436 | 5441 |
| 5437 // Visits a code target in the instruction stream. | 5442 // Visits a code target in the instruction stream. |
| 5438 virtual void VisitCodeTarget(RelocInfo* rinfo); | 5443 virtual void VisitCodeTarget(RelocInfo* rinfo); |
| 5439 | 5444 |
| 5445 // Visits a code entry in a JS function. |
| 5446 virtual void VisitCodeEntry(Address entry_address); |
| 5447 |
| 5440 // Visits a runtime entry in the instruction stream. | 5448 // Visits a runtime entry in the instruction stream. |
| 5441 virtual void VisitRuntimeEntry(RelocInfo* rinfo) {} | 5449 virtual void VisitRuntimeEntry(RelocInfo* rinfo) {} |
| 5442 | 5450 |
| 5443 // Visits the resource of an ASCII or two-byte string. | 5451 // Visits the resource of an ASCII or two-byte string. |
| 5444 virtual void VisitExternalAsciiString( | 5452 virtual void VisitExternalAsciiString( |
| 5445 v8::String::ExternalAsciiStringResource** resource) {} | 5453 v8::String::ExternalAsciiStringResource** resource) {} |
| 5446 virtual void VisitExternalTwoByteString( | 5454 virtual void VisitExternalTwoByteString( |
| 5447 v8::String::ExternalStringResource** resource) {} | 5455 v8::String::ExternalStringResource** resource) {} |
| 5448 | 5456 |
| 5449 // Visits a debug call target in the instruction stream. | 5457 // Visits a debug call target in the instruction stream. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5502 } else { | 5510 } else { |
| 5503 value &= ~(1 << bit_position); | 5511 value &= ~(1 << bit_position); |
| 5504 } | 5512 } |
| 5505 return value; | 5513 return value; |
| 5506 } | 5514 } |
| 5507 }; | 5515 }; |
| 5508 | 5516 |
| 5509 } } // namespace v8::internal | 5517 } } // namespace v8::internal |
| 5510 | 5518 |
| 5511 #endif // V8_OBJECTS_H_ | 5519 #endif // V8_OBJECTS_H_ |
| OLD | NEW |