OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
7 | 7 |
8 #include <iosfwd> | 8 #include <iosfwd> |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 802 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 // Result of an abstract relational comparison of x and y, implemented according | 813 // Result of an abstract relational comparison of x and y, implemented according |
814 // to ES6 section 7.2.11 Abstract Relational Comparison. | 814 // to ES6 section 7.2.11 Abstract Relational Comparison. |
815 enum class ComparisonResult { | 815 enum class ComparisonResult { |
816 kLessThan, // x < y | 816 kLessThan, // x < y |
817 kEqual, // x = y | 817 kEqual, // x = y |
818 kGreaterThan, // x > x | 818 kGreaterThan, // x > x |
819 kUndefined // at least one of x or y was undefined or NaN | 819 kUndefined // at least one of x or y was undefined or NaN |
820 }; | 820 }; |
821 | 821 |
822 | 822 |
823 #define DECL_BOOLEAN_ACCESSORS(name) \ | 823 #define DECL_BOOLEAN_ACCESSORS(name) \ |
824 inline bool name() const; \ | 824 inline bool name() const; \ |
825 inline void set_##name(bool value); \ | 825 inline void set_##name(bool value); |
| 826 |
| 827 #define DECL_INT_ACCESSORS(name) \ |
| 828 inline int name() const; \ |
| 829 inline void set_##name(int value); |
826 | 830 |
827 | 831 |
828 #define DECL_ACCESSORS(name, type) \ | 832 #define DECL_ACCESSORS(name, type) \ |
829 inline type* name() const; \ | 833 inline type* name() const; \ |
830 inline void set_##name(type* value, \ | 834 inline void set_##name(type* value, \ |
831 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ | 835 WriteBarrierMode mode = UPDATE_WRITE_BARRIER); \ |
832 | 836 |
833 | 837 |
834 #define DECLARE_CAST(type) \ | 838 #define DECLARE_CAST(type) \ |
835 INLINE(static type* cast(Object* object)); \ | 839 INLINE(static type* cast(Object* object)); \ |
(...skipping 5227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6063 COMPILATION_STATE_COMPILED = 1 | 6067 COMPILATION_STATE_COMPILED = 1 |
6064 }; | 6068 }; |
6065 | 6069 |
6066 // [source]: the script source. | 6070 // [source]: the script source. |
6067 DECL_ACCESSORS(source, Object) | 6071 DECL_ACCESSORS(source, Object) |
6068 | 6072 |
6069 // [name]: the script name. | 6073 // [name]: the script name. |
6070 DECL_ACCESSORS(name, Object) | 6074 DECL_ACCESSORS(name, Object) |
6071 | 6075 |
6072 // [id]: the script id. | 6076 // [id]: the script id. |
6073 DECL_ACCESSORS(id, Smi) | 6077 DECL_INT_ACCESSORS(id) |
6074 | 6078 |
6075 // [line_offset]: script line offset in resource from where it was extracted. | 6079 // [line_offset]: script line offset in resource from where it was extracted. |
6076 DECL_ACCESSORS(line_offset, Smi) | 6080 DECL_INT_ACCESSORS(line_offset) |
6077 | 6081 |
6078 // [column_offset]: script column offset in resource from where it was | 6082 // [column_offset]: script column offset in resource from where it was |
6079 // extracted. | 6083 // extracted. |
6080 DECL_ACCESSORS(column_offset, Smi) | 6084 DECL_INT_ACCESSORS(column_offset) |
6081 | 6085 |
6082 // [context_data]: context data for the context this script was compiled in. | 6086 // [context_data]: context data for the context this script was compiled in. |
6083 DECL_ACCESSORS(context_data, Object) | 6087 DECL_ACCESSORS(context_data, Object) |
6084 | 6088 |
6085 // [wrapper]: the wrapper cache. This is either undefined or a WeakCell. | 6089 // [wrapper]: the wrapper cache. This is either undefined or a WeakCell. |
6086 DECL_ACCESSORS(wrapper, HeapObject) | 6090 DECL_ACCESSORS(wrapper, HeapObject) |
6087 | 6091 |
6088 // [type]: the script type. | 6092 // [type]: the script type. |
6089 DECL_ACCESSORS(type, Smi) | 6093 DECL_INT_ACCESSORS(type) |
6090 | 6094 |
6091 // [line_ends]: FixedArray of line ends positions. | 6095 // [line_ends]: FixedArray of line ends positions. |
6092 DECL_ACCESSORS(line_ends, Object) | 6096 DECL_ACCESSORS(line_ends, Object) |
6093 | 6097 |
6094 // [eval_from_shared]: for eval scripts the shared funcion info for the | 6098 // [eval_from_shared]: for eval scripts the shared funcion info for the |
6095 // function from which eval was called. | 6099 // function from which eval was called. |
6096 DECL_ACCESSORS(eval_from_shared, Object) | 6100 DECL_ACCESSORS(eval_from_shared, Object) |
6097 | 6101 |
6098 // [eval_from_instructions_offset]: the instruction offset in the code for the | 6102 // [eval_from_instructions_offset]: the instruction offset in the code for the |
6099 // function from which eval was called where eval was called. | 6103 // function from which eval was called where eval was called. |
6100 DECL_ACCESSORS(eval_from_instructions_offset, Smi) | 6104 DECL_INT_ACCESSORS(eval_from_instructions_offset) |
6101 | 6105 |
6102 // [shared_function_infos]: weak fixed array containing all shared | 6106 // [shared_function_infos]: weak fixed array containing all shared |
6103 // function infos created from this script. | 6107 // function infos created from this script. |
6104 DECL_ACCESSORS(shared_function_infos, Object) | 6108 DECL_ACCESSORS(shared_function_infos, Object) |
6105 | 6109 |
6106 // [flags]: Holds an exciting bitfield. | 6110 // [flags]: Holds an exciting bitfield. |
6107 DECL_ACCESSORS(flags, Smi) | 6111 DECL_INT_ACCESSORS(flags) |
6108 | 6112 |
6109 // [source_url]: sourceURL from magic comment | 6113 // [source_url]: sourceURL from magic comment |
6110 DECL_ACCESSORS(source_url, Object) | 6114 DECL_ACCESSORS(source_url, Object) |
6111 | 6115 |
6112 // [source_url]: sourceMappingURL magic comment | 6116 // [source_url]: sourceMappingURL magic comment |
6113 DECL_ACCESSORS(source_mapping_url, Object) | 6117 DECL_ACCESSORS(source_mapping_url, Object) |
6114 | 6118 |
6115 // [compilation_type]: how the the script was compiled. Encoded in the | 6119 // [compilation_type]: how the the script was compiled. Encoded in the |
6116 // 'flags' field. | 6120 // 'flags' field. |
6117 inline CompilationType compilation_type(); | 6121 inline CompilationType compilation_type(); |
(...skipping 1796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7914 kLastPretenureDecisionValue = kZombie | 7918 kLastPretenureDecisionValue = kZombie |
7915 }; | 7919 }; |
7916 | 7920 |
7917 const char* PretenureDecisionName(PretenureDecision decision); | 7921 const char* PretenureDecisionName(PretenureDecision decision); |
7918 | 7922 |
7919 DECL_ACCESSORS(transition_info, Object) | 7923 DECL_ACCESSORS(transition_info, Object) |
7920 // nested_site threads a list of sites that represent nested literals | 7924 // nested_site threads a list of sites that represent nested literals |
7921 // walked in a particular order. So [[1, 2], 1, 2] will have one | 7925 // walked in a particular order. So [[1, 2], 1, 2] will have one |
7922 // nested_site, but [[1, 2], 3, [4]] will have a list of two. | 7926 // nested_site, but [[1, 2], 3, [4]] will have a list of two. |
7923 DECL_ACCESSORS(nested_site, Object) | 7927 DECL_ACCESSORS(nested_site, Object) |
7924 DECL_ACCESSORS(pretenure_data, Smi) | 7928 DECL_INT_ACCESSORS(pretenure_data) |
7925 DECL_ACCESSORS(pretenure_create_count, Smi) | 7929 DECL_INT_ACCESSORS(pretenure_create_count) |
7926 DECL_ACCESSORS(dependent_code, DependentCode) | 7930 DECL_ACCESSORS(dependent_code, DependentCode) |
7927 DECL_ACCESSORS(weak_next, Object) | 7931 DECL_ACCESSORS(weak_next, Object) |
7928 | 7932 |
7929 inline void Initialize(); | 7933 inline void Initialize(); |
7930 | 7934 |
7931 // This method is expensive, it should only be called for reporting. | 7935 // This method is expensive, it should only be called for reporting. |
7932 bool IsNestedSite(); | 7936 bool IsNestedSite(); |
7933 | 7937 |
7934 // transition_info bitfields, for constructed array transition info. | 7938 // transition_info bitfields, for constructed array transition info. |
7935 class ElementsKindBits: public BitField<ElementsKind, 0, 15> {}; | 7939 class ElementsKindBits: public BitField<ElementsKind, 0, 15> {}; |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8304 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); | 8308 DISALLOW_IMPLICIT_CONSTRUCTORS(Name); |
8305 }; | 8309 }; |
8306 | 8310 |
8307 | 8311 |
8308 // ES6 symbols. | 8312 // ES6 symbols. |
8309 class Symbol: public Name { | 8313 class Symbol: public Name { |
8310 public: | 8314 public: |
8311 // [name]: The print name of a symbol, or undefined if none. | 8315 // [name]: The print name of a symbol, or undefined if none. |
8312 DECL_ACCESSORS(name, Object) | 8316 DECL_ACCESSORS(name, Object) |
8313 | 8317 |
8314 DECL_ACCESSORS(flags, Smi) | 8318 DECL_INT_ACCESSORS(flags) |
8315 | 8319 |
8316 // [is_private]: Whether this is a private symbol. Private symbols can only | 8320 // [is_private]: Whether this is a private symbol. Private symbols can only |
8317 // be used to designate own properties of objects. | 8321 // be used to designate own properties of objects. |
8318 DECL_BOOLEAN_ACCESSORS(is_private) | 8322 DECL_BOOLEAN_ACCESSORS(is_private) |
8319 | 8323 |
8320 DECLARE_CAST(Symbol) | 8324 DECLARE_CAST(Symbol) |
8321 | 8325 |
8322 // Dispatched behavior. | 8326 // Dispatched behavior. |
8323 DECLARE_PRINTER(Symbol) | 8327 DECLARE_PRINTER(Symbol) |
8324 DECLARE_VERIFIER(Symbol) | 8328 DECLARE_VERIFIER(Symbol) |
(...skipping 1637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9962 static const int kIndexIndex = 0; | 9966 static const int kIndexIndex = 0; |
9963 static const int kInputIndex = 1; | 9967 static const int kInputIndex = 1; |
9964 private: | 9968 private: |
9965 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); | 9969 DISALLOW_IMPLICIT_CONSTRUCTORS(JSRegExpResult); |
9966 }; | 9970 }; |
9967 | 9971 |
9968 | 9972 |
9969 class AccessorInfo: public Struct { | 9973 class AccessorInfo: public Struct { |
9970 public: | 9974 public: |
9971 DECL_ACCESSORS(name, Object) | 9975 DECL_ACCESSORS(name, Object) |
9972 DECL_ACCESSORS(flag, Smi) | 9976 DECL_INT_ACCESSORS(flag) |
9973 DECL_ACCESSORS(expected_receiver_type, Object) | 9977 DECL_ACCESSORS(expected_receiver_type, Object) |
9974 | 9978 |
9975 inline bool all_can_read(); | 9979 inline bool all_can_read(); |
9976 inline void set_all_can_read(bool value); | 9980 inline void set_all_can_read(bool value); |
9977 | 9981 |
9978 inline bool all_can_write(); | 9982 inline bool all_can_write(); |
9979 inline void set_all_can_write(bool value); | 9983 inline void set_all_can_write(bool value); |
9980 | 9984 |
9981 inline bool is_special_data_property(); | 9985 inline bool is_special_data_property(); |
9982 inline void set_is_special_data_property(bool value); | 9986 inline void set_is_special_data_property(bool value); |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10210 DECL_ACCESSORS(call_code, Object) | 10214 DECL_ACCESSORS(call_code, Object) |
10211 DECL_ACCESSORS(prototype_template, Object) | 10215 DECL_ACCESSORS(prototype_template, Object) |
10212 DECL_ACCESSORS(parent_template, Object) | 10216 DECL_ACCESSORS(parent_template, Object) |
10213 DECL_ACCESSORS(named_property_handler, Object) | 10217 DECL_ACCESSORS(named_property_handler, Object) |
10214 DECL_ACCESSORS(indexed_property_handler, Object) | 10218 DECL_ACCESSORS(indexed_property_handler, Object) |
10215 DECL_ACCESSORS(instance_template, Object) | 10219 DECL_ACCESSORS(instance_template, Object) |
10216 DECL_ACCESSORS(class_name, Object) | 10220 DECL_ACCESSORS(class_name, Object) |
10217 DECL_ACCESSORS(signature, Object) | 10221 DECL_ACCESSORS(signature, Object) |
10218 DECL_ACCESSORS(instance_call_handler, Object) | 10222 DECL_ACCESSORS(instance_call_handler, Object) |
10219 DECL_ACCESSORS(access_check_info, Object) | 10223 DECL_ACCESSORS(access_check_info, Object) |
10220 DECL_ACCESSORS(flag, Smi) | 10224 DECL_INT_ACCESSORS(flag) |
10221 | 10225 |
10222 inline int length() const; | 10226 inline int length() const; |
10223 inline void set_length(int value); | 10227 inline void set_length(int value); |
10224 | 10228 |
10225 // Following properties use flag bits. | 10229 // Following properties use flag bits. |
10226 DECL_BOOLEAN_ACCESSORS(hidden_prototype) | 10230 DECL_BOOLEAN_ACCESSORS(hidden_prototype) |
10227 DECL_BOOLEAN_ACCESSORS(undetectable) | 10231 DECL_BOOLEAN_ACCESSORS(undetectable) |
10228 // If the bit is set, object instances created by this function | 10232 // If the bit is set, object instances created by this function |
10229 // requires access check. | 10233 // requires access check. |
10230 DECL_BOOLEAN_ACCESSORS(needs_access_check) | 10234 DECL_BOOLEAN_ACCESSORS(needs_access_check) |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10371 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); | 10375 DISALLOW_IMPLICIT_CONSTRUCTORS(DebugInfo); |
10372 }; | 10376 }; |
10373 | 10377 |
10374 | 10378 |
10375 // The BreakPointInfo class holds information for break points set in a | 10379 // The BreakPointInfo class holds information for break points set in a |
10376 // function. The DebugInfo object holds a BreakPointInfo object for each code | 10380 // function. The DebugInfo object holds a BreakPointInfo object for each code |
10377 // position with one or more break points. | 10381 // position with one or more break points. |
10378 class BreakPointInfo: public Struct { | 10382 class BreakPointInfo: public Struct { |
10379 public: | 10383 public: |
10380 // The position in the code for the break point. | 10384 // The position in the code for the break point. |
10381 DECL_ACCESSORS(code_position, Smi) | 10385 DECL_INT_ACCESSORS(code_position) |
10382 // The position in the source for the break position. | 10386 // The position in the source for the break position. |
10383 DECL_ACCESSORS(source_position, Smi) | 10387 DECL_INT_ACCESSORS(source_position) |
10384 // The position in the source for the last statement before this break | 10388 // The position in the source for the last statement before this break |
10385 // position. | 10389 // position. |
10386 DECL_ACCESSORS(statement_position, Smi) | 10390 DECL_INT_ACCESSORS(statement_position) |
10387 // List of related JavaScript break points. | 10391 // List of related JavaScript break points. |
10388 DECL_ACCESSORS(break_point_objects, Object) | 10392 DECL_ACCESSORS(break_point_objects, Object) |
10389 | 10393 |
10390 // Removes a break point. | 10394 // Removes a break point. |
10391 static void ClearBreakPoint(Handle<BreakPointInfo> info, | 10395 static void ClearBreakPoint(Handle<BreakPointInfo> info, |
10392 Handle<Object> break_point_object); | 10396 Handle<Object> break_point_object); |
10393 // Set a break point. | 10397 // Set a break point. |
10394 static void SetBreakPoint(Handle<BreakPointInfo> info, | 10398 static void SetBreakPoint(Handle<BreakPointInfo> info, |
10395 Handle<Object> break_point_object); | 10399 Handle<Object> break_point_object); |
10396 // Check if break point info has this break point object. | 10400 // Check if break point info has this break point object. |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
10520 }; | 10524 }; |
10521 | 10525 |
10522 | 10526 |
10523 class StructBodyDescriptor : public | 10527 class StructBodyDescriptor : public |
10524 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { | 10528 FlexibleBodyDescriptor<HeapObject::kHeaderSize> { |
10525 public: | 10529 public: |
10526 static inline int SizeOf(Map* map, HeapObject* object); | 10530 static inline int SizeOf(Map* map, HeapObject* object); |
10527 }; | 10531 }; |
10528 | 10532 |
10529 | 10533 |
10530 // BooleanBit is a helper class for setting and getting a bit in an | 10534 // BooleanBit is a helper class for setting and getting a bit in an integer. |
10531 // integer or Smi. | |
10532 class BooleanBit : public AllStatic { | 10535 class BooleanBit : public AllStatic { |
10533 public: | 10536 public: |
10534 static inline bool get(Smi* smi, int bit_position) { | |
10535 return get(smi->value(), bit_position); | |
10536 } | |
10537 | |
10538 static inline bool get(int value, int bit_position) { | 10537 static inline bool get(int value, int bit_position) { |
10539 return (value & (1 << bit_position)) != 0; | 10538 return (value & (1 << bit_position)) != 0; |
10540 } | 10539 } |
10541 | 10540 |
10542 static inline Smi* set(Smi* smi, int bit_position, bool v) { | |
10543 return Smi::FromInt(set(smi->value(), bit_position, v)); | |
10544 } | |
10545 | |
10546 static inline int set(int value, int bit_position, bool v) { | 10541 static inline int set(int value, int bit_position, bool v) { |
10547 if (v) { | 10542 if (v) { |
10548 value |= (1 << bit_position); | 10543 value |= (1 << bit_position); |
10549 } else { | 10544 } else { |
10550 value &= ~(1 << bit_position); | 10545 value &= ~(1 << bit_position); |
10551 } | 10546 } |
10552 return value; | 10547 return value; |
10553 } | 10548 } |
10554 }; | 10549 }; |
10555 | 10550 |
(...skipping 16 matching lines...) Expand all Loading... |
10572 | 10567 |
10573 Isolate* isolate_; | 10568 Isolate* isolate_; |
10574 Handle<FixedArray> keys_; | 10569 Handle<FixedArray> keys_; |
10575 Handle<OrderedHashSet> set_; | 10570 Handle<OrderedHashSet> set_; |
10576 int length_; | 10571 int length_; |
10577 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); | 10572 DISALLOW_COPY_AND_ASSIGN(KeyAccumulator); |
10578 }; | 10573 }; |
10579 } } // namespace v8::internal | 10574 } } // namespace v8::internal |
10580 | 10575 |
10581 #endif // V8_OBJECTS_H_ | 10576 #endif // V8_OBJECTS_H_ |
OLD | NEW |