lang: Add new ModuleClass structure

This commit is contained in:
Jookia 2024-04-10 09:06:32 +10:00
parent d2726005da
commit 5986d221c2
2 changed files with 22 additions and 1 deletions

View file

@ -1007,6 +1007,10 @@ static struct object_call CLASSNAME_calls[] = {
%s{.name = NULL, /* end */ },
};
static ModuleClass CLASSNAME_module_class = {
.fields_count = 0,
};
static struct object_class CLASSNAME_class = {
.cleanup = CLASSNAME_cleanup,
.calls = &CLASSNAME_calls[0],
@ -1022,18 +1026,27 @@ def generate_c_class(class_ir):
def generate_metadata(node):
uses = ""
classes_ = ""
for use in node.uses:
uses += "\t\"%s\",\n" % (use)
for class_ in node.classes_:
name = class_.name
classes_ += "\t&%s_module_class,\n" % (name)
return """static const char* module_uses[] = {
%s NULL, /* end */
};
static ModuleClass *module_classes[] = {
%s NULL, /* end */
};
const ModuleInfo module_info_%s = {
.name = "%s",
.uses = module_uses,
.classes = module_classes,
.create = %s_create,
};
""" % (uses, node.id, node.name, node.name)
""" % (uses, classes_, node.id, node.name, node.name)
def generate_c_file(module_args, ir, source):
metadata = ""

View file

@ -20,10 +20,18 @@ void modules_free(VmState state);
// the compiler's C code generator. Do not use for regular C code.
#ifdef MODULE_INTERNAL_API
// A class in a module
struct module_class {
int fields_count;
};
typedef struct module_class ModuleClass;
// Data structure for creating a module
struct module_info {
const char *name;
const char **uses;
ModuleClass **classes;
Object (*create)(VmState state, Object use_modules);
};