2 * Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
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.
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.
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
22 #include "StringObject.h"
24 #include "PropertyNameArray.h"
28 ASSERT_CLASS_FITS_IN_CELL(StringObject
);
30 const ClassInfo
StringObject::info
= { "String", 0, 0, 0 };
32 StringObject::StringObject(ExecState
* exec
, NonNullPassRefPtr
<Structure
> structure
)
33 : JSWrapperObject(structure
)
35 setInternalValue(jsEmptyString(exec
));
38 StringObject::StringObject(NonNullPassRefPtr
<Structure
> structure
, JSString
* string
)
39 : JSWrapperObject(structure
)
41 setInternalValue(string
);
44 StringObject::StringObject(ExecState
* exec
, NonNullPassRefPtr
<Structure
> structure
, const UString
& string
)
45 : JSWrapperObject(structure
)
47 setInternalValue(jsString(exec
, string
));
50 bool StringObject::getOwnPropertySlot(ExecState
* exec
, const Identifier
& propertyName
, PropertySlot
& slot
)
52 if (internalValue()->getStringPropertySlot(exec
, propertyName
, slot
))
54 return JSObject::getOwnPropertySlot(exec
, propertyName
, slot
);
57 bool StringObject::getOwnPropertySlot(ExecState
* exec
, unsigned propertyName
, PropertySlot
& slot
)
59 if (internalValue()->getStringPropertySlot(exec
, propertyName
, slot
))
61 return JSObject::getOwnPropertySlot(exec
, Identifier::from(exec
, propertyName
), slot
);
64 bool StringObject::getOwnPropertyDescriptor(ExecState
* exec
, const Identifier
& propertyName
, PropertyDescriptor
& descriptor
)
66 if (internalValue()->getStringPropertyDescriptor(exec
, propertyName
, descriptor
))
68 return JSObject::getOwnPropertyDescriptor(exec
, propertyName
, descriptor
);
71 void StringObject::put(ExecState
* exec
, const Identifier
& propertyName
, JSValue value
, PutPropertySlot
& slot
)
73 if (propertyName
== exec
->propertyNames().length
)
75 JSObject::put(exec
, propertyName
, value
, slot
);
78 bool StringObject::deleteProperty(ExecState
* exec
, const Identifier
& propertyName
)
80 if (propertyName
== exec
->propertyNames().length
)
83 unsigned i
= propertyName
.toStrictUInt32(&isStrictUInt32
);
84 if (isStrictUInt32
&& internalValue()->canGetIndex(i
))
86 return JSObject::deleteProperty(exec
, propertyName
);
89 void StringObject::getOwnPropertyNames(ExecState
* exec
, PropertyNameArray
& propertyNames
, EnumerationMode mode
)
91 int size
= internalValue()->length();
92 for (int i
= 0; i
< size
; ++i
)
93 propertyNames
.add(Identifier(exec
, UString::from(i
)));
94 if (mode
== IncludeDontEnumProperties
)
95 propertyNames
.add(exec
->propertyNames().length
);
96 return JSObject::getOwnPropertyNames(exec
, propertyNames
, mode
);