source: webkit/trunk/JavaScriptCore/runtime/CommonIdentifiers.h@ 48331

Last change on this file since 48331 was 47780, checked in by [email protected], 16 years ago

[ES5] Implement getOwnPropertyDescriptor
https://bugs.webkit.org/show_bug.cgi?id=28724

Reviewed by Gavin Barraclough.

JavaScriptCore:
Implement the core runtime support for getOwnPropertyDescriptor.
This adds a virtual getOwnPropertyDescriptor method to every class
that implements getOwnPropertySlot that shadows the behaviour of
getOwnPropertySlot. The alternative would be to make getOwnPropertySlot
(or PropertySlots in general) provide property attribute information,
but quick testing showed this to be a regression.

WebCore:
Implement the WebCore side of getOwnPropertyDescriptor. This
requires a custom implementation of getOwnPropertyDescriptor
for every class with a custom implementation of getOwnPropertySlot.

The bindings generator has been updated to generate appropriate
versions of getOwnPropertyDescriptor for the general case where
a custom getOwnPropertyDescriptor is not needed. ES5 is vague
about how getOwnPropertyDescriptor should work in the context of
"host" functions with polymorphic GetOwnProperty, so it seems
okay that occasionally we "guess" what attributes -- eg. determining
whether a property is writable.

Test: fast/js/getOwnPropertyDescriptor.html

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1/*
2 * Copyright (C) 2003, 2007, 2009 Apple Inc. All rights reserved.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 *
19 */
20
21#ifndef CommonIdentifiers_h
22#define CommonIdentifiers_h
23
24#include "Identifier.h"
25#include <wtf/Noncopyable.h>
26
27// MarkedArgumentBuffer of property names, passed to a macro so we can do set them up various
28// ways without repeating the list.
29#define JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
30 macro(__defineGetter__) \
31 macro(__defineSetter__) \
32 macro(__lookupGetter__) \
33 macro(__lookupSetter__) \
34 macro(apply) \
35 macro(arguments) \
36 macro(call) \
37 macro(callee) \
38 macro(caller) \
39 macro(compile) \
40 macro(configurable) \
41 macro(constructor) \
42 macro(enumerable) \
43 macro(eval) \
44 macro(exec) \
45 macro(fromCharCode) \
46 macro(global) \
47 macro(get) \
48 macro(getPrototypeOf) \
49 macro(getOwnPropertyDescriptor) \
50 macro(hasOwnProperty) \
51 macro(ignoreCase) \
52 macro(index) \
53 macro(input) \
54 macro(isArray) \
55 macro(isPrototypeOf) \
56 macro(length) \
57 macro(message) \
58 macro(multiline) \
59 macro(name) \
60 macro(now) \
61 macro(parse) \
62 macro(propertyIsEnumerable) \
63 macro(prototype) \
64 macro(set) \
65 macro(source) \
66 macro(test) \
67 macro(toExponential) \
68 macro(toFixed) \
69 macro(toISOString) \
70 macro(toJSON) \
71 macro(toLocaleString) \
72 macro(toPrecision) \
73 macro(toString) \
74 macro(UTC) \
75 macro(value) \
76 macro(valueOf) \
77 macro(writable) \
78 macro(displayName)
79
80namespace JSC {
81
82 class CommonIdentifiers : public Noncopyable {
83 private:
84 CommonIdentifiers(JSGlobalData*);
85 friend class JSGlobalData;
86
87 public:
88 const Identifier nullIdentifier;
89 const Identifier emptyIdentifier;
90 const Identifier underscoreProto;
91 const Identifier thisIdentifier;
92
93#define JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL(name) const Identifier name;
94 JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL)
95#undef JSC_IDENTIFIER_DECLARE_PROPERTY_NAME_GLOBAL
96 };
97
98} // namespace JSC
99
100#endif // CommonIdentifiers_h
Note: See TracBrowser for help on using the repository browser.