stage1 支持任意顺序声明 使用eval求值的机制
This commit is contained in:
1 parent
a1e684f6d4
commit
a621e34d51
6 files changed
+336
-123
No files matched your search
@@ -387,6 +387,27 @@ spl_ir_func_ref_t spl_ir_builder_fn_begin(spl_ir_builder_t *b, const char *name,
|
||||
return fid;
|
||||
}
|
||||
|
||||
spl_ir_func_ref_t spl_ir_builder_fn_reserve(spl_ir_builder_t *b, const char *name,
|
||||
spl_type_id_t fn_tid) {
|
||||
spl_ir_func_ref_t fid = spl_ir_alloc_fn(&b->ir);
|
||||
spl_ir_func_t *f = spl_ir_func(&b->ir, fid);
|
||||
f->name = name;
|
||||
vec_init(f->attrs);
|
||||
f->fn_tid = fn_tid;
|
||||
return fid;
|
||||
}
|
||||
|
||||
void spl_ir_builder_fn_begin_at(spl_ir_builder_t *b, spl_ir_func_ref_t fid) {
|
||||
if (b->current_fn && b->current_fn != fid) {
|
||||
spl_ir_builder_fn_end(b);
|
||||
}
|
||||
b->current_fn = fid;
|
||||
b->current_block = 0;
|
||||
b->blocks.size = 0;
|
||||
b->fixups.size = 0;
|
||||
b->terminated = false;
|
||||
}
|
||||
|
||||
void spl_ir_builder_fn_end(spl_ir_builder_t *b) {
|
||||
spl_ir_func_t *f = spl_ir_func(&b->ir, b->current_fn);
|
||||
if (!f) {
|
||||
|
||||
Reference in new issue
Block a user