| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 4700 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4711 // Indicates whether the function is a strict mode function. | 4711 // Indicates whether the function is a strict mode function. |
| 4712 DECL_BOOLEAN_ACCESSORS(strict_mode) | 4712 DECL_BOOLEAN_ACCESSORS(strict_mode) |
| 4713 | 4713 |
| 4714 // False if the function definitely does not allocate an arguments object. | 4714 // False if the function definitely does not allocate an arguments object. |
| 4715 DECL_BOOLEAN_ACCESSORS(uses_arguments) | 4715 DECL_BOOLEAN_ACCESSORS(uses_arguments) |
| 4716 | 4716 |
| 4717 // True if the function has any duplicated parameter names. | 4717 // True if the function has any duplicated parameter names. |
| 4718 DECL_BOOLEAN_ACCESSORS(has_duplicate_parameters) | 4718 DECL_BOOLEAN_ACCESSORS(has_duplicate_parameters) |
| 4719 | 4719 |
| 4720 // Indicates whether the function is a native function. | 4720 // Indicates whether the function is a native function. |
| 4721 // These needs special threatment in .call and .apply since | 4721 // These needs special treatment in .call and .apply since |
| 4722 // null passed as the receiver should not be translated to the | 4722 // null passed as the receiver should not be translated to the |
| 4723 // global object. | 4723 // global object. |
| 4724 DECL_BOOLEAN_ACCESSORS(native) | 4724 DECL_BOOLEAN_ACCESSORS(native) |
| 4725 | 4725 |
| 4726 // Indicates that the function was created by the Function function. | 4726 // Indicates that the function was created by the Function function. |
| 4727 // Though it's anonymous, toString should treat it as if it had the name | 4727 // Though it's anonymous, toString should treat it as if it had the name |
| 4728 // "anonymous". We don't set the name itself so that the system does not | 4728 // "anonymous". We don't set the name itself so that the system does not |
| 4729 // see a binding for it. | 4729 // see a binding for it. |
| 4730 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous) | 4730 DECL_BOOLEAN_ACCESSORS(name_should_print_as_anonymous) |
| 4731 | 4731 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4978 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); | 4978 DISALLOW_IMPLICIT_CONSTRUCTORS(SharedFunctionInfo); |
| 4979 }; | 4979 }; |
| 4980 | 4980 |
| 4981 | 4981 |
| 4982 // JSFunction describes JavaScript functions. | 4982 // JSFunction describes JavaScript functions. |
| 4983 class JSFunction: public JSObject { | 4983 class JSFunction: public JSObject { |
| 4984 public: | 4984 public: |
| 4985 // [prototype_or_initial_map]: | 4985 // [prototype_or_initial_map]: |
| 4986 DECL_ACCESSORS(prototype_or_initial_map, Object) | 4986 DECL_ACCESSORS(prototype_or_initial_map, Object) |
| 4987 | 4987 |
| 4988 // [shared_function_info]: The information about the function that | 4988 // [shared]: The information about the function that |
| 4989 // can be shared by instances. | 4989 // can be shared by instances. |
| 4990 DECL_ACCESSORS(shared, SharedFunctionInfo) | 4990 DECL_ACCESSORS(shared, SharedFunctionInfo) |
| 4991 | 4991 |
| 4992 inline SharedFunctionInfo* unchecked_shared(); | 4992 inline SharedFunctionInfo* unchecked_shared(); |
| 4993 | 4993 |
| 4994 // [context]: The context for this function. | 4994 // [context]: The context for this function. |
| 4995 inline Context* context(); | 4995 inline Context* context(); |
| 4996 inline Object* unchecked_context(); | 4996 inline Object* unchecked_context(); |
| 4997 inline void set_context(Object* context); | 4997 inline void set_context(Object* context); |
| 4998 | 4998 |
| (...skipping 1578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6577 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell); | 6577 DISALLOW_IMPLICIT_CONSTRUCTORS(JSGlobalPropertyCell); |
| 6578 }; | 6578 }; |
| 6579 | 6579 |
| 6580 | 6580 |
| 6581 // The JSProxy describes EcmaScript Harmony proxies | 6581 // The JSProxy describes EcmaScript Harmony proxies |
| 6582 class JSProxy: public JSReceiver { | 6582 class JSProxy: public JSReceiver { |
| 6583 public: | 6583 public: |
| 6584 // [handler]: The handler property. | 6584 // [handler]: The handler property. |
| 6585 DECL_ACCESSORS(handler, Object) | 6585 DECL_ACCESSORS(handler, Object) |
| 6586 | 6586 |
| 6587 // [padding]: The padding slot (unused, see below). | |
| 6588 DECL_ACCESSORS(padding, Object) | |
| 6589 | |
| 6590 // Casting. | 6587 // Casting. |
| 6591 static inline JSProxy* cast(Object* obj); | 6588 static inline JSProxy* cast(Object* obj); |
| 6592 | 6589 |
| 6593 bool HasPropertyWithHandler(String* name); | 6590 bool HasPropertyWithHandler(String* name); |
| 6594 | 6591 |
| 6595 MUST_USE_RESULT MaybeObject* SetPropertyWithHandler( | 6592 MUST_USE_RESULT MaybeObject* SetPropertyWithHandler( |
| 6596 String* name, | 6593 String* name, |
| 6597 Object* value, | 6594 Object* value, |
| 6598 PropertyAttributes attributes, | 6595 PropertyAttributes attributes, |
| 6599 StrictModeFlag strict_mode); | 6596 StrictModeFlag strict_mode); |
| 6600 | 6597 |
| 6601 MUST_USE_RESULT MaybeObject* DeletePropertyWithHandler( | 6598 MUST_USE_RESULT MaybeObject* DeletePropertyWithHandler( |
| 6602 String* name, | 6599 String* name, |
| 6603 DeleteMode mode); | 6600 DeleteMode mode); |
| 6604 | 6601 |
| 6605 MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler( | 6602 MUST_USE_RESULT PropertyAttributes GetPropertyAttributeWithHandler( |
| 6606 JSReceiver* receiver, | 6603 JSReceiver* receiver, |
| 6607 String* name, | 6604 String* name, |
| 6608 bool* has_exception); | 6605 bool* has_exception); |
| 6609 | 6606 |
| 6610 // Turn this into an (empty) JSObject. | 6607 // Turn this into an (empty) JSObject. |
| 6611 void Fix(); | 6608 void Fix(); |
| 6612 | 6609 |
| 6610 // Initializes the body after the handler slot. |
| 6611 inline void InitializeBody(int object_size, Object* value); |
| 6612 |
| 6613 // Dispatched behavior. | 6613 // Dispatched behavior. |
| 6614 #ifdef OBJECT_PRINT | 6614 #ifdef OBJECT_PRINT |
| 6615 inline void JSProxyPrint() { | 6615 inline void JSProxyPrint() { |
| 6616 JSProxyPrint(stdout); | 6616 JSProxyPrint(stdout); |
| 6617 } | 6617 } |
| 6618 void JSProxyPrint(FILE* out); | 6618 void JSProxyPrint(FILE* out); |
| 6619 #endif | 6619 #endif |
| 6620 #ifdef DEBUG | 6620 #ifdef DEBUG |
| 6621 void JSProxyVerify(); | 6621 void JSProxyVerify(); |
| 6622 #endif | 6622 #endif |
| 6623 | 6623 |
| 6624 // Layout description. We add padding so that a proxy has the same | 6624 // Layout description. We add padding so that a proxy has the same |
| 6625 // size as a virgin JSObject. This is essential for becoming a JSObject | 6625 // size as a virgin JSObject. This is essential for becoming a JSObject |
| 6626 // upon freeze. | 6626 // upon freeze. |
| 6627 static const int kHandlerOffset = HeapObject::kHeaderSize; | 6627 static const int kHandlerOffset = HeapObject::kHeaderSize; |
| 6628 static const int kPaddingOffset = kHandlerOffset + kPointerSize; | 6628 static const int kPaddingOffset = kHandlerOffset + kPointerSize; |
| 6629 static const int kSize = kPaddingOffset + kPointerSize; | 6629 static const int kSize = JSObject::kHeaderSize; |
| 6630 static const int kHeaderSize = kPaddingOffset; |
| 6631 static const int kPaddingSize = kSize - kPaddingOffset; |
| 6630 | 6632 |
| 6631 STATIC_CHECK(kSize == JSObject::kHeaderSize); | 6633 STATIC_CHECK(kPaddingSize >= 0); |
| 6632 | 6634 |
| 6633 typedef FixedBodyDescriptor<kHandlerOffset, | 6635 typedef FixedBodyDescriptor<kHandlerOffset, |
| 6634 kHandlerOffset + kPointerSize, | 6636 kHandlerOffset + kPointerSize, |
| 6635 kSize> BodyDescriptor; | 6637 kSize> BodyDescriptor; |
| 6636 | 6638 |
| 6637 private: | 6639 private: |
| 6638 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); | 6640 DISALLOW_IMPLICIT_CONSTRUCTORS(JSProxy); |
| 6639 }; | 6641 }; |
| 6640 | 6642 |
| 6641 | 6643 |
| 6642 // TODO(rossberg): Only a stub for now. | |
| 6643 class JSFunctionProxy: public JSProxy { | 6644 class JSFunctionProxy: public JSProxy { |
| 6644 public: | 6645 public: |
| 6646 // [call_trap]: The call trap. |
| 6647 DECL_ACCESSORS(call_trap, Object) |
| 6648 |
| 6649 // [construct_trap]: The construct trap. |
| 6650 DECL_ACCESSORS(construct_trap, Object) |
| 6651 |
| 6645 // Casting. | 6652 // Casting. |
| 6646 static inline JSFunctionProxy* cast(Object* obj); | 6653 static inline JSFunctionProxy* cast(Object* obj); |
| 6647 | 6654 |
| 6655 // Dispatched behavior. |
| 6656 #ifdef OBJECT_PRINT |
| 6657 inline void JSFunctionProxyPrint() { |
| 6658 JSFunctionProxyPrint(stdout); |
| 6659 } |
| 6660 void JSFunctionProxyPrint(FILE* out); |
| 6661 #endif |
| 6662 #ifdef DEBUG |
| 6663 void JSFunctionProxyVerify(); |
| 6664 #endif |
| 6665 |
| 6666 // Layout description. |
| 6667 static const int kCallTrapOffset = kHandlerOffset + kPointerSize; |
| 6668 static const int kConstructTrapOffset = kCallTrapOffset + kPointerSize; |
| 6669 static const int kPaddingOffset = kConstructTrapOffset + kPointerSize; |
| 6670 static const int kSize = JSFunction::kSize; |
| 6671 static const int kPaddingSize = kSize - kPaddingOffset; |
| 6672 |
| 6673 STATIC_CHECK(kPaddingSize >= 0); |
| 6674 |
| 6675 typedef FixedBodyDescriptor<kHandlerOffset, |
| 6676 kConstructTrapOffset + kPointerSize, |
| 6677 kSize> BodyDescriptor; |
| 6678 |
| 6648 private: | 6679 private: |
| 6649 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); | 6680 DISALLOW_IMPLICIT_CONSTRUCTORS(JSFunctionProxy); |
| 6650 }; | 6681 }; |
| 6651 | 6682 |
| 6652 | 6683 |
| 6653 // The JSWeakMap describes EcmaScript Harmony weak maps | 6684 // The JSWeakMap describes EcmaScript Harmony weak maps |
| 6654 class JSWeakMap: public JSObject { | 6685 class JSWeakMap: public JSObject { |
| 6655 public: | 6686 public: |
| 6656 // [table]: the backing hash table mapping keys to values. | 6687 // [table]: the backing hash table mapping keys to values. |
| 6657 DECL_ACCESSORS(table, ObjectHashTable) | 6688 DECL_ACCESSORS(table, ObjectHashTable) |
| (...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7320 } else { | 7351 } else { |
| 7321 value &= ~(1 << bit_position); | 7352 value &= ~(1 << bit_position); |
| 7322 } | 7353 } |
| 7323 return value; | 7354 return value; |
| 7324 } | 7355 } |
| 7325 }; | 7356 }; |
| 7326 | 7357 |
| 7327 } } // namespace v8::internal | 7358 } } // namespace v8::internal |
| 7328 | 7359 |
| 7329 #endif // V8_OBJECTS_H_ | 7360 #endif // V8_OBJECTS_H_ |
| OLD | NEW |