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 |