Skip to content

Commit 2032997

Browse files
committed
added quickjs small runtime
1 parent 8fbd83e commit 2032997

File tree

1 file changed

+28
-38
lines changed

1 file changed

+28
-38
lines changed

quickjs/src/main/c/quickjs_runtime.cpp

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -409,44 +409,34 @@ extern "C"
409409

410410

411411

412-
413-
/* return NULL if not an object of class class_id */
414-
// JSClassID JS_GetClassID(JSValueConst obj)
415-
// {
416-
// JSObject *p;
417-
// if (JS_VALUE_GET_TAG(obj) != JS_TAG_OBJECT)
418-
// return NULL;
419-
// p = JS_VALUE_GET_OBJ(obj);
420-
// return p->class_id;
421-
// }
422-
423-
// DLLEXPORT uint32_t jsNewClass(JSContext *ctx, const char *name)
424-
// {
425-
// JSClassID QJSClassId = 0;
426-
// JS_NewClassID(&QJSClassId);
427-
// JSRuntime *rt = JS_GetRuntime(ctx);
428-
// if (!JS_IsRegisteredClass(rt, QJSClassId))
429-
// {
430-
// JSClassDef def{
431-
// name,
432-
// // destructor
433-
// [](JSRuntime *rt, JSValue obj) noexcept {
434-
// JSClassID classid = JS_GetClassID(obj);
435-
// void *opaque = JS_GetOpaque(obj, classid);
436-
// JSChannel *channel = (JSChannel *)JS_GetRuntimeOpaque(rt);
437-
// if (channel == nullptr)
438-
// return;
439-
// channel((JSContext *)rt, JSChannelType_FREE_OBJECT, opaque);
440-
// }};
441-
// int e = JS_NewClass(rt, QJSClassId, &def);
442-
// if (e < 0)
443-
// {
444-
// JS_ThrowInternalError(ctx, "Cant register class %s", name);
445-
// return 0;
446-
// }
447-
// }
448-
// return QJSClassId;
449-
// }
412+
DLLEXPORT uint32_t jsNewClass(JSContext *ctx, const char *name)
413+
{
414+
JSClassID QJSClassId = 0;
415+
JS_NewClassID(&QJSClassId);
416+
JSRuntime *rt = JS_GetRuntime(ctx);
417+
if (!JS_IsRegisteredClass(rt, QJSClassId))
418+
{
419+
JSClassDef def{
420+
name,
421+
// destructor
422+
[](JSRuntime *rt, JSValue obj) noexcept
423+
{
424+
JSClassID classid = JS_GetClassID(obj);
425+
void *opaque = JS_GetOpaque(obj, classid);
426+
RuntimeOpaque *runtimeOpaque = (RuntimeOpaque *)JS_GetRuntimeOpaque(rt);
427+
if (runtimeOpaque == nullptr)
428+
return;
429+
runtimeOpaque->channel((JSContext *)rt, JSChannelType_FREE_OBJECT, opaque);
430+
}};
431+
int e = JS_NewClass(rt, QJSClassId, &def);
432+
if (e < 0)
433+
{
434+
JS_ThrowInternalError(ctx, "Cant register class %s", name);
435+
return 0;
436+
}
437+
}
438+
return QJSClassId;
439+
}
450440

451441
DLLEXPORT void *jsGetObjectOpaque(JSValue *obj, uint32_t classid)
452442
{

0 commit comments

Comments
 (0)