aboutsummaryrefslogtreecommitdiff
path: root/src/vm/runner/runner.h
blob: 80ef5718d9da4155e4280c7797f61704ecdb7880 (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
#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 *code);
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);