stage1 实现部分ast2ir内容并重构stage0 引入并重构ir2vm 构建系统修改部分
This commit is contained in:
1 parent
3d57260f3f
commit
34df303b56
17 files changed
+636
-1800
No files matched your search
+10
-24
@@ -341,7 +341,7 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
|
||||
spl_type_id_t old_ret = sema->current_fn_ret_tid;
|
||||
sema->current_fn_ret_tid = ret_id;
|
||||
vec_for(n->fn_decl.block, i) { sema_parse(sema, vec_at(n->fn_decl.block, i)); }
|
||||
sema_parse(sema, n->fn_decl.block);
|
||||
sema->current_fn_ret_tid = old_ret;
|
||||
sema_pop_scope(sema);
|
||||
} break;
|
||||
@@ -478,23 +478,15 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
SPL_ERROR(&n->dbg, "if condition must be bool");
|
||||
sema->error_count++;
|
||||
}
|
||||
vec_for(n->if_statement.if_block, i) {
|
||||
sema_parse(sema, vec_at(n->if_statement.if_block, i));
|
||||
}
|
||||
vec_for(n->if_statement.else_block, i) {
|
||||
sema_parse(sema, vec_at(n->if_statement.else_block, i));
|
||||
}
|
||||
sema_parse(sema, n->if_statement.if_block);
|
||||
sema_parse(sema, n->if_statement.else_block);
|
||||
} break;
|
||||
case SPL_AST_IFVAR_STATEMENT: {
|
||||
if (n->ifvar_statement.packed_expr) {
|
||||
sema_parse(sema, n->ifvar_statement.packed_expr);
|
||||
}
|
||||
vec_for(n->ifvar_statement.if_block, i) {
|
||||
sema_parse(sema, vec_at(n->ifvar_statement.if_block, i));
|
||||
}
|
||||
vec_for(n->ifvar_statement.else_block, i) {
|
||||
sema_parse(sema, vec_at(n->ifvar_statement.else_block, i));
|
||||
}
|
||||
sema_parse(sema, n->ifvar_statement.if_block);
|
||||
sema_parse(sema, n->ifvar_statement.else_block);
|
||||
} break;
|
||||
case SPL_AST_WHILE_STATEMENT: {
|
||||
if (!n->while_statement.expr) {
|
||||
@@ -506,14 +498,10 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
SPL_ERROR(&n->dbg, "while condition must be bool");
|
||||
sema->error_count++;
|
||||
}
|
||||
vec_for(n->while_statement.while_block, i) {
|
||||
sema_parse(sema, vec_at(n->while_statement.while_block, i));
|
||||
}
|
||||
sema_parse(sema, n->while_statement.while_block);
|
||||
} break;
|
||||
case SPL_AST_LOOP_STATEMENT: {
|
||||
vec_for(n->loop_statement.loop_block, i) {
|
||||
sema_parse(sema, vec_at(n->loop_statement.loop_block, i));
|
||||
}
|
||||
sema_parse(sema, n->loop_statement.loop_block);
|
||||
} break;
|
||||
case SPL_AST_FOR_STATEMENT: {
|
||||
sema_push_scope(sema);
|
||||
@@ -531,7 +519,7 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
spl_scope_insert(sema->scope, sema->scope->current_scope, symbol);
|
||||
}
|
||||
}
|
||||
vec_for(n->for_statement.block, j) { sema_parse(sema, vec_at(n->for_statement.block, j)); }
|
||||
sema_parse(sema, n->for_statement.block);
|
||||
sema_pop_scope(sema);
|
||||
} break;
|
||||
case SPL_AST_MATCH_STATEMENT: {
|
||||
@@ -541,9 +529,7 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
vec_for(n->match_statement.paced_exprs, i) {
|
||||
sema_parse(sema, vec_at(n->match_statement.paced_exprs, i));
|
||||
}
|
||||
vec_for(n->match_statement.match_block, i) {
|
||||
sema_parse(sema, vec_at(n->match_statement.match_block, i));
|
||||
}
|
||||
sema_parse(sema, n->match_statement.match_block);
|
||||
} break;
|
||||
case SPL_AST_RET_STATEMENT: {
|
||||
if (n->ret_statement.expr) {
|
||||
@@ -596,7 +582,7 @@ static spl_type_id_t sema_parse(spl_sema_t *sema, spl_ast_node_ref_t ref) {
|
||||
case SPL_AST_ASSIGN_OR_EXPR:
|
||||
case SPL_AST_ASSIGN_XOR_EXPR:
|
||||
case SPL_AST_ASSIGN_LSHIFT_EXPR:
|
||||
case SPL_AST_ASSIGN_USHIFT_EXPR: {
|
||||
case SPL_AST_ASSIGN_RSHIFT_EXPR: {
|
||||
spl_type_id_t lt = sema_parse(sema, n->op_expr.left);
|
||||
spl_type_id_t rt = sema_parse(sema, n->op_expr.right);
|
||||
if (lt == 0) {
|
||||
|
||||
Reference in new issue
Block a user