Skip to content

Commit d0728e2

Browse files
Merge pull request #233 from andrew-johnson-4/strict-tokenize-3
Strict tokenize 3
2 parents 89e769b + beccc0a commit d0728e2

31 files changed

+9891
-9592
lines changed

BOOTSTRAP/cli.s

Lines changed: 9584 additions & 9387 deletions
Large diffs are not rendered by default.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "lambda_mountain"
3-
version = "1.11.96"
3+
version = "1.11.97"
44
authors = ["Andrew <andrew@subarctic.org>"]
55
license = "MIT"
66
description = "Lambda Mountain"

PRODUCTION/codegen-strict.lm

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ compile-expr-strict := λctx e offset used . (tail(
9191
( (Array( x '? )) (
9292
(if (typecheck-unify-implies( x '? )) () (
9393
(set deref True)
94+
(set new-size (typecheck-sizeof x))
9495
))
9596
))
9697
))
@@ -250,6 +251,8 @@ compile-expr-strict := λctx e offset used . (tail(
250251
()
251252
(True (set e1 (expr::set-expr( (expr::new ()) '1 ))))
252253
(False (set e1 (expr::set-expr( (expr::new ()) '0 ))))
254+
('\\o (set e1 (expr::set-expr( (expr::new ()) '35 ))))
255+
('\\n (set e1 (expr::set-expr( (expr::new ()) '10 ))))
253256
(_ (set e1 (expr::set-expr( (expr::new ()) lval ))))
254257
))
255258
))
@@ -275,6 +278,8 @@ compile-expr-strict := λctx e offset used . (tail(
275278
()
276279
(True (set e1 (expr::set-expr( (expr::new ()) '1 ))))
277280
(False (set e1 (expr::set-expr( (expr::new ()) '0 ))))
281+
('\\o (set e1 (expr::set-expr( (expr::new ()) '35 ))))
282+
('\\n (set e1 (expr::set-expr( (expr::new ()) '10 ))))
278283
(_ (set e1 (expr::set-expr( (expr::new ()) lval ))))
279284
))
280285
))
@@ -497,7 +502,7 @@ strict-codegen-type-case := λ ctx base-type type-body case-number . (tail(
497502
(App( (Variable '.program) (
498503
DontChain
499504
(if (eq( case-padding 0 )) () (
500-
\t 'sub \s '$ case-padding , \s '%r15 \n
505+
\t 'sub \s '$ case-padding , \s '%rsp \n
501506
))
502507
(App( (Variable '.program) (Variable 'src) ))
503508
\t 'mov \s '$ (Variable 'dst) , \s '%r15 \n
@@ -598,10 +603,10 @@ strict-codegen-type-case := λ ctx base-type type-body case-number . (tail(
598603
(App( (Variable '.program) (
599604
DontChain
600605
\t 'mov \s '$ (Variable 'dst) , \s '%r15 \n
606+
\t 'movq \s '$ case-number , \s 0 \[ '%r15 \] \n
601607
(if (eq( case-padding 0 )) () (
602608
\t 'sub \s '$ case-padding , \s '%r15 \n
603609
))
604-
\t 'movq \s '$ case-number , \s 0 \[ '%r15 \] \n
605610
)))
606611
))))
607612
(typecheck-ascript( body ('->(

STDLIB/default-instruction-set.lm

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ fragment push := λ(: src GlobalVariable+Sized<size>). (: (
5050
(.program (
5151
(\t 'mov \s '$ (.expression src) , \s '%r15 \n)
5252
(for word-offset in (range( 0 (/( size 8 )) )) (
53-
\t 'pushq \s '0 \[ '%r15 \] \n
54-
\t 'add \s '$8 , \s '%r15 \n
53+
\t 'pushq \s (+( (+( size -8 )) (inv(*( word-offset 8 ))) )) \[ '%r15 \] \n
5554
))
5655
(if-eq size 4 (
5756
\t 'mov \s '0 \[ '%r15 \] , \s '%r15d \n
@@ -111,6 +110,29 @@ fragment push := λ(: src Reg64+Array<Sized<size>,max>)(: index Literal+Constant
111110
))
112111
))
113112
) Nil);
113+
fragment push := λ(: src LocalVariable+Array<Sized<size>,max>)(: index Literal+Constant). (: (
114+
(.program (
115+
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%r15 \n
116+
(for word-offset in (range( 0 (/( size 8 )) )) (
117+
\t 'pushq \s (+(
118+
(*( (.expression index) size ))
119+
(+(
120+
(+( size '-8 ))
121+
(inv(*( word-offset 8 )))
122+
))
123+
)) \[ '%r15 \] \n
124+
))
125+
(if-eq size 4 (
126+
\t 'pushq \s (+( (.expression src) (*( (.expression index) size )) )) \[ '%r15 \] \n
127+
))
128+
(if-eq size 2 (
129+
\t 'pushq \s (+( (.expression src) (*( (.expression index) size )) )) \[ '%r15 \] \n
130+
))
131+
(if-eq size 1 (
132+
\t 'pushq \s (+( (.expression src) (*( (.expression index) size )) )) \[ '%r15 \] \n
133+
))
134+
))
135+
) Nil);
114136

115137
fragment pop := λ(: src LocalVariable+Sized<size>). (: (
116138
(.program ( for word-offset in (range( 1 (+( (/( size 8 )) 1 )) )) (

STDLIB/default-primitives.lm

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

2-
fragment type U8; size U8 1; atom suffix U8 u8;
3-
fragment type U16; size U16 2; atom suffix U16 u16;
4-
fragment type U32; size U32 4; atom suffix U32 u32;
5-
fragment type U64; size U64 8; atom suffix U64 u64;
6-
fragment type I8; size I8 1; atom suffix I8 i8;
7-
fragment type I16; size I16 2; atom suffix I16 i16;
8-
fragment type I32; size I32 4; atom suffix I32 i32;
9-
fragment type I64; size I64 8; atom suffix I64 i64;
10-
fragment type ASCII; size ASCII 1; atom suffix ASCII _c;
2+
fragment type U8; size U8 1; atom suffix U8 _u8;
3+
fragment type U16; size U16 2; atom suffix U16 _u16;
4+
fragment type U32; size U32 4; atom suffix U32 _u32;
5+
fragment type U64; size U64 8; atom suffix U64 _u64;
6+
fragment type I8; size I8 1; atom suffix I8 _i8;
7+
fragment type I16; size I16 2; atom suffix I16 _i16;
8+
fragment type I32; size I32 4; atom suffix I32 _i32;
9+
fragment type I64; size I64 8; atom suffix I64 _i64;
10+
fragment type ASCII; size ASCII 1; atom suffix ASCII _c;
1111
fragment type String; size String 8; atom suffix String _s;
1212

1313
fragment [] := λ(: l GlobalVariable+Array<x,?>)(: r GlobalVariable+U64). (: (
@@ -60,12 +60,12 @@ fragment > := λ(: l LocalVariable+U64)(: r Constant+U64). (: (
6060

6161
< := λ(: l U64)(: r U64). (: (tail(
6262
(gensym-label end)
63-
(mov( 1u64 RAX ))
63+
(mov( 1_u64 RAX ))
6464
(mov( l R8 ))
6565
(mov( r R9 ))
6666
(cmp( R9 R8 ))
6767
(jb end)
68-
(mov( 0u64 RAX ))
68+
(mov( 0_u64 RAX ))
6969
(label end)
7070
(as RAX U64)
7171
)) U64);
@@ -122,10 +122,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
122122
(je end-true)
123123
(jmp end-false)
124124
(label end-true)
125-
(mov( 1u64 RAX ))
125+
(mov( 1_u64 RAX ))
126126
(jmp end)
127127
(label end-false)
128-
(mov( 0u64 RAX ))
128+
(mov( 0_u64 RAX ))
129129
(jmp end)
130130
(label end)
131131
(pop R15)
@@ -144,10 +144,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
144144
(je end-true)
145145
(jmp end-false)
146146
(label end-true)
147-
(mov( 1u64 RAX ))
147+
(mov( 1_u64 RAX ))
148148
(jmp end)
149149
(label end-false)
150-
(mov( 0u64 RAX ))
150+
(mov( 0_u64 RAX ))
151151
(jmp end)
152152
(label end)
153153
(pop R15)
@@ -166,10 +166,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
166166
(je end-true)
167167
(jmp end-false)
168168
(label end-true)
169-
(mov( 1u64 RAX ))
169+
(mov( 1_u64 RAX ))
170170
(jmp end)
171171
(label end-false)
172-
(mov( 0u64 RAX ))
172+
(mov( 0_u64 RAX ))
173173
(jmp end)
174174
(label end)
175175
(pop R15)
@@ -188,10 +188,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
188188
(je end-true)
189189
(jmp end-false)
190190
(label end-true)
191-
(mov( 1u64 RAX ))
191+
(mov( 1_u64 RAX ))
192192
(jmp end)
193193
(label end-false)
194-
(mov( 0u64 RAX ))
194+
(mov( 0_u64 RAX ))
195195
(jmp end)
196196
(label end)
197197
(pop R15)
@@ -212,10 +212,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
212212
(je end-true)
213213
(jmp end-false)
214214
(label end-true)
215-
(mov( 1u64 RAX ))
215+
(mov( 1_u64 RAX ))
216216
(jmp end)
217217
(label end-false)
218-
(mov( 0u64 RAX ))
218+
(mov( 0_u64 RAX ))
219219
(jmp end)
220220
(label end)
221221
(pop R15)
@@ -234,10 +234,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
234234
(je end-true)
235235
(jmp end-false)
236236
(label end-true)
237-
(mov( 1u64 RAX ))
237+
(mov( 1_u64 RAX ))
238238
(jmp end)
239239
(label end-false)
240-
(mov( 0u64 RAX ))
240+
(mov( 0_u64 RAX ))
241241
(jmp end)
242242
(label end)
243243
(pop R15)
@@ -256,10 +256,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
256256
(je end-true)
257257
(jmp end-false)
258258
(label end-true)
259-
(mov( 1u64 RAX ))
259+
(mov( 1_u64 RAX ))
260260
(jmp end)
261261
(label end-false)
262-
(mov( 0u64 RAX ))
262+
(mov( 0_u64 RAX ))
263263
(jmp end)
264264
(label end)
265265
(pop R15)
@@ -278,10 +278,10 @@ fragment - := λ(: l GlobalVariable+U64)(: r Constant+U64). (: (
278278
(je end-true)
279279
(jmp end-false)
280280
(label end-true)
281-
(mov( 1u64 RAX ))
281+
(mov( 1_u64 RAX ))
282282
(jmp end)
283283
(label end-false)
284-
(mov( 0u64 RAX ))
284+
(mov( 0_u64 RAX ))
285285
(jmp end)
286286
(label end)
287287
(pop R15)

0 commit comments

Comments
 (0)