JSFunction.h revision 635860845790a19bf50bbc51ba8fb66a96dde068
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999-2000 Harri Porten (porten@kde.org) 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2003, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Cameron Zwarich (cwzwarich@uwaterloo.ca) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Maks Orlovich 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef JSFunction_h 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define JSFunction_h 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "InternalFunction.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSVariableObject.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SymbolTable.h" 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "Nodes.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSObject.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC { 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class FunctionBodyNode; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class FunctionPrototype; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSActivation; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSGlobalObject; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class JSFunction : public InternalFunction { 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project friend class JIT; 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project friend class Interpreter; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef InternalFunction Base; 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 46635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSFunction(PassRefPtr<Structure> structure) 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : InternalFunction(structure) 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_scopeChain(NoScopeChain()) 49635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 51635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JSFunction(ExecState*, const Identifier&, FunctionBodyNode*, ScopeChainNode*); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~JSFunction(); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void put(ExecState*, const Identifier& propertyName, JSValuePtr, PutPropertySlot&); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool deleteProperty(ExecState*, const Identifier& propertyName); 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JSObject* construct(ExecState*, const ArgList&); 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSValuePtr call(ExecState*, JSValuePtr thisValue, const ArgList&); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setScope(const ScopeChain& scopeChain) { m_scopeChain = scopeChain; } 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScopeChain& scope() { return m_scopeChain; } 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setBody(FunctionBodyNode* body) { m_body = body; } 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setBody(PassRefPtr<FunctionBodyNode> body) { m_body = body; } 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project FunctionBodyNode* body() const { return m_body.get(); } 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void mark(); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static const ClassInfo info; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static PassRefPtr<Structure> createStructure(JSValuePtr prototype) 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return Structure::create(prototype, TypeInfo(ObjectType, ImplementsHasInstance)); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual const ClassInfo* classInfo() const { return &info; } 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ConstructType getConstructData(ConstructData&); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual CallType getCallData(CallData&); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static JSValuePtr argumentsGetter(ExecState*, const Identifier&, const PropertySlot&); 86635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static JSValuePtr callerGetter(ExecState*, const Identifier&, const PropertySlot&); 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static JSValuePtr lengthGetter(ExecState*, const Identifier&, const PropertySlot&); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RefPtr<FunctionBodyNode> m_body; 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScopeChain m_scopeChain; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSFunction* asFunction(JSValuePtr); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project inline JSFunction* asFunction(JSValuePtr value) 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(asObject(value)->inherits(&JSFunction::info)); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return static_cast<JSFunction*>(asObject(value)); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace JSC 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // JSFunction_h 104