diff --git a/lang/compile.py b/lang/compile.py index 7aae44b..4e0b50e 100755 --- a/lang/compile.py +++ b/lang/compile.py @@ -1007,6 +1007,10 @@ %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_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 = "" diff --git a/lang/module.h b/lang/module.h index 59841e5..a939f9c 100644 --- a/lang/module.h +++ b/lang/module.h @@ -20,10 +20,18 @@ // 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); };