PropertyAccess.java revision 1571:fd97b9047199
1/*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package jdk.nashorn.internal.runtime;
27
28/**
29 * Interface for getting and setting properties from script objects
30 * This can be a plugin point for e.g. tagged values or alternative
31 * array property getters.
32 *
33 * The interface is engineered with the combinatorially exhaustive
34 * combination of types by purpose, for speed, as currently HotSpot is not
35 * good enough at removing boxing.
36 */
37public interface PropertyAccess {
38    /**
39     * Get the value for a given key and return it as an int
40     * @param key the key
41     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
42     * @return the value
43     */
44    public int getInt(Object key, int programPoint);
45
46    /**
47     * Get the value for a given key and return it as an int
48     * @param key the key
49     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
50     * @return the value
51     */
52    public int getInt(double key, int programPoint);
53
54    /**
55     * Get the value for a given key and return it as an int
56     * @param key the key
57     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
58     * @return the value
59     */
60    public int getInt(int key, int programPoint);
61
62    /**
63     * Get the value for a given key and return it as a double
64     * @param key the key
65     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
66     * @return the value
67     */
68    public double getDouble(Object key, int programPoint);
69
70    /**
71     * Get the value for a given key and return it as a double
72     * @param key the key
73     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
74     * @return the value
75     */
76    public double getDouble(double key, int programPoint);
77
78    /**
79     * Get the value for a given key and return it as a double
80     * @param key the key
81     * @param programPoint or INVALID_PROGRAM_POINT if pessimistic
82     * @return the value
83     */
84    public double getDouble(int key, int programPoint);
85
86    /**
87     * Get the value for a given key and return it as an Object
88     * @param key the key
89     * @return the value
90     */
91    public Object get(Object key);
92
93    /**
94     * Get the value for a given key and return it as an Object
95     * @param key the key
96     * @return the value
97     */
98    public Object get(double key);
99
100    /**
101     * Get the value for a given key and return it as an Object
102     * @param key the key
103     * @return the value
104     */
105    public Object get(int key);
106
107    /**
108     * Set the value of a given key
109     * @param key     the key
110     * @param value   the value
111     * @param flags   call site flags
112     */
113    public void set(Object key, int value, int flags);
114
115    /**
116     * Set the value of a given key
117     * @param key     the key
118     * @param value   the value
119     * @param flags   call site flags
120     */
121    public void set(Object key, double value, int flags);
122
123    /**
124     * Set the value of a given key
125     * @param key     the key
126     * @param value   the value
127     * @param flags   call site flags
128     */
129    public void set(Object key, Object value, int flags);
130
131    /**
132     * Set the value of a given key
133     * @param key     the key
134     * @param value   the value
135     * @param flags   call site flags
136     */
137    public void set(double key, int value, int flags);
138
139    /**
140     * Set the value of a given key
141     * @param key     the key
142     * @param value   the value
143     * @param flags   call site flags
144     */
145    public void set(double key, double value, int flags);
146
147    /**
148     * Set the value of a given key
149     * @param key     the key
150     * @param value   the value
151     * @param flags   call site flags
152     */
153    public void set(double key, Object value, int flags);
154
155    /**
156     * Set the value of a given key
157     * @param key     the key
158     * @param value   the value
159     * @param flags   call site flags
160     */
161    public void set(int key, int value, int flags);
162
163    /**
164     * Set the value of a given key
165     * @param key     the key
166     * @param value   the value
167     * @param flags   call site flags
168     */
169    public void set(int key, double value, int flags);
170
171    /**
172     * Set the value of a given key
173     * @param key     the key
174     * @param value   the value
175     * @param flags   call site flags
176     */
177    public void set(int key, Object value, int flags);
178
179    /**
180     * Check if the given key exists anywhere in the proto chain
181     * @param key the key
182     * @return true if key exists
183     */
184    public boolean has(Object key);
185
186    /**
187     * Check if the given key exists anywhere in the proto chain
188     * @param key the key
189     * @return true if key exists
190     */
191    public boolean has(int key);
192
193    /**
194     * Check if the given key exists anywhere in the proto chain
195     * @param key the key
196     * @return true if key exists
197     */
198    public boolean has(double key);
199
200    /**
201     * Check if the given key exists directly in the implementor
202     * @param key the key
203     * @return true if key exists
204     */
205    public boolean hasOwnProperty(Object key);
206
207    /**
208     * Check if the given key exists directly in the implementor
209     * @param key the key
210     * @return true if key exists
211     */
212    public boolean hasOwnProperty(int key);
213
214    /**
215     * Check if the given key exists directly in the implementor
216     * @param key the key
217     * @return true if key exists
218     */
219    public boolean hasOwnProperty(double key);
220
221    /**
222     * Delete a property with the given key from the implementor
223     * @param key    the key
224     * @param strict are we in strict mode
225     * @return true if deletion succeeded, false otherwise
226     */
227    public boolean delete(int key, boolean strict);
228
229    /**
230     * Delete a property with the given key from the implementor
231     * @param key    the key
232     * @param strict are we in strict mode
233     * @return true if deletion succeeded, false otherwise
234     */
235    public boolean delete(double key, boolean strict);
236
237    /**
238     * Delete a property with the given key from the implementor
239     * @param key    the key
240     * @param strict are we in strict mode
241     * @return true if deletion succeeded, false otherwise
242     */
243    public boolean delete(Object key, boolean strict);
244}
245