+#define CYSetFunction_(name, type) \
+ CYSetFunction(context, global, #name, reinterpret_cast<void (*)()>(&name), type)
+
+ CYSetFunction_(class_createInstance, "@#L");
+ CYSetFunction_(class_getInstanceSize, "L#");
+ CYSetFunction_(class_getIvarLayout, "*#");
+ CYSetFunction_(class_getName, "*#");
+ CYSetFunction_(class_getSuperclass, "##");
+ CYSetFunction_(class_getVersion, "i#");
+ CYSetFunction_(class_isMetaClass, "B#");
+ CYSetFunction_(class_respondsToSelector, "B#:");
+ CYSetFunction_(class_setSuperclass, "###");
+ CYSetFunction_(class_setVersion, "v#i");
+ CYSetFunction_(objc_allocateClassPair, "##*L");
+ CYSetFunction_(objc_getClass, "#*");
+ CYSetFunction_(objc_getFutureClass, "#*");
+ CYSetFunction_(objc_getMetaClass, "@*");
+ CYSetFunction_(objc_getRequiredClass, "@*");
+ CYSetFunction_(objc_lookUpClass, "@*");
+ CYSetFunction_(objc_registerClassPair, "v#");
+ CYSetFunction_(objc_setFutureClass, "v#*");
+ CYSetFunction_(object_copy, "@@L");
+ CYSetFunction_(object_dispose, "@@");
+ CYSetFunction_(object_getClass, "#@");
+ CYSetFunction_(object_getClassName, "*@");
+ CYSetFunction_(object_setClass, "#@#");
+ CYSetFunction_(sel_getName, "*:");
+ CYSetFunction_(sel_getUid, ":*");
+ CYSetFunction_(sel_isEqual, "B::");
+ CYSetFunction_(sel_registerName, ":*");
+
+ CYSetProperty(context, global, "objc_msgSend", JSObjectMakeFunctionWithCallback(context, CYString("objc_msgSend"), &$objc_msgSend));
+
+ CYSetProperty(context, global, "YES", JSValueMakeBoolean(context, true));
+ CYSetProperty(context, global, "NO", JSValueMakeBoolean(context, true));
+ CYSetProperty(context, global, "nil", JSValueMakeNull(context));