From 951fa118f79460c1aaa284d0a9e605a8d5780406 Mon Sep 17 00:00:00 2001 From: Tyler Rockwood Date: Tue, 20 Feb 2024 09:29:08 +0100 Subject: Add C API function JS_GetClassID() If you want to extend a built-in class you need it's class ID and there is no robust way to get that without this accessor. * add JS_INVALID_CLASS_ID constant for invalid class ID. Signed-off-by: Tyler Rockwood --- lib/quickjs/quickjs.c | 9 +++++++++ lib/quickjs/quickjs.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/lib/quickjs/quickjs.c b/lib/quickjs/quickjs.c index 4e5f9fb7..ae882138 100644 --- a/lib/quickjs/quickjs.c +++ b/lib/quickjs/quickjs.c @@ -3395,6 +3395,15 @@ JSClassID JS_NewClassID(JSClassID *pclass_id) return class_id; } +JSClassID JS_GetClassID(JSValue v) +{ + JSObject *p; + if (JS_VALUE_GET_TAG(v) != JS_TAG_OBJECT) + return JS_INVALID_CLASS_ID; + p = JS_VALUE_GET_OBJ(v); + return p->class_id; +} + BOOL JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id) { return (class_id < rt->class_count && diff --git a/lib/quickjs/quickjs.h b/lib/quickjs/quickjs.h index b2b52ed9..9505aed3 100644 --- a/lib/quickjs/quickjs.h +++ b/lib/quickjs/quickjs.h @@ -501,7 +501,10 @@ typedef struct JSClassDef { JSClassCanDestroy *can_destroy; } JSClassDef; +#define JS_INVALID_CLASS_ID 0 JSClassID JS_NewClassID(JSClassID *pclass_id); +/* Returns the class ID if `v` is an object, otherwise returns JS_INVALID_CLASS_ID. */ +JSClassID JS_GetClassID(JSValue v); int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def); int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id); -- cgit 1.4.1-2-gfad0