summaryrefslogtreecommitdiffstats
path: root/bytecode.h
blob: c742cdd934acd866872c7388d3aed0fc23041721 (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
43
44
45
46
47
48
#ifndef BYTECODE_H
#define BYTECODE_H
#include <stdint.h>

#include "jv.h"
#include "opcode.h"
#include "builtin.h"

#define MAX_CFUNCTION_ARGS 10
struct symbol_table {
  struct cfunction* cfunctions;
  int ncfunctions;
  jv cfunc_names;
};

// The bytecode format matters in:
//   execute.c  - interpreter
//   compile.c  - compiler
//   bytecode.c - disassembler

#define ARG_NEWCLOSURE 0x1000

struct bytecode {
  uint16_t* code;
  int codelen;

  int nlocals;
  int nclosures;

  jv constants; // JSON array of constants
  struct symbol_table* globals;

  struct bytecode** subfunctions;
  int nsubfunctions;

  struct bytecode* parent;

  jv debuginfo;
};

void dump_disassembly(int, struct bytecode* code);
void dump_code(int, struct bytecode* code);
void dump_operation(struct bytecode* bc, uint16_t* op);

void symbol_table_free(struct symbol_table* syms);
void bytecode_free(struct bytecode* bc);

#endif