Files
bshell/bshell.runtime/include/bshell/runtime/script-block.h
T
wash edfb3e24a3 bshell: re-organise build into three separate components
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
2026-05-25 10:33:29 +01:00

65 lines
1.7 KiB
C

#ifndef BSHELL_RUNTIME_SCRIPT_BLOCK_H_
#define BSHELL_RUNTIME_SCRIPT_BLOCK_H_
#include <bshell/runtime/opcode.h>
#include <fx/macros.h>
#include <fx/value.h>
FX_DECLS_BEGIN;
enum bshell_opcode;
#define POOL_INDEX_INVALID ((unsigned long)-1)
#define BSHELL_TYPE_SCRIPTBLOCK (bshell_scriptblock_get_type())
FX_DECLARE_TYPE(bshell_scriptblock);
FX_TYPE_CLASS_DECLARATION_BEGIN(bshell_scriptblock)
FX_TYPE_CLASS_DECLARATION_END(bshell_scriptblock)
extern fx_type_id bshell_scriptblock_get_type(void);
FX_TYPE_DEFAULT_CONSTRUCTOR(bshell_scriptblock, BSHELL_TYPE_SCRIPTBLOCK);
extern size_t bshell_scriptblock_push_instruction(
bshell_scriptblock *block,
enum bshell_opcode opcode,
uint32_t arg);
extern enum bshell_status bshell_scriptblock_read_instruction(
bshell_scriptblock *block,
size_t offset,
enum bshell_opcode *out_opcode,
uint32_t *out_arg);
extern void bshell_scriptblock_patch_instruction(
bshell_scriptblock *block,
size_t offset,
enum bshell_opcode opcode,
uint32_t arg);
extern void bshell_scriptblock_clear_text(bshell_scriptblock *block);
extern void bshell_scriptblock_get_text(
const bshell_scriptblock *block,
bshell_instruction **out_ptr,
size_t *out_count);
extern void bshell_scriptblock_get_pool(
const bshell_scriptblock *block,
fx_value **out_ptr,
size_t *out_count);
extern unsigned long bshell_scriptblock_add_pool_value(
bshell_scriptblock *block,
fx_value *value);
extern fx_value *bshell_scriptblock_get_pool_value(
const bshell_scriptblock *block,
unsigned long index,
fx_type_id expected_type);
extern unsigned long bshell_scriptblock_get_string(
bshell_scriptblock *block,
const char *s);
extern unsigned long bshell_scriptblock_get_double(
bshell_scriptblock *block,
double v);
FX_DECLS_END;
#endif