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>
This commit is contained in:
Tyler Rockwood 2024-02-20 09:29:08 +01:00 committed by Charlie Gordon
parent 12c91df577
commit b91a2aec67
2 changed files with 12 additions and 0 deletions

View File

@ -3391,6 +3391,15 @@ JSClassID JS_NewClassID(JSClassID *pclass_id)
return class_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) BOOL JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id)
{ {
return (class_id < rt->class_count && return (class_id < rt->class_count &&

View File

@ -499,7 +499,10 @@ typedef struct JSClassDef {
JSClassExoticMethods *exotic; JSClassExoticMethods *exotic;
} JSClassDef; } JSClassDef;
#define JS_INVALID_CLASS_ID 0
JSClassID JS_NewClassID(JSClassID *pclass_id); 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_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def);
int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id); int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id);