summaryrefslogtreecommitdiffstats
path: root/compile.c
diff options
context:
space:
mode:
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/compile.c b/compile.c
index 6988d27c..05f070cd 100644
--- a/compile.c
+++ b/compile.c
@@ -495,23 +495,26 @@ jv block_module_meta(block b) {
return jv_null();
}
-block gen_import(const char* name, block metadata, const char* as, int is_data) {
- assert(metadata.first == NULL || block_is_const(metadata));
+block gen_import(const char* name, const char* as, int is_data) {
inst* i = inst_new(DEPS);
- jv meta;
- if (block_is_const(metadata))
- meta = block_const(metadata);
- else
- meta = jv_object();
+ jv meta = jv_object();
if (as != NULL)
meta = jv_object_set(meta, jv_string("as"), jv_string(as));
meta = jv_object_set(meta, jv_string("is_data"), is_data ? jv_true() : jv_false());
meta = jv_object_set(meta, jv_string("relpath"), jv_string(name));
i->imm.constant = meta;
- block_free(metadata);
return inst_block(i);
}
+block gen_import_meta(block import, block metadata) {
+ assert(block_is_single(import) && import.first->op == DEPS);
+ assert(block_is_const(metadata) && block_const_kind(metadata) == JV_KIND_OBJECT);
+ inst *i = import.first;
+ i->imm.constant = jv_object_merge(block_const(metadata), i->imm.constant);
+ block_free(metadata);
+ return import;
+}
+
block gen_function(const char* name, block formals, block body) {
inst* i = inst_new(CLOSURE_CREATE);
for (inst* i = formals.last; i; i = i->prev) {