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

41 lines
797 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);
if (status != BSHELL_SUCCESS) {
return status;
}
return BSHELL_SUCCESS;
}