Changeset 155013 in webkit for trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
- Timestamp:
- Sep 3, 2013, 5:26:57 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/JSGlobalObjectFunctions.cpp
r154902 r155013 707 707 } 708 708 709 class GlobalFuncProtoGetterFunctor { 710 public: 711 GlobalFuncProtoGetterFunctor(JSObject* thisObject) 712 : m_hasSkippedFirstFrame(false) 713 , m_thisObject(thisObject) 714 , m_result(JSValue::encode(jsUndefined())) 715 { 716 } 717 718 EncodedJSValue result() { return m_result; } 719 720 StackIterator::Status operator()(StackIterator& iter) 721 { 722 if (!m_hasSkippedFirstFrame) { 723 m_hasSkippedFirstFrame = true; 724 return StackIterator::Continue; 725 } 726 727 if (m_thisObject->allowsAccessFrom(iter->callFrame())) 728 m_result = JSValue::encode(m_thisObject->prototype()); 729 730 return StackIterator::Done; 731 } 732 733 private: 734 bool m_hasSkippedFirstFrame; 735 JSObject* m_thisObject; 736 EncodedJSValue m_result; 737 }; 738 709 739 EncodedJSValue JSC_HOST_CALL globalFuncProtoGetter(ExecState* exec) 710 740 { … … 714 744 return JSValue::encode(exec->thisValue().synthesizePrototype(exec)); 715 745 746 GlobalFuncProtoGetterFunctor functor(thisObject); 716 747 StackIterator iter = exec->begin(); 717 ++iter; 718 if ((iter == exec->end()) || !thisObject->allowsAccessFrom(iter->callFrame())) 719 return JSValue::encode(jsUndefined()); 720 721 return JSValue::encode(thisObject->prototype()); 722 } 748 iter.iterate(functor); 749 return functor.result(); 750 } 751 752 class GlobalFuncProtoSetterFunctor { 753 public: 754 GlobalFuncProtoSetterFunctor(JSObject* thisObject) 755 : m_hasSkippedFirstFrame(false) 756 , m_allowsAccess(false) 757 , m_thisObject(thisObject) 758 { 759 } 760 761 bool allowsAccess() const { return m_allowsAccess; } 762 763 StackIterator::Status operator()(StackIterator& iter) 764 { 765 if (!m_hasSkippedFirstFrame) { 766 m_hasSkippedFirstFrame = true; 767 return StackIterator::Continue; 768 } 769 770 m_allowsAccess = m_thisObject->allowsAccessFrom(iter->callFrame()); 771 return StackIterator::Done; 772 } 773 774 private: 775 bool m_hasSkippedFirstFrame; 776 bool m_allowsAccess; 777 JSObject* m_thisObject; 778 }; 723 779 724 780 EncodedJSValue JSC_HOST_CALL globalFuncProtoSetter(ExecState* exec) … … 732 788 return JSValue::encode(jsUndefined()); 733 789 790 GlobalFuncProtoSetterFunctor functor(thisObject); 734 791 StackIterator iter = exec->begin(); 735 ++iter;736 if ( (iter == exec->end()) || !thisObject->allowsAccessFrom(iter->callFrame()))792 iter.iterate(functor); 793 if (!functor.allowsAccess()) 737 794 return JSValue::encode(jsUndefined()); 738 795
Note:
See TracChangeset
for help on using the changeset viewer.