-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode.l
More file actions
39 lines (34 loc) · 847 Bytes
/
code.l
File metadata and controls
39 lines (34 loc) · 847 Bytes
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
(plex LString
(char* chars)
(int length))
(plex LType
(LString name)
(LType* parent)
(uint64_t members_len)
(LType** members))
(plex LVal
(variant
(LSymbol LString)
(LLString LString)
(LNumber int64_t)
(LCons (plex ((LVal* car) (LVal* cdr))))
(LNil nil))
(LType* type)
(LVal* parent))
(plex SymbolStack
(arr LVal* 2048 symbols)
(int index))
(dec analyse (SymbolStack* LEnv* LVal*) int)
(def analyse (sstack env lval)
(match
lval
((dec . any) (analyse_dec sstack env (cdr lval)))
((plex . any) (analyse_plex sstack env (cdr lval)))
((cons . cons) (do (analyse sstack env (car lval)) (analyse sstack env (cdr lval))))
(default (analyse (cdr lval)))))
(defmacro swap (a b) (cons b a))
(defmacro reverse (list)
(match
list
((a . nil) a)
((a . any) (cons (reverse list) a))))