add reference counter for future smarter allocations
[lambda.git] / lambda.h
1 #ifndef LAMBDA_H
2 #define LAMBDA_H
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7 #include <stdbool.h>
8
9 enum lambda_which {lambda_ident, lambda_abs, lambda_app};
10 struct lambda {
11 enum lambda_which which;
12 unsigned int refcount;
13 union {
14 struct {
15 char *ident;
16 unsigned int revision;
17 } identifier;
18 struct {
19 char *ident;
20 unsigned int revision;
21 bool strict;
22 struct lambda *expr;
23 } abstraction;
24 struct {
25 struct lambda *expr1;
26 struct lambda *expr2;
27 } application;
28 } data;
29 };
30
31 struct decllist {
32 struct decllist *next;
33 char *ident;
34 struct lambda *value;
35 };
36
37 struct lambda *make_ident(char *);
38 struct lambda *make_abstraction(char *, bool, struct lambda *);
39 struct lambda *make_application(struct lambda *, struct lambda *);
40 struct lambda *make_numeral(unsigned int i);
41 struct lambda *make_bool(bool b);
42 #define YYSTYPE struct lambda *
43 #endif