18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is free software; you can redistribute it and/or
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  modify it under the terms of the GNU Library General Public
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  License as published by the Free Software Foundation; either
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  version 2 of the License, or (at your option) any later version.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  This library is distributed in the hope that it will be useful,
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  but WITHOUT ANY WARRANTY; without even the implied warranty of
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Library General Public License for more details.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  You should have received a copy of the GNU Library General Public License
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  along with this library; see the file COPYING.LIB.  If not, write to
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  Boston, MA 02110-1301, USA.
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ClassInfo_h
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ClassInfo_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "CallFrame.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace JSC {
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    class HashEntry;
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    struct HashTable;
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    struct ClassInfo {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /**
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * A string denoting the class name. Example: "Window".
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const char* className;
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /**
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * Pointer to the class information of the base class.
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * 0L if there is none.
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const ClassInfo* parentClass;
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        /**
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * Static hash-table of properties.
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         * For classes that can be used from multiple threads, it is accessed via a getter function that would typically return a pointer to thread-specific value.
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project         */
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const HashTable* propHashTable(ExecState* exec) const
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        {
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (classPropHashTableGetterFunction)
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                return classPropHashTableGetterFunction(exec);
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return staticPropHashTable;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const HashTable* staticPropHashTable;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        typedef const HashTable* (*ClassPropHashTableGetterFunction)(ExecState*);
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        const ClassPropHashTableGetterFunction classPropHashTableGetterFunction;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace JSC
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ClassInfo_h
63