Files
bshell/bshell.runtime/compile/compile.c
T

51 lines
1004 B
C
Raw Normal View History

#include "compile-node.h"
#include <bshell/ast.h>
#include <bshell/compile.h>
#include <bshell/status.h>
extern enum bshell_status compile_node(
struct compile_ctx *ctx,
struct bshell_ast_node *src)
{
switch (src->n_type) {
case BSHELL_AST_IF:
return compile_if(ctx, src);
case BSHELL_AST_BLOCK:
return compile_block_immediate(ctx, src);
default:
return compile_expression(ctx, src);
}
return BSHELL_SUCCESS;
}
enum bshell_status bshell_compile(
struct bshell_ast_node *src,
bshell_scriptblock *dest)
{
struct compile_ctx ctx = {.c_block = dest};
enum bshell_status status = compile_node(&ctx, src);
if (status != BSHELL_SUCCESS) {
return status;
}
status = compile_resolve_labels(&ctx);
2026-05-30 19:52:24 +01:00
while (!fx_queue_empty(&ctx.c_state)) {
compile_pop_state(&ctx);
}
while (!fx_queue_empty(&ctx.c_stack)) {
struct compile_value *value = compile_pop_value(&ctx);
compile_value_destroy(value);
}
if (status != BSHELL_SUCCESS) {
return status;
}
return BSHELL_SUCCESS;
}