1/*
2 *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
3 *  Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
4 *
5 *  This library is free software; you can redistribute it and/or
6 *  modify it under the terms of the GNU Lesser General Public
7 *  License as published by the Free Software Foundation; either
8 *  version 2 of the License, or (at your option) any later version.
9 *
10 *  This library is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 *  Lesser General Public License for more details.
14 *
15 *  You should have received a copy of the GNU Lesser General Public
16 *  License along with this library; if not, write to the Free Software
17 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 *
19 */
20
21#ifndef StringObjectThatMasqueradesAsUndefined_h
22#define StringObjectThatMasqueradesAsUndefined_h
23
24#include "JSGlobalObject.h"
25#include "StringObject.h"
26#include "UString.h"
27
28namespace JSC {
29
30    // WebCore uses this to make style.filter undetectable
31    class StringObjectThatMasqueradesAsUndefined : public StringObject {
32    public:
33        static StringObjectThatMasqueradesAsUndefined* create(ExecState* exec, const UString& string)
34        {
35            return new (exec) StringObjectThatMasqueradesAsUndefined(exec,
36                createStructure(exec->globalData(), exec->lexicalGlobalObject()->stringPrototype()), string);
37        }
38
39    private:
40        StringObjectThatMasqueradesAsUndefined(ExecState* exec, Structure* structure, const UString& string)
41            : StringObject(exec, structure, string)
42        {
43        }
44
45        static Structure* createStructure(JSGlobalData& globalData, JSValue proto)
46        {
47            return Structure::create(globalData, proto, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
48        }
49
50        static const unsigned StructureFlags = OverridesGetOwnPropertySlot | MasqueradesAsUndefined | OverridesGetPropertyNames | StringObject::StructureFlags;
51
52        virtual bool toBoolean(ExecState*) const { return false; }
53    };
54
55} // namespace JSC
56
57#endif // StringObjectThatMasqueradesAsUndefined_h
58