mirror of https://github.com/axmolengine/axmol.git
223 lines
7.6 KiB
C++
223 lines
7.6 KiB
C++
#include "simple_native_generated.hpp"
|
|
|
|
JSClass* S_SimpleNativeClass::jsClass = NULL;
|
|
JSObject* S_SimpleNativeClass::jsObject = NULL;
|
|
|
|
JSBool S_SimpleNativeClass::jsConstructor(JSContext *cx, uint32_t argc, jsval *vp)
|
|
{
|
|
JSObject *obj = JS_NewObject(cx, S_SimpleNativeClass::jsClass, S_SimpleNativeClass::jsObject, NULL);
|
|
S_SimpleNativeClass *cobj = new S_SimpleNativeClass(obj);
|
|
pointerShell_t *pt = (pointerShell_t *)JS_malloc(cx, sizeof(pointerShell_t));
|
|
pt->flags = 0; pt->data = cobj;
|
|
JS_SetPrivate(obj, pt);
|
|
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
|
|
return JS_TRUE;
|
|
}
|
|
|
|
void S_SimpleNativeClass::jsFinalize(JSContext *cx, JSObject *obj)
|
|
{
|
|
pointerShell_t *pt = (pointerShell_t *)JS_GetPrivate(obj);
|
|
if (pt) {
|
|
if (!(pt->flags & kPointerTemporary) && pt->data) delete (S_SimpleNativeClass *)pt->data;
|
|
JS_free(cx, pt);
|
|
}
|
|
}
|
|
|
|
JSBool S_SimpleNativeClass::jsPropertyGet(JSContext *cx, JSObject *obj, jsid _id, jsval *val)
|
|
{
|
|
int32_t propId = JSID_TO_INT(_id);
|
|
S_SimpleNativeClass *cobj; JSGET_PTRSHELL(S_SimpleNativeClass, cobj, obj);
|
|
if (!cobj) return JS_FALSE;
|
|
switch(propId) {
|
|
case kSomeField:
|
|
do { jsval tmp; JS_NewNumberValue(cx, cobj->getSomeField(), &tmp); JS_SET_RVAL(cx, val, tmp); } while (0);
|
|
break;
|
|
case kSomeOtherField:
|
|
do { jsval tmp; JS_NewNumberValue(cx, cobj->getSomeOtherField(), &tmp); JS_SET_RVAL(cx, val, tmp); } while (0);
|
|
break;
|
|
case kAnotherMoreComplexField:
|
|
do { JSString *tmp = JS_NewStringCopyZ(cx, cobj->getAnotherMoreComplexField()); JS_SET_RVAL(cx, val, STRING_TO_JSVAL(tmp)); } while (0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
JSBool S_SimpleNativeClass::jsPropertySet(JSContext *cx, JSObject *obj, jsid _id, JSBool strict, jsval *val)
|
|
{
|
|
int32_t propId = JSID_TO_INT(_id);
|
|
S_SimpleNativeClass *cobj; JSGET_PTRSHELL(S_SimpleNativeClass, cobj, obj);
|
|
if (!cobj) return JS_FALSE;
|
|
switch(propId) {
|
|
case kSomeField:
|
|
do { uint32_t tmp; JS_ValueToECMAUint32(cx, *val, &tmp); cobj->setSomeField(tmp); } while (0);
|
|
break;
|
|
case kSomeOtherField:
|
|
do { uint32_t tmp; JS_ValueToECMAUint32(cx, *val, &tmp); cobj->setSomeOtherField(tmp); } while (0);
|
|
break;
|
|
case kAnotherMoreComplexField:
|
|
do {
|
|
char *tmp = JS_EncodeString(cx, JSVAL_TO_STRING(*val));
|
|
if (tmp) { cobj->setAnotherMoreComplexField(tmp); }
|
|
} while (0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
void S_SimpleNativeClass::jsCreateClass(JSContext *cx, JSObject *globalObj, const char *name)
|
|
{
|
|
jsClass = (JSClass *)calloc(1, sizeof(JSClass));
|
|
jsClass->name = name;
|
|
jsClass->addProperty = JS_PropertyStub;
|
|
jsClass->delProperty = JS_PropertyStub;
|
|
jsClass->getProperty = JS_PropertyStub;
|
|
jsClass->setProperty = JS_StrictPropertyStub;
|
|
jsClass->enumerate = JS_EnumerateStub;
|
|
jsClass->resolve = JS_ResolveStub;
|
|
jsClass->convert = JS_ConvertStub;
|
|
jsClass->finalize = jsFinalize;
|
|
jsClass->flags = JSCLASS_HAS_PRIVATE;
|
|
static JSPropertySpec properties[] = {
|
|
{"someField", kSomeField, JSPROP_PERMANENT | JSPROP_SHARED, S_SimpleNativeClass::jsPropertyGet, S_SimpleNativeClass::jsPropertySet},
|
|
{"someOtherField", kSomeOtherField, JSPROP_PERMANENT | JSPROP_SHARED, S_SimpleNativeClass::jsPropertyGet, S_SimpleNativeClass::jsPropertySet},
|
|
{"anotherMoreComplexField", kAnotherMoreComplexField, JSPROP_PERMANENT | JSPROP_SHARED, S_SimpleNativeClass::jsPropertyGet, S_SimpleNativeClass::jsPropertySet},
|
|
{0, 0, 0, 0, 0}
|
|
};
|
|
|
|
static JSFunctionSpec funcs[] = {
|
|
JS_FN("doSomeProcessing", S_SimpleNativeClass::jsdoSomeProcessing, 2, JSPROP_PERMANENT | JSPROP_SHARED),
|
|
JS_FS_END
|
|
};
|
|
|
|
static JSFunctionSpec st_funcs[] = {
|
|
JS_FS_END
|
|
};
|
|
|
|
jsObject = JS_InitClass(cx,globalObj,NULL,jsClass,S_SimpleNativeClass::jsConstructor,0,properties,funcs,NULL,st_funcs);
|
|
}
|
|
|
|
JSBool S_SimpleNativeClass::jsdoSomeProcessing(JSContext *cx, uint32_t argc, jsval *vp) {
|
|
JSObject* obj = (JSObject *)JS_THIS_OBJECT(cx, vp);
|
|
S_SimpleNativeClass* self = NULL; JSGET_PTRSHELL(S_SimpleNativeClass, self, obj);
|
|
if (self == NULL) return JS_FALSE;
|
|
if (argc == 2) {
|
|
JSString *arg0;
|
|
JSString *arg1;
|
|
JS_ConvertArguments(cx, 2, JS_ARGV(cx, vp), "SS", &arg0, &arg1);
|
|
std::string narg0 = JS_EncodeString(cx, arg0);
|
|
std::string narg1 = JS_EncodeString(cx, arg1);
|
|
int ret = self->doSomeProcessing(narg0, narg1);
|
|
do { jsval tmp; JS_NewNumberValue(cx, ret, &tmp); JS_SET_RVAL(cx, vp, tmp); } while (0);
|
|
|
|
return JS_TRUE;
|
|
}
|
|
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
|
|
return JS_TRUE;
|
|
}
|
|
|
|
JSClass* S_AnotherClass::jsClass = NULL;
|
|
JSObject* S_AnotherClass::jsObject = NULL;
|
|
|
|
JSBool S_AnotherClass::jsConstructor(JSContext *cx, uint32_t argc, jsval *vp)
|
|
{
|
|
JSObject *obj = JS_NewObject(cx, S_AnotherClass::jsClass, S_AnotherClass::jsObject, NULL);
|
|
S_AnotherClass *cobj = new S_AnotherClass(obj);
|
|
pointerShell_t *pt = (pointerShell_t *)JS_malloc(cx, sizeof(pointerShell_t));
|
|
pt->flags = 0; pt->data = cobj;
|
|
JS_SetPrivate(obj, pt);
|
|
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj));
|
|
return JS_TRUE;
|
|
}
|
|
|
|
void S_AnotherClass::jsFinalize(JSContext *cx, JSObject *obj)
|
|
{
|
|
pointerShell_t *pt = (pointerShell_t *)JS_GetPrivate(obj);
|
|
if (pt) {
|
|
if (!(pt->flags & kPointerTemporary) && pt->data) delete (S_AnotherClass *)pt->data;
|
|
JS_free(cx, pt);
|
|
}
|
|
}
|
|
|
|
JSBool S_AnotherClass::jsPropertyGet(JSContext *cx, JSObject *obj, jsid _id, jsval *val)
|
|
{
|
|
int32_t propId = JSID_TO_INT(_id);
|
|
S_AnotherClass *cobj; JSGET_PTRSHELL(S_AnotherClass, cobj, obj);
|
|
if (!cobj) return JS_FALSE;
|
|
switch(propId) {
|
|
case kAPublicField:
|
|
do { jsval tmp; JS_NewNumberValue(cx, cobj->aPublicField, &tmp); JS_SET_RVAL(cx, val, tmp); } while (0);
|
|
break;
|
|
case kJustOneField:
|
|
do { jsval tmp; JS_NewNumberValue(cx, cobj->getJustOneField(), &tmp); JS_SET_RVAL(cx, val, tmp); } while (0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
JSBool S_AnotherClass::jsPropertySet(JSContext *cx, JSObject *obj, jsid _id, JSBool strict, jsval *val)
|
|
{
|
|
int32_t propId = JSID_TO_INT(_id);
|
|
S_AnotherClass *cobj; JSGET_PTRSHELL(S_AnotherClass, cobj, obj);
|
|
if (!cobj) return JS_FALSE;
|
|
switch(propId) {
|
|
case kAPublicField:
|
|
do { uint32_t tmp; JS_ValueToECMAUint32(cx, *val, &tmp); cobj->aPublicField = tmp; } while (0);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return JS_TRUE;
|
|
}
|
|
|
|
void S_AnotherClass::jsCreateClass(JSContext *cx, JSObject *globalObj, const char *name)
|
|
{
|
|
jsClass = (JSClass *)calloc(1, sizeof(JSClass));
|
|
jsClass->name = name;
|
|
jsClass->addProperty = JS_PropertyStub;
|
|
jsClass->delProperty = JS_PropertyStub;
|
|
jsClass->getProperty = JS_PropertyStub;
|
|
jsClass->setProperty = JS_StrictPropertyStub;
|
|
jsClass->enumerate = JS_EnumerateStub;
|
|
jsClass->resolve = JS_ResolveStub;
|
|
jsClass->convert = JS_ConvertStub;
|
|
jsClass->finalize = jsFinalize;
|
|
jsClass->flags = JSCLASS_HAS_PRIVATE;
|
|
static JSPropertySpec properties[] = {
|
|
{"aPublicField", kAPublicField, JSPROP_PERMANENT | JSPROP_SHARED, S_AnotherClass::jsPropertyGet, S_AnotherClass::jsPropertySet},
|
|
{"justOneField", kJustOneField, JSPROP_PERMANENT | JSPROP_SHARED, S_AnotherClass::jsPropertyGet, S_AnotherClass::jsPropertySet},
|
|
{0, 0, 0, 0, 0}
|
|
};
|
|
|
|
static JSFunctionSpec funcs[] = {
|
|
JS_FN("doSomethingSimple", S_AnotherClass::jsdoSomethingSimple, 0, JSPROP_PERMANENT | JSPROP_SHARED),
|
|
JS_FS_END
|
|
};
|
|
|
|
static JSFunctionSpec st_funcs[] = {
|
|
JS_FS_END
|
|
};
|
|
|
|
jsObject = JS_InitClass(cx,globalObj,NULL,jsClass,S_AnotherClass::jsConstructor,0,properties,funcs,NULL,st_funcs);
|
|
}
|
|
|
|
JSBool S_AnotherClass::jsdoSomethingSimple(JSContext *cx, uint32_t argc, jsval *vp) {
|
|
JSObject* obj = (JSObject *)JS_THIS_OBJECT(cx, vp);
|
|
S_AnotherClass* self = NULL; JSGET_PTRSHELL(S_AnotherClass, self, obj);
|
|
if (self == NULL) return JS_FALSE;
|
|
if (argc == 0) {
|
|
self->doSomethingSimple();
|
|
|
|
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
|
|
return JS_TRUE;
|
|
}
|
|
JS_SET_RVAL(cx, vp, JSVAL_TRUE);
|
|
return JS_TRUE;
|
|
}
|
|
|