• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef JSValueRef_h
27 #define JSValueRef_h
28 
29 #include <JavaScriptCore/JSBase.h>
30 
31 #ifndef __cplusplus
32 #include <stdbool.h>
33 #endif
34 
35 /*!
36 @enum JSType
37 @abstract     A constant identifying the type of a JSValue.
38 @constant     kJSTypeUndefined  The unique undefined value.
39 @constant     kJSTypeNull       The unique null value.
40 @constant     kJSTypeBoolean    A primitive boolean value, one of true or false.
41 @constant     kJSTypeNumber     A primitive number value.
42 @constant     kJSTypeString     A primitive string value.
43 @constant     kJSTypeObject     An object value (meaning that this JSValueRef is a JSObjectRef).
44 */
45 typedef enum {
46     kJSTypeUndefined,
47     kJSTypeNull,
48     kJSTypeBoolean,
49     kJSTypeNumber,
50     kJSTypeString,
51     kJSTypeObject
52 } JSType;
53 
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 /*!
59 @function
60 @abstract       Returns a JavaScript value's type.
61 @param ctx  The execution context to use.
62 @param value    The JSValue whose type you want to obtain.
63 @result         A value of type JSType that identifies value's type.
64 */
65 JS_EXPORT JSType JSValueGetType(JSContextRef ctx, JSValueRef value);
66 
67 /*!
68 @function
69 @abstract       Tests whether a JavaScript value's type is the undefined type.
70 @param ctx  The execution context to use.
71 @param value    The JSValue to test.
72 @result         true if value's type is the undefined type, otherwise false.
73 */
74 JS_EXPORT bool JSValueIsUndefined(JSContextRef ctx, JSValueRef value);
75 
76 /*!
77 @function
78 @abstract       Tests whether a JavaScript value's type is the null type.
79 @param ctx  The execution context to use.
80 @param value    The JSValue to test.
81 @result         true if value's type is the null type, otherwise false.
82 */
83 JS_EXPORT bool JSValueIsNull(JSContextRef ctx, JSValueRef value);
84 
85 /*!
86 @function
87 @abstract       Tests whether a JavaScript value's type is the boolean type.
88 @param ctx  The execution context to use.
89 @param value    The JSValue to test.
90 @result         true if value's type is the boolean type, otherwise false.
91 */
92 JS_EXPORT bool JSValueIsBoolean(JSContextRef ctx, JSValueRef value);
93 
94 /*!
95 @function
96 @abstract       Tests whether a JavaScript value's type is the number type.
97 @param ctx  The execution context to use.
98 @param value    The JSValue to test.
99 @result         true if value's type is the number type, otherwise false.
100 */
101 JS_EXPORT bool JSValueIsNumber(JSContextRef ctx, JSValueRef value);
102 
103 /*!
104 @function
105 @abstract       Tests whether a JavaScript value's type is the string type.
106 @param ctx  The execution context to use.
107 @param value    The JSValue to test.
108 @result         true if value's type is the string type, otherwise false.
109 */
110 JS_EXPORT bool JSValueIsString(JSContextRef ctx, JSValueRef value);
111 
112 /*!
113 @function
114 @abstract       Tests whether a JavaScript value's type is the object type.
115 @param ctx  The execution context to use.
116 @param value    The JSValue to test.
117 @result         true if value's type is the object type, otherwise false.
118 */
119 JS_EXPORT bool JSValueIsObject(JSContextRef ctx, JSValueRef value);
120 
121 /*!
122 @function
123 @abstract Tests whether a JavaScript value is an object with a given class in its class chain.
124 @param ctx The execution context to use.
125 @param value The JSValue to test.
126 @param jsClass The JSClass to test against.
127 @result true if value is an object and has jsClass in its class chain, otherwise false.
128 */
129 JS_EXPORT bool JSValueIsObjectOfClass(JSContextRef ctx, JSValueRef value, JSClassRef jsClass);
130 
131 /* Comparing values */
132 
133 /*!
134 @function
135 @abstract Tests whether two JavaScript values are equal, as compared by the JS == operator.
136 @param ctx The execution context to use.
137 @param a The first value to test.
138 @param b The second value to test.
139 @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
140 @result true if the two values are equal, false if they are not equal or an exception is thrown.
141 */
142 JS_EXPORT bool JSValueIsEqual(JSContextRef ctx, JSValueRef a, JSValueRef b, JSValueRef* exception);
143 
144 /*!
145 @function
146 @abstract       Tests whether two JavaScript values are strict equal, as compared by the JS === operator.
147 @param ctx  The execution context to use.
148 @param a        The first value to test.
149 @param b        The second value to test.
150 @result         true if the two values are strict equal, otherwise false.
151 */
152 JS_EXPORT bool JSValueIsStrictEqual(JSContextRef ctx, JSValueRef a, JSValueRef b);
153 
154 /*!
155 @function
156 @abstract Tests whether a JavaScript value is an object constructed by a given constructor, as compared by the JS instanceof operator.
157 @param ctx The execution context to use.
158 @param value The JSValue to test.
159 @param constructor The constructor to test against.
160 @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
161 @result true if value is an object constructed by constructor, as compared by the JS instanceof operator, otherwise false.
162 */
163 JS_EXPORT bool JSValueIsInstanceOfConstructor(JSContextRef ctx, JSValueRef value, JSObjectRef constructor, JSValueRef* exception);
164 
165 /* Creating values */
166 
167 /*!
168 @function
169 @abstract       Creates a JavaScript value of the undefined type.
170 @param ctx  The execution context to use.
171 @result         The unique undefined value.
172 */
173 JS_EXPORT JSValueRef JSValueMakeUndefined(JSContextRef ctx);
174 
175 /*!
176 @function
177 @abstract       Creates a JavaScript value of the null type.
178 @param ctx  The execution context to use.
179 @result         The unique null value.
180 */
181 JS_EXPORT JSValueRef JSValueMakeNull(JSContextRef ctx);
182 
183 /*!
184 @function
185 @abstract       Creates a JavaScript value of the boolean type.
186 @param ctx  The execution context to use.
187 @param boolean  The bool to assign to the newly created JSValue.
188 @result         A JSValue of the boolean type, representing the value of boolean.
189 */
190 JS_EXPORT JSValueRef JSValueMakeBoolean(JSContextRef ctx, bool boolean);
191 
192 /*!
193 @function
194 @abstract       Creates a JavaScript value of the number type.
195 @param ctx  The execution context to use.
196 @param number   The double to assign to the newly created JSValue.
197 @result         A JSValue of the number type, representing the value of number.
198 */
199 JS_EXPORT JSValueRef JSValueMakeNumber(JSContextRef ctx, double number);
200 
201 /*!
202 @function
203 @abstract       Creates a JavaScript value of the string type.
204 @param ctx  The execution context to use.
205 @param string   The JSString to assign to the newly created JSValue. The
206  newly created JSValue retains string, and releases it upon garbage collection.
207 @result         A JSValue of the string type, representing the value of string.
208 */
209 JS_EXPORT JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string);
210 
211 /* Converting to primitive values */
212 
213 /*!
214 @function
215 @abstract       Converts a JavaScript value to boolean and returns the resulting boolean.
216 @param ctx  The execution context to use.
217 @param value    The JSValue to convert.
218 @result         The boolean result of conversion.
219 */
220 JS_EXPORT bool JSValueToBoolean(JSContextRef ctx, JSValueRef value);
221 
222 /*!
223 @function
224 @abstract       Converts a JavaScript value to number and returns the resulting number.
225 @param ctx  The execution context to use.
226 @param value    The JSValue to convert.
227 @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
228 @result         The numeric result of conversion, or NaN if an exception is thrown.
229 */
230 JS_EXPORT double JSValueToNumber(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
231 
232 /*!
233 @function
234 @abstract       Converts a JavaScript value to string and copies the result into a JavaScript string.
235 @param ctx  The execution context to use.
236 @param value    The JSValue to convert.
237 @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
238 @result         A JSString with the result of conversion, or NULL if an exception is thrown. Ownership follows the Create Rule.
239 */
240 JS_EXPORT JSStringRef JSValueToStringCopy(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
241 
242 /*!
243 @function
244 @abstract Converts a JavaScript value to object and returns the resulting object.
245 @param ctx  The execution context to use.
246 @param value    The JSValue to convert.
247 @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception.
248 @result         The JSObject result of conversion, or NULL if an exception is thrown.
249 */
250 JS_EXPORT JSObjectRef JSValueToObject(JSContextRef ctx, JSValueRef value, JSValueRef* exception);
251 
252 /* Garbage collection */
253 /*!
254 @function
255 @abstract Protects a JavaScript value from garbage collection.
256 @param ctx The execution context to use.
257 @param value The JSValue to protect.
258 @discussion Use this method when you want to store a JSValue in a global or on the heap, where the garbage collector will not be able to discover your reference to it.
259 
260 A value may be protected multiple times and must be unprotected an equal number of times before becoming eligible for garbage collection.
261 */
262 JS_EXPORT void JSValueProtect(JSContextRef ctx, JSValueRef value);
263 
264 /*!
265 @function
266 @abstract       Unprotects a JavaScript value from garbage collection.
267 @param ctx      The execution context to use.
268 @param value    The JSValue to unprotect.
269 @discussion     A value may be protected multiple times and must be unprotected an
270  equal number of times before becoming eligible for garbage collection.
271 */
272 JS_EXPORT void JSValueUnprotect(JSContextRef ctx, JSValueRef value);
273 
274 #ifdef __cplusplus
275 }
276 #endif
277 
278 #endif /* JSValueRef_h */
279