mirror of
https://github.com/darlinghq/darling-JavaScriptCore.git
synced 2024-12-04 18:16:39 +00:00
669 lines
22 KiB
Objective-C
669 lines
22 KiB
Objective-C
/*
|
|
* Copyright (C) 2013 Apple Inc. All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef JSValue_h
|
|
#define JSValue_h
|
|
|
|
#if JSC_OBJC_API_ENABLED
|
|
|
|
#import <CoreGraphics/CGGeometry.h>
|
|
|
|
@class JSContext;
|
|
|
|
/*!
|
|
@interface
|
|
@discussion A JSValue is a reference to a JavaScript value. Every JSValue
|
|
originates from a JSContext and holds a strong reference to it.
|
|
When a JSValue instance method creates a new JSValue, the new value
|
|
originates from the same JSContext.
|
|
|
|
All JSValues values also originate from a JSVirtualMachine
|
|
(available indirectly via the context property). It is an error to pass a
|
|
JSValue to a method or property of a JSValue or JSContext originating from a
|
|
different JSVirtualMachine. Doing so will raise an Objective-C exception.
|
|
*/
|
|
NS_CLASS_AVAILABLE(10_9, 7_0)
|
|
@interface JSValue : NSObject
|
|
|
|
/*!
|
|
@property
|
|
@abstract The JSContext that this value originates from.
|
|
*/
|
|
@property (readonly, strong) JSContext *context;
|
|
|
|
/*!
|
|
@methodgroup Creating JavaScript Values
|
|
*/
|
|
/*!
|
|
@method
|
|
@abstract Create a JSValue by converting an Objective-C object.
|
|
@discussion The resulting JSValue retains the provided Objective-C object.
|
|
@param value The Objective-C object to be converted.
|
|
@result The new JSValue.
|
|
*/
|
|
+ (JSValue *)valueWithObject:(id)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JavaScript value from a BOOL primitive.
|
|
@param context The JSContext in which the resulting JSValue will be created.
|
|
@result The new JSValue representing the equivalent boolean value.
|
|
*/
|
|
+ (JSValue *)valueWithBool:(BOOL)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JavaScript value from a double primitive.
|
|
@param context The JSContext in which the resulting JSValue will be created.
|
|
@result The new JSValue representing the equivalent boolean value.
|
|
*/
|
|
+ (JSValue *)valueWithDouble:(double)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JavaScript value from an <code>int32_t</code> primitive.
|
|
@param context The JSContext in which the resulting JSValue will be created.
|
|
@result The new JSValue representing the equivalent boolean value.
|
|
*/
|
|
+ (JSValue *)valueWithInt32:(int32_t)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JavaScript value from a <code>uint32_t</code> primitive.
|
|
@param context The JSContext in which the resulting JSValue will be created.
|
|
@result The new JSValue representing the equivalent boolean value.
|
|
*/
|
|
+ (JSValue *)valueWithUInt32:(uint32_t)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a new, empty JavaScript object.
|
|
@param context The JSContext in which the resulting object will be created.
|
|
@result The new JavaScript object.
|
|
*/
|
|
+ (JSValue *)valueWithNewObjectInContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a new, empty JavaScript array.
|
|
@param context The JSContext in which the resulting array will be created.
|
|
@result The new JavaScript array.
|
|
*/
|
|
+ (JSValue *)valueWithNewArrayInContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a new JavaScript regular expression object.
|
|
@param pattern The regular expression pattern.
|
|
@param flags The regular expression flags.
|
|
@param context The JSContext in which the resulting regular expression object will be created.
|
|
@result The new JavaScript regular expression object.
|
|
*/
|
|
+ (JSValue *)valueWithNewRegularExpressionFromPattern:(NSString *)pattern flags:(NSString *)flags inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a new JavaScript error object.
|
|
@param message The error message.
|
|
@param context The JSContext in which the resulting error object will be created.
|
|
@result The new JavaScript error object.
|
|
*/
|
|
+ (JSValue *)valueWithNewErrorFromMessage:(NSString *)message inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create the JavaScript value <code>null</code>.
|
|
@param context The JSContext to which the resulting JSValue belongs.
|
|
@result The JSValue representing the JavaScript value <code>null</code>.
|
|
*/
|
|
+ (JSValue *)valueWithNullInContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create the JavaScript value <code>undefined</code>.
|
|
@param context The JSContext to which the resulting JSValue belongs.
|
|
@result The JSValue representing the JavaScript value <code>undefined</code>.
|
|
*/
|
|
+ (JSValue *)valueWithUndefinedInContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@methodgroup Converting to Objective-C Types
|
|
@discussion When converting between JavaScript values and Objective-C objects a copy is
|
|
performed. Values of types listed below are copied to the corresponding
|
|
types on conversion in each direction. For NSDictionaries, entries in the
|
|
dictionary that are keyed by strings are copied onto a JavaScript object.
|
|
For dictionaries and arrays, conversion is recursive, with the same object
|
|
conversion being applied to all entries in the collection.
|
|
|
|
<pre>
|
|
@textblock
|
|
Objective-C type | JavaScript type
|
|
--------------------+---------------------
|
|
nil | undefined
|
|
NSNull | null
|
|
NSString | string
|
|
NSNumber | number, boolean
|
|
NSDictionary | Object object
|
|
NSArray | Array object
|
|
NSDate | Date object
|
|
NSBlock (1) | Function object (1)
|
|
id (2) | Wrapper object (2)
|
|
Class (3) | Constructor object (3)
|
|
@/textblock
|
|
</pre>
|
|
|
|
(1) Instances of NSBlock with supported arguments types will be presented to
|
|
JavaScript as a callable Function object. For more information on supported
|
|
argument types see JSExport.h. If a JavaScript Function originating from an
|
|
Objective-C block is converted back to an Objective-C object the block will
|
|
be returned. All other JavaScript functions will be converted in the same
|
|
manner as a JavaScript object of type Object.
|
|
|
|
(2) For Objective-C instances that do not derive from the set of types listed
|
|
above, a wrapper object to provide a retaining handle to the Objective-C
|
|
instance from JavaScript. For more information on these wrapper objects, see
|
|
JSExport.h. When a JavaScript wrapper object is converted back to Objective-C
|
|
the Objective-C instance being retained by the wrapper is returned.
|
|
|
|
(3) For Objective-C Class objects a constructor object containing exported
|
|
class methods will be returned. See JSExport.h for more information on
|
|
constructor objects.
|
|
|
|
For all methods taking arguments of type id, arguments will be converted
|
|
into a JavaScript value according to the above conversion.
|
|
*/
|
|
/*!
|
|
@method
|
|
@abstract Convert this JSValue to an Objective-C object.
|
|
@discussion The JSValue is converted to an Objective-C object according
|
|
to the conversion rules specified above.
|
|
@result The Objective-C representation of this JSValue.
|
|
*/
|
|
- (id)toObject;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to an Objective-C object of a specific class.
|
|
@discussion The JSValue is converted to an Objective-C object of the specified Class.
|
|
If the result is not of the specified Class then <code>nil</code> will be returned.
|
|
@result An Objective-C object of the specified Class or <code>nil</code>.
|
|
*/
|
|
- (id)toObjectOfClass:(Class)expectedClass;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a boolean.
|
|
@discussion The JSValue is converted to a boolean according to the rules specified
|
|
by the JavaScript language.
|
|
@result The boolean result of the conversion.
|
|
*/
|
|
- (BOOL)toBool;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a double.
|
|
@discussion The JSValue is converted to a number according to the rules specified
|
|
by the JavaScript language.
|
|
@result The double result of the conversion.
|
|
*/
|
|
- (double)toDouble;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to an <code>int32_t</code>.
|
|
@discussion The JSValue is converted to an integer according to the rules specified
|
|
by the JavaScript language.
|
|
@result The <code>int32_t</code> result of the conversion.
|
|
*/
|
|
- (int32_t)toInt32;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a <code>uint32_t</code>.
|
|
@discussion The JSValue is converted to an integer according to the rules specified
|
|
by the JavaScript language.
|
|
@result The <code>uint32_t</code> result of the conversion.
|
|
*/
|
|
- (uint32_t)toUInt32;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a NSNumber.
|
|
@discussion If the JSValue represents a boolean, a NSNumber value of YES or NO
|
|
will be returned. For all other types the value will be converted to a number according
|
|
to the rules specified by the JavaScript language.
|
|
@result The NSNumber result of the conversion.
|
|
*/
|
|
- (NSNumber *)toNumber;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a NSString.
|
|
@discussion The JSValue is converted to a string according to the rules specified
|
|
by the JavaScript language.
|
|
@result The NSString containing the result of the conversion.
|
|
*/
|
|
- (NSString *)toString;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a NSDate.
|
|
@discussion The value is converted to a number representing a time interval
|
|
since 1970 which is then used to create a new NSDate instance.
|
|
@result The NSDate created using the converted time interval.
|
|
*/
|
|
- (NSDate *)toDate;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a NSArray.
|
|
@discussion If the value is <code>null</code> or <code>undefined</code> then <code>nil</code> is returned.
|
|
If the value is not an object then a JavaScript TypeError will be thrown.
|
|
The property <code>length</code> is read from the object, converted to an unsigned
|
|
integer, and an NSArray of this size is allocated. Properties corresponding
|
|
to indicies within the array bounds will be copied to the array, with
|
|
JSValues converted to equivalent Objective-C objects as specified.
|
|
@result The NSArray containing the recursively converted contents of the
|
|
converted JavaScript array.
|
|
*/
|
|
- (NSArray *)toArray;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a NSDictionary.
|
|
@discussion If the value is <code>null</code> or <code>undefined</code> then <code>nil</code> is returned.
|
|
If the value is not an object then a JavaScript TypeError will be thrown.
|
|
All enumerable properties of the object are copied to the dictionary, with
|
|
JSValues converted to equivalent Objective-C objects as specified.
|
|
@result The NSDictionary containing the recursively converted contents of
|
|
the converted JavaScript object.
|
|
*/
|
|
- (NSDictionary *)toDictionary;
|
|
|
|
/*!
|
|
@methodgroup Accessing Properties
|
|
*/
|
|
/*!
|
|
@method
|
|
@abstract Access a property of a JSValue.
|
|
@result The JSValue for the requested property or the JSValue <code>undefined</code>
|
|
if the property does not exist.
|
|
*/
|
|
- (JSValue *)valueForProperty:(NSString *)property;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Set a property on a JSValue.
|
|
*/
|
|
- (void)setValue:(id)value forProperty:(NSString *)property;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Delete a property from a JSValue.
|
|
@result YES if deletion is successful, NO otherwise.
|
|
*/
|
|
- (BOOL)deleteProperty:(NSString *)property;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Check if a JSValue has a property.
|
|
@discussion This method has the same function as the JavaScript operator <code>in</code>.
|
|
@result Returns YES if property is present on the value.
|
|
*/
|
|
- (BOOL)hasProperty:(NSString *)property;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Define properties with custom descriptors on JSValues.
|
|
@discussion This method may be used to create a data or accessor property on an object.
|
|
This method operates in accordance with the Object.defineProperty method in the
|
|
JavaScript language.
|
|
*/
|
|
- (void)defineProperty:(NSString *)property descriptor:(id)descriptor;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Access an indexed (numerical) property on a JSValue.
|
|
@result The JSValue for the property at the specified index.
|
|
Returns the JavaScript value <code>undefined</code> if no property exists at that index.
|
|
*/
|
|
- (JSValue *)valueAtIndex:(NSUInteger)index;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Set an indexed (numerical) property on a JSValue.
|
|
@discussion For JSValues that are JavaScript arrays, indices greater than
|
|
UINT_MAX - 1 will not affect the length of the array.
|
|
*/
|
|
- (void)setValue:(id)value atIndex:(NSUInteger)index;
|
|
|
|
/*!
|
|
@functiongroup Checking JavaScript Types
|
|
*/
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue corresponds to the JavaScript value <code>undefined</code>.
|
|
*/
|
|
@property (readonly) BOOL isUndefined;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue corresponds to the JavaScript value <code>null</code>.
|
|
*/
|
|
@property (readonly) BOOL isNull;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is a boolean.
|
|
*/
|
|
@property (readonly) BOOL isBoolean;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is a number.
|
|
@discussion In JavaScript, there is no differentiation between types of numbers.
|
|
Semantically all numbers behave like doubles except in special cases like bit
|
|
operations.
|
|
*/
|
|
@property (readonly) BOOL isNumber;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is a string.
|
|
*/
|
|
@property (readonly) BOOL isString;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is an object.
|
|
*/
|
|
@property (readonly) BOOL isObject;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is an array.
|
|
*/
|
|
@property (readonly) BOOL isArray NS_AVAILABLE(10_11, 9_0);
|
|
|
|
/*!
|
|
@property
|
|
@abstract Check if a JSValue is a date.
|
|
*/
|
|
@property (readonly) BOOL isDate NS_AVAILABLE(10_11, 9_0);
|
|
|
|
/*!
|
|
@method
|
|
@abstract Compare two JSValues using JavaScript's <code>===</code> operator.
|
|
*/
|
|
- (BOOL)isEqualToObject:(id)value;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Compare two JSValues using JavaScript's <code>==</code> operator.
|
|
*/
|
|
- (BOOL)isEqualWithTypeCoercionToObject:(id)value;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Check if a JSValue is an instance of another object.
|
|
@discussion This method has the same function as the JavaScript operator <code>instanceof</code>.
|
|
If an object other than a JSValue is passed, it will first be converted according to
|
|
the aforementioned rules.
|
|
*/
|
|
- (BOOL)isInstanceOf:(id)value;
|
|
|
|
/*!
|
|
@methodgroup Calling Functions and Constructors
|
|
*/
|
|
/*!
|
|
@method
|
|
@abstract Invoke a JSValue as a function.
|
|
@discussion In JavaScript, if a function doesn't explicitly return a value then it
|
|
implicitly returns the JavaScript value <code>undefined</code>.
|
|
@param arguments The arguments to pass to the function.
|
|
@result The return value of the function call.
|
|
*/
|
|
- (JSValue *)callWithArguments:(NSArray *)arguments;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Invoke a JSValue as a constructor.
|
|
@discussion This is equivalent to using the <code>new</code> syntax in JavaScript.
|
|
@param arguments The arguments to pass to the constructor.
|
|
@result The return value of the constructor call.
|
|
*/
|
|
- (JSValue *)constructWithArguments:(NSArray *)arguments;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Invoke a method on a JSValue.
|
|
@discussion Accesses the property named <code>method</code> from this value and
|
|
calls the resulting value as a function, passing this JSValue as the <code>this</code>
|
|
value along with the specified arguments.
|
|
@param method The name of the method to be invoked.
|
|
@param arguments The arguments to pass to the method.
|
|
@result The return value of the method call.
|
|
*/
|
|
- (JSValue *)invokeMethod:(NSString *)method withArguments:(NSArray *)arguments;
|
|
|
|
@end
|
|
|
|
/*!
|
|
@category
|
|
@discussion Objective-C methods exported to JavaScript may have argument and/or return
|
|
values of struct types, provided that conversion to and from the struct is
|
|
supported by JSValue. Support is provided for any types where JSValue
|
|
contains both a class method <code>valueWith<Type>:inContext:</code>, and and instance
|
|
method <code>to<Type></code>- where the string <code><Type></code> in these selector names match,
|
|
with the first argument to the former being of the same struct type as the
|
|
return type of the latter.
|
|
Support is provided for structs of type CGPoint, NSRange, CGRect and CGSize.
|
|
*/
|
|
@interface JSValue (StructSupport)
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JSValue from a CGPoint.
|
|
@result A newly allocated JavaScript object containing properties
|
|
named <code>x</code> and <code>y</code>, with values from the CGPoint.
|
|
*/
|
|
+ (JSValue *)valueWithPoint:(CGPoint)point inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JSValue from a NSRange.
|
|
@result A newly allocated JavaScript object containing properties
|
|
named <code>location</code> and <code>length</code>, with values from the NSRange.
|
|
*/
|
|
+ (JSValue *)valueWithRange:(NSRange)range inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract
|
|
Create a JSValue from a CGRect.
|
|
@result A newly allocated JavaScript object containing properties
|
|
named <code>x</code>, <code>y</code>, <code>width</code>, and <code>height</code>, with values from the CGRect.
|
|
*/
|
|
+ (JSValue *)valueWithRect:(CGRect)rect inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Create a JSValue from a CGSize.
|
|
@result A newly allocated JavaScript object containing properties
|
|
named <code>width</code> and <code>height</code>, with values from the CGSize.
|
|
*/
|
|
+ (JSValue *)valueWithSize:(CGSize)size inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a CGPoint.
|
|
@discussion Reads the properties named <code>x</code> and <code>y</code> from
|
|
this JSValue, and converts the results to double.
|
|
@result The new CGPoint.
|
|
*/
|
|
- (CGPoint)toPoint;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to an NSRange.
|
|
@discussion Reads the properties named <code>location</code> and
|
|
<code>length</code> from this JSValue and converts the results to double.
|
|
@result The new NSRange.
|
|
*/
|
|
- (NSRange)toRange;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a CGRect.
|
|
@discussion Reads the properties named <code>x</code>, <code>y</code>,
|
|
<code>width</code>, and <code>height</code> from this JSValue and converts the results to double.
|
|
@result The new CGRect.
|
|
*/
|
|
- (CGRect)toRect;
|
|
|
|
/*!
|
|
@method
|
|
@abstract Convert a JSValue to a CGSize.
|
|
@discussion Reads the properties named <code>width</code> and
|
|
<code>height</code> from this JSValue and converts the results to double.
|
|
@result The new CGSize.
|
|
*/
|
|
- (CGSize)toSize;
|
|
|
|
@end
|
|
|
|
/*!
|
|
@category
|
|
@discussion Instances of JSValue implement the following methods in order to enable
|
|
support for subscript access by key and index, for example:
|
|
|
|
@textblock
|
|
JSValue *objectA, *objectB;
|
|
JSValue *v1 = object[@"X"]; // Get value for property "X" from 'object'.
|
|
JSValue *v2 = object[42]; // Get value for index 42 from 'object'.
|
|
object[@"Y"] = v1; // Assign 'v1' to property "Y" of 'object'.
|
|
object[101] = v2; // Assign 'v2' to index 101 of 'object'.
|
|
@/textblock
|
|
|
|
An object key passed as a subscript will be converted to a JavaScript value,
|
|
and then the value converted to a string used as a property name.
|
|
*/
|
|
@interface JSValue (SubscriptSupport)
|
|
|
|
- (JSValue *)objectForKeyedSubscript:(id)key;
|
|
- (JSValue *)objectAtIndexedSubscript:(NSUInteger)index;
|
|
- (void)setObject:(id)object forKeyedSubscript:(NSObject <NSCopying> *)key;
|
|
- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index;
|
|
|
|
@end
|
|
|
|
/*!
|
|
@category
|
|
@discussion These functions are for bridging between the C API and the Objective-C API.
|
|
*/
|
|
@interface JSValue (JSValueRefSupport)
|
|
|
|
/*!
|
|
@method
|
|
@abstract Creates a JSValue, wrapping its C API counterpart.
|
|
@result The Objective-C API equivalent of the specified JSValueRef.
|
|
*/
|
|
+ (JSValue *)valueWithJSValueRef:(JSValueRef)value inContext:(JSContext *)context;
|
|
|
|
/*!
|
|
@property
|
|
@abstract Returns the C API counterpart wrapped by a JSContext.
|
|
@result The C API equivalent of this JSValue.
|
|
*/
|
|
@property (readonly) JSValueRef JSValueRef;
|
|
@end
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
@group Property Descriptor Constants
|
|
@discussion These keys may assist in creating a property descriptor for use with the
|
|
defineProperty method on JSValue.
|
|
Property descriptors must fit one of three descriptions:
|
|
|
|
Data Descriptor:
|
|
- A descriptor containing one or both of the keys <code>value</code> and <code>writable</code>,
|
|
and optionally containing one or both of the keys <code>enumerable</code> and
|
|
<code>configurable</code>. A data descriptor may not contain either the <code>get</code> or
|
|
<code>set</code> key.
|
|
A data descriptor may be used to create or modify the attributes of a
|
|
data property on an object (replacing any existing accessor property).
|
|
|
|
Accessor Descriptor:
|
|
- A descriptor containing one or both of the keys <code>get</code> and <code>set</code>, and
|
|
optionally containing one or both of the keys <code>enumerable</code> and
|
|
<code>configurable</code>. An accessor descriptor may not contain either the <code>value</code>
|
|
or <code>writable</code> key.
|
|
An accessor descriptor may be used to create or modify the attributes of
|
|
an accessor property on an object (replacing any existing data property).
|
|
|
|
Generic Descriptor:
|
|
- A descriptor containing one or both of the keys <code>enumerable</code> and
|
|
<code>configurable</code>. A generic descriptor may not contain any of the keys
|
|
<code>value</code>, <code>writable</code>, <code>get</code>, or <code>set</code>.
|
|
A generic descriptor may be used to modify the attributes of an existing
|
|
data or accessor property, or to create a new data property.
|
|
*/
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorWritableKey;
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorEnumerableKey;
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorConfigurableKey;
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorValueKey;
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorGetKey;
|
|
/*!
|
|
@const
|
|
*/
|
|
JS_EXPORT extern NSString * const JSPropertyDescriptorSetKey;
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif // JSValue_h
|