#include #include #include static JSBool Test(JSContext *ctx, JSObject *obj, jsval id, jsval *vp) { JSString *s = JS_NewStringCopyZ(ctx, "this is a test"); *vp = STRING_TO_JSVAL(s); return JS_TRUE; } static JSBool Reset(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { printf("in reset\n"); return JS_TRUE; } static JSBool GetPropById(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { printf("in GetPropById\n"); return JS_TRUE; } JSPropertySpec properties[] = { { 0 } }; JSFunctionSpec functions[] = { { "reset", Reset, 1, 0, 0 }, { "getPropById", GetPropById, 1, 0, 0 }, { 0 }, }; void ReportError(JSContext *cx, const char *msg, JSErrorReport *report) { printf("JS ERR [%s:%d]: %s\n", report->filename, report->lineno, msg); } int main(int argc, char **argv) { JSRuntime *_runtime; JSContext *_context; JSObject *_global; JSClass _class; JSObject *_proto, *_parent; JSObject *_parentProto; _runtime = JS_NewRuntime(8*1024*1024); _context = JS_NewContext(_runtime, 8*1024); JS_SetErrorReporter(_context, ReportError); _global = JS_NewObject(_context, NULL, NULL, NULL); JS_InitStandardClasses(_context, _global); _parent = JS_GetGlobalObject(_context); memset(&_class, 0, sizeof(_class)); _class.name = "foo"; _class.flags = JSCLASS_HAS_PRIVATE; _class.addProperty = JS_PropertyStub; _class.delProperty = JS_PropertyStub; _class.getProperty = JS_PropertyStub; _class.setProperty = JS_PropertyStub; _class.enumerate = JS_EnumerateStub; _class.resolve = JS_ResolveStub; _class.convert = JS_ConvertStub; _class.finalize = JS_FinalizeStub; _proto = JS_InitClass(_context, _parent, NULL, &_class, NULL, 0, properties, functions, NULL, NULL); jsval ret; char *s = "var t = foo.reset(1);"; JSBool r = JS_EvaluateScript(_context, _global, s, strlen(s), "reset", 0, &ret); s = "var t = foo.getPropById(1);"; r = JS_EvaluateScript(_context, _global, s, strlen(s), "getPropById", 0, &ret); JS_DestroyContext(_context); JS_DestroyRuntime(_runtime); return 0; }