Skip to content

Commit a78093f

Browse files
Merge pull request #1501 from andrew-johnson-4/seq-ast-vector
Seq ast vector
2 parents 9b1f4cc + 45e1a61 commit a78093f

33 files changed

+30629
-30776
lines changed

BOOTSTRAP/cli.c

+30,459-30,451
Large diffs are not rendered by default.

PLUGINS/BACKEND/BLOB/compile-blob.lm

+9-23
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11

22
plugins-backend-blob-compile := λ. (: (
3-
(let preview-program ast-parsed-program)
4-
(while (non-zero preview-program) (match preview-program (
3+
(for-each-v (p in (.unroll-seq ast-parsed-program)) (match p (
54
()
6-
( (Seq( rst (Typedef( lhs rhs )) )) (
7-
(set preview-program rst)
8-
))
9-
( (Seq( rst (Glb( k_t rhs )) )) (
5+
( (Typedef( lhs rhs )) () )
6+
( (Glb( k_t rhs )) (
107
(match rhs (
118
()
129
( (Abs( _ _ _ )) (
@@ -20,33 +17,22 @@ plugins-backend-blob-compile := λ. (: (
2017
))
2118
( _ () )
2219
))
23-
(set preview-program rst)
24-
))
25-
( (Seq( rst rhs )) (
26-
(set preview-program rst)
2720
))
21+
( _ () )
2822
)))
2923
(let blob SNil)
30-
(set preview-program ast-parsed-program)
31-
(while (non-zero preview-program) (match preview-program (
24+
(for-each-v (p in (.unroll-seq ast-parsed-program)) (match p (
3225
()
33-
( (Seq( rst (Glb( k_t rhs )) )) (
34-
(set preview-program rst)
35-
))
36-
( (Seq( rst (Typedef( lhs rhs )) )) (
37-
(set preview-program rst)
38-
))
39-
( (Seq( rst (Meta( _ )) )) (
40-
(set preview-program rst)
41-
))
42-
( (Seq( rst expr )) (
26+
( (Glb( k_t rhs )) () )
27+
( (Typedef( lhs rhs )) () )
28+
( (Meta( _ )) () )
29+
( expr (
4330
(let cs (blob-render-simple( global-ctx 'expression_s expr 0_i64 )))
4431
(let s (.1 cs))
4532
(set blob (SCons(
4633
(close blob)
4734
(close s)
4835
)))
49-
(set preview-program rst)
5036
))
5137
)))
5238
(set assemble-final (clone-rope(escape-string blob)))

PLUGINS/BACKEND/C/compile-c.lm

+11-21
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11

22
plugins-backend-c-compile := λ . (: (
3-
(let preview-program ast-parsed-program)
43
(let typedefs ASTEOF)
5-
(while (non-zero preview-program) (match preview-program (
4+
(for-each-v (program-term in (.unroll-seq ast-parsed-program)) (match program-term (
65
()
7-
( (Seq( rst (@( g-t (Glb( k_t rhs )) )) )) (
6+
( (@( g-t (Glb( k_t rhs )) )) (
87
(if (==( k 'main_s )) (set assemble-argv-referenced True_u8) ())
98
(let kt (typeof rhs))
109
(let fragment (mk-fragment()))
@@ -36,37 +35,28 @@ plugins-backend-c-compile := λ . (: (
3635
))
3736
))
3837
))
39-
(set preview-program rst)
4038
))
41-
( (Seq( rst (@( td (Typedef( _ _ )) )) )) (
42-
(set typedefs (Seq( (close typedefs) (close td) )))
43-
(set preview-program rst)
44-
))
45-
( (Seq( rst _ )) (
46-
(set preview-program rst)
39+
( (@( td (Typedef( _ _ )) )) (
40+
(set typedefs (+( typedefs td )))
4741
))
42+
( _ () )
4843
)))
49-
(let pre-typedefs typedefs)
50-
(while (non-zero pre-typedefs) (match pre-typedefs (
44+
(for-each-v (td in (.unroll-seq typedefs)) (match td (
5145
()
52-
( (Seq( rst (Typedef( (Lit( lhs _ )) rhs )) )) (
46+
( (Typedef( (Lit( lhs _ )) rhs )) (
5347
(compile-c-typedef-ordinal(parse-type lhs))
54-
(set pre-typedefs rst)
5548
))
56-
( (Seq( rst (Typedef( (AType( lhs )) rhs )) )) (
49+
( (Typedef( (AType( lhs )) rhs )) (
5750
(compile-c-typedef-ordinal lhs)
58-
(set pre-typedefs rst)
5951
))
6052
)))
61-
(while (non-zero typedefs) (match typedefs (
53+
(for-each-v (td in (.unroll-seq typedefs)) (match td (
6254
()
63-
( (Seq( rst (Typedef( (Lit( lhs _ )) rhs )) )) (
55+
( (Typedef( (Lit( lhs _ )) rhs )) (
6456
(compile-c-typedef( (parse-type lhs) rhs ))
65-
(set typedefs rst)
6657
))
67-
( (Seq( rst (Typedef( (AType( lhs )) rhs )) )) (
58+
( (Typedef( (AType( lhs )) rhs )) (
6859
(compile-c-typedef( lhs rhs ))
69-
(set typedefs rst)
7060
))
7161
)))
7262
(try-continue-compile-c-typedefs())

PLUGINS/BACKEND/C/compile-program-ordered.lm

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11

22
compile-program-ordered := λ(: global-ctx FContext)(: program AST). (: (
3-
(let ordered (: LEOF List<AST>))
4-
(while (non-zero program) (match program (
5-
()
6-
( (Seq( rst t )) (
7-
(set ordered (cons( t ordered )))
8-
(set program rst)
9-
))
10-
)))
11-
(for-each (g in ordered) (match g (
3+
(for-each-v (g in (.unroll-seq program)) (match g (
124
()
135
( (Glb( k_t rhs )) (
146
(if (.is-open(typeof g)) () (

PLUGINS/FRONTEND/LM/parse-toplevel.lm

+17-34
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,12 @@ parse-toplevel := λ(: tokens List<Token>). (: (
1515
()
1616
( (Tuple( mrhs-tokens mremainder2 )) (
1717
(let mrhs (parse-toplevel mrhs-tokens))
18-
(match mrhs (
19-
()
20-
( (Seq( ASTEOF m-expr )) (
21-
(set mrhs m-expr)
22-
))
23-
( _ () )
18+
(for-each-v (s in (.unroll-seq mrhs)) (
19+
(set preprocess-macros (MSeq(
20+
(close preprocess-macros)
21+
(Macro( (without-location mlhs) (without-location s) ))
22+
)))
2423
))
25-
(set preprocess-macros (MSeq(
26-
(close preprocess-macros)
27-
(Macro( (without-location mlhs) (without-location mrhs) ))
28-
)))
2924
(set tokens mremainder2)
3025
))
3126
))
@@ -47,13 +42,7 @@ parse-toplevel := λ(: tokens List<Token>). (: (
4742
( (PME( e1 r1 )) (match (parse-many-expressions r1) (
4843
()
4944
( (PME( e2 r2 )) (
50-
(set program (Seq(
51-
(close program)
52-
(close (Typedef(
53-
(close e1)
54-
(close e2)
55-
)))
56-
)))
45+
(set program (+( program (Typedef( (close e1) (close e2) )) )))
5746
(let base-type (lm-type-of-s e1))
5847
(add-class-info-layout( base-type FragmentStyle ))
5948
(set tokens r2)
@@ -67,13 +56,7 @@ parse-toplevel := λ(: tokens List<Token>). (: (
6756
( (PME( e1 r1 )) (match (parse-many-expressions r1) (
6857
()
6958
( (PME( e2 r2 )) (
70-
(set program (Seq(
71-
(close program)
72-
(close (Typedef(
73-
(close e1)
74-
(close e2)
75-
)))
76-
)))
59+
(set program (+( program (Typedef( (close e1) (close e2) )) )))
7760
(set tokens r2)
7861
))
7962
)))
@@ -106,9 +89,9 @@ parse-toplevel := λ(: tokens List<Token>). (: (
10689
(set tokens remainder)
10790
))
10891
( (LCons( 'zero_t (LCons( base-type (LCons( tag-type_t remainder )) )) )) (
109-
(set program (Seq(
110-
(close program)
111-
(close (Glb( (with-key( base-type 'non-zero_s )) (close(Abs(
92+
(set program (+(
93+
program
94+
(Glb( (with-key( base-type 'non-zero_s )) (close(Abs(
11295
(close(App(
11396
(close(Lit( ':_s (with-key( base-type ':_s )) )))
11497
(close(App( (close(Var( 't_s (with-key( base-type 't_s )) ))) (close(AType(parse-type(.key base-type)))) )))
@@ -139,17 +122,17 @@ parse-toplevel := λ(: tokens List<Token>). (: (
139122
)))
140123
)))
141124
TAny
142-
))) )))
125+
))) ))
143126
)))
144127
(set tokens remainder)
145128
))
146129
( (LCons( key (LCons( ':=_t remainder )) )) (
147130
(match (parse-many-expressions remainder) (
148131
()
149132
( (PME( re rr )) (
150-
(set program (Seq(
151-
(close program)
152-
(close (Glb( key (close re) )))
133+
(set program (+(
134+
program
135+
(Glb( key (close re) ))
153136
)))
154137
(set tokens rr)
155138
))
@@ -159,9 +142,9 @@ parse-toplevel := λ(: tokens List<Token>). (: (
159142
(match (parse-many-expressions remainder) (
160143
()
161144
( (PME( term r1 )) (
162-
(set program (Seq(
163-
(close program)
164-
(close term)
145+
(set program (+(
146+
program
147+
term
165148
)))
166149
(set tokens r1)
167150
))

PLUGINS/FRONTEND/LSTS/lsts-parse.lsts

+13-32
Original file line numberDiff line numberDiff line change
@@ -120,29 +120,17 @@ let lsts-parse-doc(tokens: List<Token>): Tuple<AST, List<Token>> = (
120120
(let ax, let new-tags, tokens) = lsts-parse-doc-expr(tokens);
121121
tags = tags + new-tags;
122122
if non-zero(ax) {
123-
if non-zero(line) {
124-
line = mk-seq(line, ax);
125-
} else {
126-
line = ax;
127-
};
123+
line = line + ax;
128124
};
129125
};
130126
tokens = tail(tokens);
131127

132128
if non-zero(line) {
133-
if non-zero(para) {
134-
para = mk-seq(para, line);
135-
} else {
136-
para = line;
137-
};
129+
para = para + line;
138130
} else {
139131
# empty line => new paragraph
140132
if non-zero(para) {
141-
if non-zero(ast) {
142-
ast = mk-seq(ast, para);
143-
} else {
144-
ast = para;
145-
};
133+
ast = ast + para;
146134
para = ASTEOF;
147135
};
148136
};
@@ -212,7 +200,7 @@ let lsts-parse(tokens: List<Token>): Nil = (
212200
[ Token{key:c"type"}.. _] => tokens = lsts-parse-typedef(tokens);
213201
[ Token{key:c"typed"}.. Token{key:c"macro"}.. _] => (
214202
(let bind, tokens) = lsts-parse-typed-macro(tokens);
215-
ast-parsed-program = mk-seq(ast-parsed-program, bind);
203+
ast-parsed-program = ast-parsed-program + bind;
216204
);
217205
[ Token{key:c"interface"}.. _] => tokens = lsts-parse-interface(tokens);
218206
[ Token{key:c"import"}.. rest] => (
@@ -235,13 +223,13 @@ let lsts-parse(tokens: List<Token>): Nil = (
235223
};
236224
let constructor = head(tokens); tokens = tail(tokens);
237225
lsts-parse-expect(c";", tokens); tokens = tail(tokens);
238-
ast-parsed-program = mk-seq(ast-parsed-program, mk-app(
226+
ast-parsed-program = ast-parsed-program + mk-app(
239227
Var{ c"macro::define-zero", with-key(constructor, c"macro::define-zero") },
240228
mk-cons(
241229
AType{ base-type-rest.first },
242230
Lit{ constructor.key, constructor }
243231
)
244-
));
232+
);
245233
);
246234
[ Token{key:c"atom"}.. Token{key:c"suffix"}.. rest] => (
247235
tokens = rest;
@@ -261,13 +249,13 @@ let lsts-parse(tokens: List<Token>): Nil = (
261249
let term-rest = lsts-parse-small-expression(tokens);
262250
let term = term-rest.first;
263251
tokens = term-rest.second;
264-
ast-parsed-program = mk-seq(ast-parsed-program, term);
252+
ast-parsed-program = ast-parsed-program + term;
265253
lsts-parse-expect(c";",tokens); tokens = tail(tokens);
266254
);
267255
};
268256
if is(prev-tokens, tokens) { fail("Unrecognized Token During Parsing: \{lsts-parse-head(tokens)}\n") };
269257
if non-zero(docx) {
270-
ast-parsed-program = mk-seq(ast-parsed-program, mk-meta(docx));
258+
ast-parsed-program = ast-parsed-program + mk-meta(docx);
271259
};
272260
};
273261
);
@@ -789,10 +777,7 @@ let lsts-parse-typedef(tokens: List<Token>): List<Token> = (
789777
cases = mk-cons(mk-cons(cases, Var{ bar.key, bar }), case-rest.first);
790778
};
791779
lsts-parse-expect(c";", tokens); tokens = tail(tokens);
792-
ast-parsed-program = mk-seq(
793-
ast-parsed-program,
794-
mk-typedef(AType{ base-rest.first }, cases)
795-
);
780+
ast-parsed-program = ast-parsed-program + mk-typedef(AType{ base-rest.first }, cases);
796781
} else if mode==c"alias" {
797782
lsts-parse-expect(c"=", tokens); tokens = tail(tokens);
798783
let case-rest = lsts-parse-type(tokens);
@@ -933,18 +918,14 @@ let lsts-parse-let(tokens: List<Token>): List<Token> = (
933918
);
934919
};
935920
} else {
936-
ast-parsed-program = mk-seq(
937-
ast-parsed-program,
921+
ast-parsed-program = ast-parsed-program +
938922
mk-glb( with-location(mk-token(name),loc), mk-abs(
939923
args-list, return-term, misc-tt && attach-tt
940-
) )
941-
);
924+
) );
942925
};
943926
} else {
944-
ast-parsed-program = mk-seq(
945-
ast-parsed-program,
946-
mk-glb( with-location(mk-token(name),loc), return-term )
947-
);
927+
ast-parsed-program = ast-parsed-program +
928+
mk-glb( with-location(mk-token(name),loc), return-term );
948929
};
949930
tokens
950931
);

SRC/apply.lm

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ apply := λ(: ctx AContext)(: term AST). (: (
2525
tlt
2626
)))
2727
))
28-
( (Seq( vl vr )) (
29-
(set return (Seq(
30-
(close(apply( ctx vl )))
31-
(close(apply( ctx vr )))
32-
)))
28+
( (Seq( seq )) (
29+
(set return ASTEOF)
30+
(for-each-v (s in seq) (
31+
(set return (+( return (apply( ctx s )) )))
32+
))
3333
))
3434
( (Typedef( vl vr )) (
3535
(set return (Typedef(

SRC/assert-well-typed.lm

+2-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11

22
assert-well-typed := λ(: term AST). (: (
3-
(while (.is-seq term) (match term (
4-
()
5-
( (Seq( rst t )) (
6-
(assert-well-typed t)
7-
(set term rst)
8-
))
9-
)))
103
(match term (
114
()
125
( ASTEOF () )
@@ -59,9 +52,8 @@ assert-well-typed := λ(: term AST). (: (
5952
(assert-well-typed r)
6053
(assert-one-typed term)
6154
))
62-
( (Seq( l r )) (
63-
(assert-well-typed l)
64-
(assert-well-typed r)
55+
( (Seq( seq )) (
56+
(for-each-v (s in seq) (assert-well-typed s))
6557
))
6658
( (Meta( _ )) () )
6759
))

SRC/ast-definitions.lsts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type AST = ASTEOF
99
| Lit { key: CString, token: Token }
1010
| Abs { lhs: AST[], rhs: AST[], tt: Type }
1111
| AType { tt: Type }
12-
| Seq { left: AST[], right: AST[] }
12+
| Seq { seq: Vector<AST> }
1313
| Glb { key: Token , val: AST[] }
1414
| Typedef { lhs: AST[] , rhs: AST[] }
1515
| Meta { val: AST[] };

0 commit comments

Comments
 (0)