]> git.saurik.com Git - apple/javascriptcore.git/blame - API/JSContext.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / API / JSContext.h
CommitLineData
93a37866
A
1/*
2 * Copyright (C) 2013 Apple 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 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 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
81345200 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
93a37866
A
24 */
25
26#ifndef JSContext_h
27#define JSContext_h
28
29#include <JavaScriptCore/JavaScript.h>
81345200 30#include <JavaScriptCore/WebKitAvailability.h>
93a37866
A
31
32#if JSC_OBJC_API_ENABLED
33
34@class JSVirtualMachine, JSValue;
35
81345200
A
36/*!
37@interface
38@discussion An instance of JSContext represents a JavaScript execution environment. All
39 JavaScript execution takes place within a context.
40 JSContext is also used to manage the life-cycle of objects within the
41 JavaScript virtual machine. Every instance of JSValue is associated with a
42 JSContext via a strong reference. The JSValue will keep the JSContext it
43 references alive so long as the JSValue remains alive. When all of the JSValues
44 that reference a particular JSContext have been deallocated the JSContext
45 will be deallocated unless it has been previously retained.
46*/
93a37866
A
47NS_CLASS_AVAILABLE(10_9, 7_0)
48@interface JSContext : NSObject
49
81345200
A
50/*!
51@methodgroup Creating New JSContexts
52*/
53/*!
54@method
55@abstract Create a JSContext.
56@result The new context.
57*/
58- (instancetype)init;
59
60/*!
61@method
62@abstract Create a JSContext in the specified virtual machine.
63@param virtualMachine The JSVirtualMachine in which the context will be created.
64@result The new context.
65*/
66- (instancetype)initWithVirtualMachine:(JSVirtualMachine *)virtualMachine;
67
68/*!
69@methodgroup Evaluating Scripts
70*/
71/*!
72@method
73@abstract Evaluate a string of JavaScript code.
74@param script A string containing the JavaScript code to evaluate.
75@result The last value generated by the script.
76*/
93a37866
A
77- (JSValue *)evaluateScript:(NSString *)script;
78
81345200
A
79/*!
80@method
81@abstract Evaluate a string of JavaScript code, with a URL for the script's source file.
82@param script A string containing the JavaScript code to evaluate.
83@param sourceURL A URL for the script's source file. Used by debuggers and when reporting exceptions. This parameter is informative only: it does not change the behavior of the script.
84@result The last value generated by the script.
85*/
86- (JSValue *)evaluateScript:(NSString *)script withSourceURL:(NSURL *)sourceURL NS_AVAILABLE(10_10, 8_0);
87
88/*!
89@methodgroup Callback Accessors
90*/
91/*!
92@method
93@abstract Get the JSContext that is currently executing.
94@discussion This method may be called from within an Objective-C block or method invoked
95 as a callback from JavaScript to retrieve the callback's context. Outside of
96 a callback from JavaScript this method will return nil.
97@result The currently executing JSContext or nil if there isn't one.
98*/
93a37866 99+ (JSContext *)currentContext;
81345200
A
100
101/*!
102@method
103@abstract Get the JavaScript function that is currently executing.
104@discussion This method may be called from within an Objective-C block or method invoked
105 as a callback from JavaScript to retrieve the callback's context. Outside of
106 a callback from JavaScript this method will return nil.
107@result The currently executing JavaScript function or nil if there isn't one.
108*/
109+ (JSValue *)currentCallee NS_AVAILABLE(10_10, 8_0);
110
111/*!
112@method
113@abstract Get the <code>this</code> value of the currently executing method.
114@discussion This method may be called from within an Objective-C block or method invoked
115 as a callback from JavaScript to retrieve the callback's this value. Outside
116 of a callback from JavaScript this method will return nil.
117@result The current <code>this</code> value or nil if there isn't one.
118*/
93a37866 119+ (JSValue *)currentThis;
81345200
A
120
121/*!
122@method
123@abstract Get the arguments to the current callback.
124@discussion This method may be called from within an Objective-C block or method invoked
125 as a callback from JavaScript to retrieve the callback's arguments, objects
126 in the returned array are instances of JSValue. Outside of a callback from
127 JavaScript this method will return nil.
128@result An NSArray of the arguments nil if there is no current callback.
129*/
93a37866
A
130+ (NSArray *)currentArguments;
131
81345200
A
132/*!
133@methodgroup Global Properties
134*/
135/*!
136@property
137@abstract Get the global object of the context.
138@discussion This method retrieves the global object of the JavaScript execution context.
139 Instances of JSContext originating from WebKit will return a reference to the
140 WindowProxy object.
141@result The global object.
142*/
143@property (readonly, strong) JSValue *globalObject;
144
145/*!
146@property
147@discussion The <code>exception</code> property may be used to throw an exception to JavaScript.
148
149 Before a callback is made from JavaScript to an Objective-C block or method,
150 the prior value of the exception property will be preserved and the property
151 will be set to nil. After the callback has completed the new value of the
152 exception property will be read, and prior value restored. If the new value
153 of exception is not nil, the callback will result in that value being thrown.
154
155 This property may also be used to check for uncaught exceptions arising from
156 API function calls (since the default behaviour of <code>exceptionHandler</code> is to
157 assign an uncaught exception to this property).
158
159 If a JSValue originating from a different JSVirtualMachine than this context
160 is assigned to this property, an Objective-C exception will be raised.
161*/
162@property (strong) JSValue *exception;
163
164/*!
165@property
166@discussion If a call to an API function results in an uncaught JavaScript exception, the
167 <code>exceptionHandler</code> block will be invoked. The default implementation for the
168 exception handler will store the exception to the exception property on
169 context. As a consequence the default behaviour is for unhandled exceptions
170 occurring within a callback from JavaScript to be rethrown upon return.
171 Setting this value to nil will result in all uncaught exceptions thrown from
172 the API being silently consumed.
173*/
174@property (copy) void(^exceptionHandler)(JSContext *context, JSValue *exception);
175
176/*!
177@property
178@discussion All instances of JSContext are associated with a single JSVirtualMachine. The
179 virtual machine provides an "object space" or set of execution resources.
180*/
181@property (readonly, strong) JSVirtualMachine *virtualMachine;
182
183/*!
184@property
185@discussion Name of the JSContext. Exposed when remote debugging the context.
186*/
187@property (copy) NSString *name NS_AVAILABLE(10_10, 8_0);
93a37866
A
188
189@end
190
81345200
A
191/*!
192@category
193@discussion Instances of JSContext implement the following methods in order to enable
194 support for subscript access by key and index, for example:
195
196@textblock
197 JSContext *context;
198 JSValue *v = context[@"X"]; // Get value for "X" from the global object.
199 context[@"Y"] = v; // Assign 'v' to "Y" on the global object.
200@/textblock
201
202 An object key passed as a subscript will be converted to a JavaScript value,
203 and then the value converted to a string used to resolve a property of the
204 global object.
205*/
206@interface JSContext (SubscriptSupport)
207
208/*!
209method
210@abstract Get a particular property on the global object.
211@param key
212@result The JSValue for the global object's property.
213*/
93a37866 214- (JSValue *)objectForKeyedSubscript:(id)key;
81345200
A
215
216/*!
217method
218@abstract Set a particular property on the global object.
219@param object
220@param key
221*/
93a37866
A
222- (void)setObject:(id)object forKeyedSubscript:(NSObject <NSCopying> *)key;
223
224@end
225
81345200
A
226/*!
227@category
228@discussion These functions are for bridging between the C API and the Objective-C API.
229*/
230@interface JSContext (JSContextRefSupport)
231
232/*!
233@method
234@abstract Create a JSContext, wrapping its C API counterpart.
235@param jsGlobalContextRef
236@result The JSContext equivalent of the provided JSGlobalContextRef.
237*/
93a37866 238+ (JSContext *)contextWithJSGlobalContextRef:(JSGlobalContextRef)jsGlobalContextRef;
81345200
A
239
240/*!
241@property
242@abstract Get the C API counterpart wrapped by a JSContext.
243@result The C API equivalent of this JSContext.
244*/
245@property (readonly) JSGlobalContextRef JSGlobalContextRef;
93a37866
A
246@end
247
248#endif
249
250#endif // JSContext_h