-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsecd.h
More file actions
73 lines (64 loc) · 1.17 KB
/
secd.h
File metadata and controls
73 lines (64 loc) · 1.17 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
* SECD-like bytecode interpreter in C
* Pedro Vasconcelos, 2013
*
* Adapted by Pedro Paredes
*/
#include <stdint.h>
/* opcodes */
#define HALT 0
#define LDC 1
#define LD 2
#define ADD 3
#define SUB 4
#define MUL 5
#define SEL 6
#define LDF 7
#define LDRF 8
#define AP 9
#define RTN 10
#define JOIN 11
#define PAIR 12
#define FST 13
#define SND 14
#define CONS 15
#define MATCH 16
#define RECORD 17
#define SELECT 18
#define LST 19
#define GTT 20
#define ROUT 21
/* values:
either an int or a pointer
*/
typedef intptr_t value_t;
/* environments:
single linked list of values
*/
typedef struct _env_node_t {
value_t elm;
struct _env_node_t *next;
} env_node_t;
typedef env_node_t *env_t;
/* closures
*/
typedef struct {
int pc; // program counter
env_t env; // environment
} closure_t;
/* constructor
*/
typedef struct {
env_t env; // environment
} cons_t;
/* dump entry
pair of program counter and environment pointer
*/
typedef struct {
int pc;
env_t env;
} dump_t;
/* global segment sizes */
#define CODE_MAX 1000
#define STACK_MAX 1000
#define DUMP_MAX 1000