Skip to content

Commit 89e769b

Browse files
Merge pull request #232 from andrew-johnson-4/strict-tokenize-2
Strict tokenize 2
2 parents a99648c + 80b7155 commit 89e769b

12 files changed

+78
-23
lines changed

BOOTSTRAP/cli.s

+4-4
Original file line numberDiff line numberDiff line change
@@ -75514,7 +75514,7 @@ uuid_000000000000047c:
7551475514
pop %r13
7551575515
push %r12
7551675516
push %r13
75517-
mov $uuid_0000000000000030, %r12
75517+
mov $uuid_0000000000000002, %r12
7551875518
mov $0, %r13
7551975519
call uuid_0000000000000003
7552075520
mov %r12, 0(%r8)
@@ -75605,7 +75605,7 @@ uuid_000000000000047c:
7560575605
mov -80(%rbp),%r13
7560675606
push %r12
7560775607
push %r13
75608-
mov $uuid_000000000000002d, %r12
75608+
mov $uuid_000000000000003f, %r12
7560975609
mov $0, %r13
7561075610
call uuid_0000000000000003
7561175611
mov %r12, 0(%r8)
@@ -76690,7 +76690,7 @@ uuid_000000000000048e:
7669076690
pop %r13
7669176691
push %r12
7669276692
push %r13
76693-
mov $uuid_0000000000000030, %r12
76693+
mov $uuid_0000000000000002, %r12
7669476694
mov $0, %r13
7669576695
call uuid_0000000000000003
7669676696
mov %r12, 0(%r8)
@@ -76781,7 +76781,7 @@ uuid_000000000000048e:
7678176781
mov -80(%rbp),%r13
7678276782
push %r12
7678376783
push %r13
76784-
mov $uuid_000000000000002d, %r12
76784+
mov $uuid_000000000000003f, %r12
7678576785
mov $0, %r13
7678676786
call uuid_0000000000000003
7678776787
mov %r12, 0(%r8)

Cargo.toml

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

PRODUCTION/codegen-strict.lm

+4-4
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ compile-expr-strict := λctx e offset used . (tail(
122122
( et (tail(
123123
(set e1 (expr::set-prog( e1 (
124124
(expr::get-prog e1)
125-
\t 'cmp \s '$1 , \s '%rax \n
125+
\t 'cmp \s '$0 , \s '%rax \n
126126
))))
127-
(set e1 (expr::set-expr( e1 'je )))
127+
(set e1 (expr::set-expr( e1 'jne )))
128128
)))
129129
))
130130

@@ -165,9 +165,9 @@ compile-expr-strict := λctx e offset used . (tail(
165165
( _ (tail(
166166
(set e1 (expr::set-prog( e1 (
167167
(expr::get-prog e1)
168-
\t 'cmp \s '$1 , \s '%rax \n
168+
\t 'cmp \s '$0 , \s '%rax \n
169169
))))
170-
(set e1 (expr::set-expr( e1 'je )))
170+
(set e1 (expr::set-expr( e1 'jne )))
171171
)))
172172
))
173173
(set e4 e1)

STDLIB/default-instruction-set.lm

+12
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ fragment mov := λ(: src Literal+Constant)(: index Literal+Constant)(: dst Local
165165
))
166166
) Nil);
167167

168+
fragment mov := λ(: src Sized<1>[]+LocalVariable)(: index Literal+Constant)(: dst Reg8). (: (
169+
(.program(
170+
\t 'mov \s (.expression src) \[ '%rbp \] , \s '%r15 \n
171+
\t 'mov \s (.expression index) \[ '%r15 \] , \s '% (.expression dst) \n
172+
))
173+
) Nil);
174+
168175
fragment mov := λ(: src LocalVariable)(: dst Constant+Reg64). (: ( (.program( \t 'mov \t (.expression src) \[ '%rbp \] , \s '% (.expression dst) \n)) ) Nil);
169176
fragment mov := λ(: src GlobalVariable)(: dst Constant+Reg64). (: ( (.program(
170177
\t 'mov \t '$ (.expression src) , \s '% (.expression dst) \n
@@ -241,6 +248,11 @@ fragment mov := λ(: src LocalVariable)(: dst Reg16). (: (.program( \t 'mov \s (
241248
fragment mov := λ(: src LocalVariable)(: dst Reg32). (: (.program( \t 'mov \s (.expression src) \[ '%rbp \] , \s '% (.expression dst) \n )) Nil);
242249
fragment mov := λ(: src LocalVariable)(: dst Reg64). (: (.program( \t 'mov \s (.expression src) \[ '%rbp \] , \s '% (.expression dst) \n )) Nil);
243250

251+
fragment mov := λ(: src Constant+Literal+Sized<1>)(: dst Reg8). (: (.program( \t 'mov \s '$ (.expression src) , \s '% (.expression dst) \n )) Nil);
252+
fragment mov := λ(: src Constant+Literal+Sized<2>)(: dst Reg16). (: (.program( \t 'mov \s '$ (.expression src) , \s '% (.expression dst) \n )) Nil);
253+
fragment mov := λ(: src Constant+Literal+Sized<4>)(: dst Reg32). (: (.program( \t 'mov \s '$ (.expression src) , \s '% (.expression dst) \n )) Nil);
254+
fragment mov := λ(: src Constant+Literal+Sized<8>)(: dst Reg64). (: (.program( \t 'mov \s '$ (.expression src) , \s '% (.expression dst) \n )) Nil);
255+
244256
fragment push := λ(: dst Reg8). (: (.program( \t 'mov \s '% (.expression dst) , '%r15b \n \t 'push \s '%r15 \n )) Nil);
245257
fragment push := λ(: dst Reg16). (: (.program( \t 'mov \s '% (.expression dst) , '%r15w \n \t 'push \s '%r15 \n )) Nil);
246258
fragment push := λ(: dst Reg32). (: (.program( \t 'mov \s '% (.expression dst) , '%r15d \n \t 'push \s '%r15 \n )) Nil);

STDLIB/default-primitives.lm

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
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-
size String 8; atom suffix String _s;
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;
11+
fragment type String; size String 8; atom suffix String _s;
1112

1213
fragment [] := λ(: l GlobalVariable+Array<x,?>)(: r GlobalVariable+U64). (: (
1314
(.program (

STDLIB/default-stdlib.lm

+26-1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ print := λ(: x U64). (: (tail(
104104
(jne( pdigits ))
105105
)) Nil);
106106

107+
print := λ(: cs ASCII). (: (tail(
108+
(system-call( 1u64 1u64 (as (& cs) U64) 1u64 ))
109+
()
110+
)) Nil);
111+
107112
print := λ(: x I64). (: (tail(
108113
(let cs 0u8)
109114
(gensym-label unsigned)
@@ -252,7 +257,6 @@ read-file := λ(: fp String). (: (tail(
252257
(while (==( more Trueu8 )) (tail(
253258
(let rdsz (system-call( 0u64 fd (as stail U64) 1024u64 )))
254259
(malloc( rdsz ))
255-
(print rdsz)
256260
(if (==( rdsz 0u64 )) (
257261
(set more Falseu8)
258262
) (
@@ -267,4 +271,25 @@ read-file := λ(: fp String). (: (tail(
267271
(as shead String)
268272
)) String);
269273

274+
head-string := λ(: s String). (: (tail(
275+
(if (==( (as s U64) 0u64 )) (
276+
(mov( 0u8 AL ))
277+
) (
278+
(mov( (as s U8[]) 0u64 AL ))
279+
))
280+
(as AL U8)
281+
)) U8);
270282

283+
tail-string := λ(: s String). (: (tail(
284+
(if (==( (as s U64) 0u64 )) (
285+
(mov( 0u64 RAX ))
286+
) (
287+
(if (head-string s) (tail(
288+
(mov( (as s U64) RAX ))
289+
(inc( RAX ))
290+
)) (
291+
(mov( 0u64 RAX ))
292+
))
293+
))
294+
(as RAX String)
295+
)) String);

STRICT/cli.lm

-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ main := λ(: argc U64)(: argv String[]).(tail(
3838
('--macro_s (set config-preprocess Trueu8))
3939
('--nomacro_s (set config-preprocess Falseu8))
4040
('-o_s (tail(
41-
(print 'O_s)
4241
(set argi (+( argi 1u64 )))
4342
(set config-target ([]( argv argi )))
4443
)))

STRICT/tokenize.lm

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ type Tokens EOF | (HeadOrder( String , Tokens[] )) | (TailOrder( Tokens[] , Stri
33

44
tokenize := λ(: fp String). (: (tail(
55
(let text (read-file fp))
6-
(while (head-string text) (
7-
(print (head-string text))
6+
(while (head-string text) (tail(
7+
(print (as (head-string text) ASCII))
88
(set text (tail-string text))
9-
))
9+
)))
1010
)) Nil);
1111

1212
close := λ(: x Tokens). (: (tail(

tests/strict/head-string.lm

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
import STDLIB/default-instruction-set.lm;
3+
import STDLIB/default-primitives.lm;
4+
import STDLIB/default-rules.lm;
5+
import STDLIB/default-stdlib.lm;
6+
7+
main := (print (as (head-string 'ABC_s) ASCII));
8+

tests/strict/head-string.lm.out

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
A

tests/strict/tail-string.lm

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
import STDLIB/default-instruction-set.lm;
3+
import STDLIB/default-primitives.lm;
4+
import STDLIB/default-rules.lm;
5+
import STDLIB/default-stdlib.lm;
6+
7+
main := (print (tail-string 'ABC_s));
8+

tests/strict/tail-string.lm.out

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
BC

0 commit comments

Comments
 (0)