blob: 9225c11fc7a0ecea90ce371e2e965896088fbbae [file] [log] [blame]
swissChilica107a02021-04-14 12:07:30 -07001#pragma once
2
3#include "lisp.h"
4#include <stdbool.h>
5
6struct function
7{
8 char *name;
9 int nargs; // number of arguments
10
11 union {
12 struct value (*def0) ();
13 struct value (*def1) (struct value);
14 struct value (*def2) (struct value, struct value);
15 struct value (*def3) (struct value, struct value, struct value);
16 void *code_ptr;
17 unsigned long code_addr;
18 };
19
20 struct function *prev;
21};
22
23struct environment
24{
25 struct function *first;
26};
27
28struct variable
29{
30 char *name;
31 int number;
32 struct variable *prev;
33};
34
35// local environment
36struct local
37{
38 // temps are accessed at ebp - 8 * (num_vars + temp)
39 bool temps[ 64 ];
40 int num_vars;
41 struct variable *first;
42};
43
swissChilica107a02021-04-14 12:07:30 -070044void compile (struct istream *is);
45struct function *find_function (struct environment *env, char *name);