Skip to content

Commit 24c4bdb

Browse files
BeyondMagicCopilot
andcommitted
fix(optimizer): destroy ast dead code
Co-authored-by: Copilot <[email protected]>
1 parent a7b5ec0 commit 24c4bdb

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

src/ast.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ static void ensure_capacity(void **buffer, size_t elem_size, size_t *capacity, s
3737
}
3838

3939
static void ast_expr_destroy(AstExpr *expr);
40-
static void ast_stmt_destroy(AstStmt *stmt);
40+
void ast_stmt_destroy(AstStmt *stmt);
4141

4242
AstProgram *ast_program_create(void)
4343
{
@@ -229,7 +229,7 @@ void ast_stmt_list_destroy(AstStmtList *list)
229229
list->capacity = 0;
230230
}
231231

232-
static void ast_stmt_destroy(AstStmt *stmt)
232+
void ast_stmt_destroy(AstStmt *stmt)
233233
{
234234
if (!stmt)
235235
{

src/ast.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ void ast_expr_list_destroy(AstExprList *list);
223223
AstStmtList ast_stmt_list_make(void);
224224
void ast_stmt_list_push(AstStmtList *list, AstStmt *stmt);
225225
void ast_stmt_list_destroy(AstStmtList *list);
226+
void ast_stmt_destroy(AstStmt *stmt);
226227

227228
AstBlock ast_block_from_list(AstStmtList *list);
228229

src/optimizer.c

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -613,22 +613,26 @@ static char *expr_make_key(const AstExpr *expr)
613613

614614
static void eliminate_unreachable(AstStmtList *list)
615615
{
616-
if (!list) return;
617-
618-
int after_return = 0;
619-
size_t write = 0;
620-
621-
for (size_t i = 0; i < list->count; i++) {
622-
AstStmt *s = list->items[i];
623-
if (after_return) {
624-
continue;
625-
}
626-
list->items[write++] = s;
627-
if (s->kind == STMT_RETURN) {
628-
after_return = 1;
629-
}
630-
}
631-
632-
list->count = write;
633-
}
616+
if (!list)
617+
return;
618+
619+
int after_return = 0;
620+
size_t write = 0;
634621

622+
for (size_t i = 0; i < list->count; i++)
623+
{
624+
AstStmt *s = list->items[i];
625+
if (after_return)
626+
{
627+
ast_stmt_destroy(s);
628+
continue;
629+
}
630+
list->items[write++] = s;
631+
if (s->kind == STMT_RETURN)
632+
{
633+
after_return = 1;
634+
}
635+
}
636+
637+
list->count = write;
638+
}

0 commit comments

Comments
 (0)