Add method to GetClassID (#275)

* Add method to 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.

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

* introduce constant for invalid class ID

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>

---------

Signed-off-by: Tyler Rockwood <rockwood@redpanda.com>
This commit is contained in:
Tyler Rockwood 2024-02-20 02:29:08 -06:00 committed by GitHub
parent b257545b6f
commit 33f72491a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 12 additions and 0 deletions

View file

@ -3344,6 +3344,15 @@ JSClassID JS_NewClassID(JSRuntime *rt, 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

@ -455,7 +455,10 @@ typedef struct JSClassDef {
JSClassExoticMethods *exotic; JSClassExoticMethods *exotic;
} JSClassDef; } JSClassDef;
#define JS_INVALID_CLASS_ID 0
JS_EXTERN JSClassID JS_NewClassID(JSRuntime *rt, JSClassID *pclass_id); JS_EXTERN JSClassID JS_NewClassID(JSRuntime *rt, JSClassID *pclass_id);
/* Returns the class ID if `v` is an object, otherwise returns JS_INVALID_CLASS_ID. */
JS_EXTERN JSClassID JS_GetClassID(JSValue v);
JS_EXTERN int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def); JS_EXTERN int JS_NewClass(JSRuntime *rt, JSClassID class_id, const JSClassDef *class_def);
JS_EXTERN int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id); JS_EXTERN int JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id);