stage2 提供近乎完整的功能但出现严重性能问题 添加stage0的原生性能记录 stage1添加更多内置函数 nob重构代码使其更加健壮
This commit is contained in:
1 parent
b5a7a811b3
commit
e02b0c633a
35 files changed
+14018
-216
No files matched your search
+33
-3
@@ -1020,6 +1020,16 @@ static spl_lang_type_id_t sema_intrin_call(spl_sema_t *sema, spl_ast_node_t *n,
|
||||
}
|
||||
return spl_lang_make_int(sema->type, sizeof(void *) * 8, 0);
|
||||
}
|
||||
case SPL_INTRIN_FILE_NAME:
|
||||
case SPL_INTRIN_FN_NAME: {
|
||||
spl_lang_type_id_t u8 = spl_lang_make_int(sema->type, 8, 0);
|
||||
spl_lang_type_id_t slice = spl_lang_make_slice(sema->type, u8);
|
||||
n->resolved_lang_tid = slice;
|
||||
return slice;
|
||||
}
|
||||
case SPL_INTRIN_LINE:
|
||||
case SPL_INTRIN_COL:
|
||||
return spl_lang_make_int(sema->type, sizeof(void *) * 8, 0);
|
||||
default:
|
||||
UNREACHABLE();
|
||||
}
|
||||
@@ -2843,16 +2853,36 @@ void spl_sema_run(spl_sema_t *sema) {
|
||||
spl_sema_run_module(sema, root->root.members);
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
const char *key;
|
||||
spl_symbol_t sym;
|
||||
} spl_sema_sym_t;
|
||||
|
||||
static int spl_sema_sym_cmp(const void *a, const void *b) {
|
||||
return strcmp(((const spl_sema_sym_t *)a)->key, ((const spl_sema_sym_t *)b)->key);
|
||||
}
|
||||
|
||||
void spl_sema_dump(spl_sema_t *sema) {
|
||||
printf("Scopes:\n");
|
||||
for (usize i = 1; i < vec_size(sema->scope->scopes); ++i) {
|
||||
spl_scope_node_t *scope = &vec_at(sema->scope->scopes, i);
|
||||
printf("scope[%zu] parent=%zu\n", i, scope->parent);
|
||||
|
||||
/* 按符号名排序输出:与哈希表内部布局解耦,保证确定顺序。 */
|
||||
usize nsyms = scope->symbols.size;
|
||||
spl_sema_sym_t *arr = nsyms ? malloc(nsyms * sizeof(*arr)) : NULL;
|
||||
usize k = 0;
|
||||
map_for(scope->symbols, j) {
|
||||
spl_symbol_t *symbol = &unsafe_map_at(scope->symbols, j).val;
|
||||
printf(" %s -> def`%s`#%zu\n", unsafe_map_at(scope->symbols, j).key, symbol->name,
|
||||
symbol->node);
|
||||
arr[k].key = unsafe_map_at(scope->symbols, j).key;
|
||||
arr[k].sym = unsafe_map_at(scope->symbols, j).val;
|
||||
k++;
|
||||
}
|
||||
if (arr && nsyms > 1)
|
||||
qsort(arr, nsyms, sizeof(*arr), spl_sema_sym_cmp);
|
||||
for (k = 0; k < nsyms; ++k) {
|
||||
printf(" %s -> def`%s`#%zu\n", arr[k].key, arr[k].sym.name, arr[k].sym.node);
|
||||
}
|
||||
free(arr);
|
||||
}
|
||||
printf("LangTypeTable:\n");
|
||||
for (usize i = 1; i < vec_size(sema->type->lang_table); ++i) {
|
||||
|
||||
Reference in new issue
Block a user