aboutsummaryrefslogtreecommitdiff
path: root/src/vm/runner/runner.h
blob: 71fde6d7d129a8c916f7f3176d2e5aa9a81b57de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#pragma once

#include <compiler/code_generator/code_generator.h>

typedef struct RunnerVariable {
  SizedString const *name;
  void *value;
} RunnerVariable;

typedef void (*BuiltinFunction)(void ***restrict stack,
                                size_t *restrict stack_inserted);

extern const BuiltinFunction BUILTIN_FUNCTIONS[];
extern const char *BUILTIN_FUNCTION_NAMES[];
extern const size_t BUILTIN_FUNCTIONS_SIZE;

extern bool runner(SourceCode *souceCode);
extern bool runnerWithPrint(SourceCode *souceCode);
extern bool _runner(Instructions instructions);

extern bool runInstruction(Instruction instruction, void ***restrict stack,
                           size_t *restrict stack_size,
                           size_t *restrict stack_inserted,
                           RunnerVariable ***restrict variables,
                           size_t *restrict variables_size,
                           size_t *restrict variables_inserted);

extern RunnerVariable *getRunnerVariable(const SizedString *varName,
                                         RunnerVariable ***restrict variables,
                                         size_t *restrict variables_inserted);
extern void setRunnerVariable(void *value, const SizedString *varName,
                              RunnerVariable ***restrict variables,
                              size_t *restrict variables_size,
                              size_t *restrict variables_inserted);

extern void *popFromStack(void ***restrict stack,
                         size_t *restrict stack_inserted);
extern void pushToStack(void *value, void ***restrict stack,
                        size_t *restrict stack_size,
                        size_t *restrict stack_inserted);

extern void print(void ***restrict stack, size_t *restrict stack_inserted);