Skip to content

Commit 003b607

Browse files
working
1 parent bd2b8ad commit 003b607

File tree

4 files changed

+26
-39
lines changed

4 files changed

+26
-39
lines changed

SRC/infer-global-terms.lsts

+13-20
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,25 @@ let infer-global-terms(term: AST): AST = (
33
match term {
44
Seq{} => (
55
let seqs = mk-vector(type(AST));
6-
while term.is-seq { match term {
6+
while non-zero(term) { match term {
77
Seq{l=left, r=right} => (
88
seqs = seqs.push(r);
9-
if l.is-seq
10-
then term = l
11-
else (term = ASTEOF; seqs = seqs.push(l));
9+
term = l;
1210
);
1311
}};
14-
let is-diff = false as U64;
15-
let def-i = seqs.length - 1;
12+
let def-i = seqs.length;
1613
while def-i > 0 {
14+
def-i = def-i - 1;
1715
let r = seqs[def-i];
1816
let new-r = infer-global-terms(r);
19-
if not(is(r,new-r)) then { is-diff = true; seqs[def-i] = new-r; };
20-
def-i = def-i - 1;
17+
if not(is(r,new-r)) then { seqs[def-i] = new-r; };
18+
};
19+
term = ASTEOF;
20+
let def-order-i = seqs.length;
21+
while def-order-i > 0 {
22+
def-order-i = def-order-i - 1;
23+
term = term + seqs[def-order-i];
2124
};
22-
if is-diff {
23-
term = ASTEOF;
24-
let def-order-i = seqs.length - 1;
25-
while def-order-i > 0 {
26-
if non-zero(term)
27-
then term = mk-seq(term, seqs[def-order-i])
28-
else term = seqs[def-order-i];
29-
def-order-i = def-order-i - 1;
30-
};
31-
}
3225
);
3326
Glb{val:Abs{}} => ();
3427
Glb{k=key, rhs=val} => (
@@ -56,10 +49,10 @@ let infer-global-context(term: AST): Nil = (
5649
else (term = ASTEOF; seqs = seqs.push(l));
5750
);
5851
}};
59-
let def-i = seqs.length - 1;
52+
let def-i = seqs.length;
6053
while def-i > 0 {
61-
infer-global-context(seqs[def-i]);
6254
def-i = def-i - 1;
55+
infer-global-context(seqs[def-i]);
6356
};
6457
);
6558
Typedef{ lhs:Lit{base-type=key}, case-constructors=rhs } => (

SRC/specialize.lm

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ specialize := λ(: key String)(: ft Type)(: unify-ctx Maybe<TContext>)(: result-
1616
(let special-term (substitute( unify-ctx term )))
1717
(infer-global-context( special-term ))
1818
(let tctx-special (std-infer-expr( (: None Maybe<TContext>) special-term false Used TAny )))
19+
(set special-term (.second tctx-special))
1920
(set global-type-context (.bind( global-type-context key (typeof special-term) special-term )))
2021
(set ast-parsed-program (Seq(
2122
(close ast-parsed-program)

SRC/std-apply-macro.lsts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ let std-apply-macro(tctx: Maybe<TContext>, mname: CString, margs: AST): (TContex
1919
peeped = mtype;
2020
};
2121
};
22-
(let peeped-type, _) = std-infer-peeped-arguments(tctx, margs, peep-holes);
22+
(let peeped-type, margs) = std-infer-peeped-arguments(tctx, margs, peep-holes);
2323

2424
let matched = [] :: List<(Type,AST)>;
2525
for Tuple{mtype=first, mterm=third} in row {

SRC/std-infer-expr.lsts

+11-18
Original file line numberDiff line numberDiff line change
@@ -88,32 +88,25 @@ let std-infer-expr(tctx: Maybe<TContext>, term: AST, is-scoped: Bool, used: IsUs
8888
AType{tt=tt} => ascript-normal(term, tt);
8989
Seq{} => (
9090
let seqs = mk-vector(type(AST));
91-
while term.is-seq { match term {
91+
while non-zero(term) { match term {
9292
Seq{l=left, r=right} => (
9393
seqs = seqs.push(r);
94-
if l.is-seq
95-
then term = l
96-
else (term = ASTEOF; seqs = seqs.push(l));
94+
term = l
9795
);
9896
}};
99-
let is-diff = false as U64;
100-
let def-i = seqs.length - 1;
97+
let def-i = seqs.length;
10198
while def-i > 0 {
99+
def-i = def-i - 1;
102100
let r = seqs[def-i];
103101
(_, let new-r) = std-infer-expr(tctx, seqs[def-i], false, Used, hint);
104-
if not(is(r,new-r)) then { is-diff = true; seqs[def-i] = new-r; };
105-
def-i = def-i - 1;
102+
if not(is(r,new-r)) then { seqs[def-i] = new-r; };
103+
};
104+
term = ASTEOF;
105+
let def-order-i = seqs.length;
106+
while def-order-i > 0 {
107+
def-order-i = def-order-i - 1;
108+
term = term + seqs[def-order-i]
106109
};
107-
if is-diff {
108-
term = ASTEOF;
109-
let def-order-i = seqs.length - 1;
110-
while def-order-i > 0 {
111-
if non-zero(term)
112-
then term = mk-seq(term, seqs[def-order-i])
113-
else term = seqs[def-order-i];
114-
def-order-i = def-order-i - 1;
115-
};
116-
}
117110
);
118111
Glb{key=key, val=val} => (
119112
let rough-tt = typeof(term);

0 commit comments

Comments
 (0)