10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 1999-2001 Harri Porten (porten@kde.org) 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2001 Peter Kelly (pmk@post.com) 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2003, 2004, 2005, 2007, 2008 Apple Inc. All rights reserved. 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is free software; you can redistribute it and/or 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modify it under the terms of the GNU Library General Public 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * License as published by the Free Software Foundation; either 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * version 2 of the License, or (at your option) any later version. 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is distributed in the hope that it will be useful, 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Library General Public License for more details. 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * You should have received a copy of the GNU Library General Public License 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Boston, MA 02110-1301, USA. 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef JSAPIValueWrapper_h 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define JSAPIValueWrapper_h 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "JSCell.h" 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "CallFrame.h" 282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "Structure.h" 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace JSC { 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch class JSAPIValueWrapper : public JSCell { 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch friend JSValue jsAPIValueWrapper(ExecState*, JSValue); 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch public: 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block JSValue value() const { return m_value.get(); } 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual bool isAPIValueWrapper() const { return true; } 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static Structure* createStructure(JSGlobalData& globalData, JSValue prototype) 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 412bde8e466a4451c7319e3a072d118917957d6554Steve Block return Structure::create(globalData, prototype, TypeInfo(CompoundType, OverridesMarkChildren | OverridesGetPropertyNames), AnonymousSlotCount, 0); 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch private: 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSAPIValueWrapper(ExecState* exec, JSValue value) 472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : JSCell(exec->globalData(), exec->globalData().apiWrapperStructure.get()) 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_value.set(exec->globalData(), this, value); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ASSERT(!value.isCell()); 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block WriteBarrier<Unknown> m_value; 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch inline JSValue jsAPIValueWrapper(ExecState* exec, JSValue value) 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch { 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return new (exec) JSAPIValueWrapper(exec, value); 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace JSC 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // JSAPIValueWrapper_h 64