infer
[minfp.git] / rts.h
1 #ifndef RTS_H
2 #define RTS_H
3
4 #include <stdint.h>
5
6 enum stackval_type {FUN, LIT, AP, CODE};
7 enum builtin {ADD,SUB,IF,EQ,MUL};
8 struct stackval_t {
9 enum stackval_type type;
10 union {
11 struct {
12 uint64_t arity;
13 void *fun;
14 } fun;
15 uint64_t lit;
16 enum builtin code;
17 struct {
18 struct stackval_t *l;
19 struct stackval_t *r;
20 } app;
21 } data;
22 };
23
24 struct stackval_t *lit(uint64_t i);
25 struct stackval_t *var(void *i);
26 struct stackval_t *ap (struct stackval_t *, struct stackval_t *);
27
28 struct stackval_t *_if(struct stackval_t *, struct stackval_t *, struct stackval_t *);
29 struct stackval_t *sub(struct stackval_t *, struct stackval_t *);
30 struct stackval_t *add(struct stackval_t *, struct stackval_t *);
31 struct stackval_t *mul(struct stackval_t *, struct stackval_t *);
32 struct stackval_t *eq (struct stackval_t *, struct stackval_t *);
33
34 #endif