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::s_info
= { "String", &JSWrapperObject::s_info
, 0, 0 };
32 StringObject::StringObject(ExecState
* exec
, Structure
* structure
)
33 : JSWrapperObject(exec
->globalData(), structure
)
35 ASSERT(inherits(&s_info
));
36 setInternalValue(exec
->globalData(), jsEmptyString(exec
));
39 StringObject::StringObject(JSGlobalData
& globalData
, Structure
* structure
, JSString
* string
)
40 : JSWrapperObject(globalData
, structure
)
42 ASSERT(inherits(&s_info
));
43 setInternalValue(globalData
, string
);
46 StringObject::StringObject(ExecState
* exec
, Structure
* structure
, const UString
& string
)
47 : JSWrapperObject(exec
->globalData(), structure
)
49 ASSERT(inherits(&s_info
));
50 setInternalValue(exec
->globalData(), jsString(exec
, string
));
53 bool StringObject::getOwnPropertySlot(ExecState
* exec
, const Identifier
& propertyName
, PropertySlot
& slot
)
55 if (internalValue()->getStringPropertySlot(exec
, propertyName
, slot
))
57 return JSObject::getOwnPropertySlot(exec
, propertyName
, slot
);
60 bool StringObject::getOwnPropertySlot(ExecState
* exec
, unsigned propertyName
, PropertySlot
& slot
)
62 if (internalValue()->getStringPropertySlot(exec
, propertyName
, slot
))
64 return JSObject::getOwnPropertySlot(exec
, Identifier::from(exec
, propertyName
), slot
);
67 bool StringObject::getOwnPropertyDescriptor(ExecState
* exec
, const Identifier
& propertyName
, PropertyDescriptor
& descriptor
)
69 if (internalValue()->getStringPropertyDescriptor(exec
, propertyName
, descriptor
))
71 return JSObject::getOwnPropertyDescriptor(exec
, propertyName
, descriptor
);
74 void StringObject::put(ExecState
* exec
, const Identifier
& propertyName
, JSValue value
, PutPropertySlot
& slot
)
76 if (propertyName
== exec
->propertyNames().length
)
78 JSObject::put(exec
, propertyName
, value
, slot
);
81 bool StringObject::deleteProperty(ExecState
* exec
, const Identifier
& propertyName
)
83 if (propertyName
== exec
->propertyNames().length
)
86 unsigned i
= propertyName
.toUInt32(isStrictUInt32
);
87 if (isStrictUInt32
&& internalValue()->canGetIndex(i
))
89 return JSObject::deleteProperty(exec
, propertyName
);
92 void StringObject::getOwnPropertyNames(ExecState
* exec
, PropertyNameArray
& propertyNames
, EnumerationMode mode
)
94 int size
= internalValue()->length();
95 for (int i
= 0; i
< size
; ++i
)
96 propertyNames
.add(Identifier(exec
, UString::number(i
)));
97 if (mode
== IncludeDontEnumProperties
)
98 propertyNames
.add(exec
->propertyNames().length
);
99 return JSObject::getOwnPropertyNames(exec
, propertyNames
, mode
);