| "while" { $$ = $1; }
| "with" { $$ = $1; }
;
+
+PrimaryExpressionNo
+ : "@" LiteralNoRE { $$ = CYNew CYBox($2); }
+ | "@" ArrayLiteral { $$ = CYNew CYBox($2); }
+ | "@" ObjectLiteral { $$ = CYNew CYBox($2); }
+ | "@" "(" Expression ")" { $$ = CYNew CYBox($3); }
+ ;
@end
Identifier
| BooleanLiteral { $$ = $1; }
| NumericLiteral { $$ = $1; }
| StringLiteral { $$ = $1; }
- | "@" StringLiteral { $$ = $2; }
;
LiteralRE
@end
@protocol Cycript
+- (id) cy$box;
- (JSValueRef) cy$JSValueInContext:(JSContextRef)context;
@end
/* Bridge: NSArray {{{ */
@implementation NSArray (Cycript)
+- (id) cy$box {
+ return [[self mutableCopy] autorelease];
+}
+
- (NSString *) cy$toCYON {
NSMutableString *json([[[NSMutableString alloc] init] autorelease]);
[json appendString:@"@["];
/* Bridge: NSDictionary {{{ */
@implementation NSDictionary (Cycript)
+- (id) cy$box {
+ return [[self mutableCopy] autorelease];
+}
+
- (NSString *) cy$toCYON {
NSMutableString *json([[[NSMutableString alloc] init] autorelease]);
[json appendString:@"@{"];
/* Bridge: NSObject {{{ */
@implementation NSObject (Cycript)
+- (id) cy$box {
+ return self;
+}
+
- (JSValueRef) cy$JSValueInContext:(JSContextRef)context { CYObjectiveTry_(context) {
return NULL;
} CYObjectiveCatch }
/* Bridge: NSString {{{ */
@implementation NSString (Cycript)
+- (id) cy$box {
+ return [[self copy] autorelease];
+}
+
- (JSType) cy$JSType {
return kJSTypeString;
}
return false;
} CYCatch }
+static JSValueRef Instance_box_callAsFunction(JSContextRef context, JSObjectRef object, JSObjectRef _this, size_t count, const JSValueRef arguments[], JSValueRef *exception) { CYTry {
+ if (count == 0)
+ throw CYJSError(context, "incorrect number of arguments to Instance");
+ CYPool pool;
+ id value(CYCastNSObject(pool, context, arguments[0]));
+ if (value == nil)
+ value = [NSNull null];
+ return CYCastJSValue(context, [value cy$box]);
+} CYCatch }
+
static bool Internal_hasProperty(JSContextRef context, JSObjectRef object, JSStringRef property) {
Internal *internal(reinterpret_cast<Internal *>(JSObjectGetPrivate(object)));
CYPool pool;
CYSetProperty(context, cycript, CYJSString("Selector"), Selector);
CYSetProperty(context, cycript, CYJSString("Super"), Super);
+ JSObjectRef box(JSObjectMakeFunctionWithCallback(context, CYJSString("box"), &Instance_box_callAsFunction));
+ CYSetProperty(context, Instance, CYJSString("box"), box);
+
#if defined(__APPLE__) && defined(__arm__) && 0
CYSetProperty(context, all, CYJSString("objc_registerClassPair"), &objc_registerClassPair_, kJSPropertyAttributeDontEnum);
#endif