quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

commit 47466258e34604cffdac2b5f9d8926f90d4adeef
parent 9c032fc272f2f01b5534ebc39fb67387e02d20c8
Author: Tyler Rockwood <rockwotj@gmail.com>
Date:   Tue, 20 Feb 2024 09:29:08 +0100

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 <rockwood@redpanda.com>

Diffstat:
Mquickjs/quickjs.c | 9+++++++++
Mquickjs/quickjs.h | 3+++
2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/quickjs/quickjs.c b/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/quickjs/quickjs.h b/quickjs/quickjs.h @@ -499,7 +499,10 @@ typedef struct JSClassDef { JSClassExoticMethods *exotic; } 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);