edfb3e24a3
bshell: the front-end binary bshell.runtime: contains the parser, compiler, and classes needed to run bshell scripts bshell.core: contains the builtin commandlets and aliases
41 lines
797 B
C
41 lines
797 B
C
#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;
|
|
}
|