Skip to content

Commit 872a611

Browse files
forward progress
1 parent 6545d94 commit 872a611

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

PLUGINS/BACKEND/C/compile-c.lm

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ plugins-backend-c-compile := λ . (: (
1414
(set global-ctx (.bind(
1515
global-ctx k kt fragment
1616
)))
17-
(set std-c-fragment-context (.bind( std-c-fragment-context g-t fragment )))
17+
(set std-c-fragment-context (.bind( std-c-fragment-context (def-to-sym g-t) fragment )))
1818
) (
1919
(let clean-tt (.without-tag kt))
2020
(let mid (mangle-identifier( k clean-tt )))
@@ -25,13 +25,13 @@ plugins-backend-c-compile := λ . (: (
2525
(set global-ctx (.bind(
2626
global-ctx k kt fragment
2727
)))
28-
(set std-c-fragment-context (.bind( std-c-fragment-context g-t fragment )))
28+
(set std-c-fragment-context (.bind( std-c-fragment-context (def-to-sym g-t) fragment )))
2929
) (
3030
(let repr-tt (&&( clean-tt (t1 'GlobalVariable_s) )))
3131
(set global-ctx (.bind(
3232
global-ctx k repr-tt fragment
3333
)))
34-
(set std-c-fragment-context (.bind( std-c-fragment-context g-t fragment )))
34+
(set std-c-fragment-context (.bind( std-c-fragment-context (def-to-sym g-t) fragment )))
3535
))
3636
))
3737
))

SRC/infer-global-terms.lsts

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ let infer-global-terms(term: AST): AST = (
1313
(_, let new-rhs) = std-infer-expr((None :: TContext?), rhs, false, Used, TAny);
1414
if not(is(rhs,new-rhs)) then {
1515
let new-term = mk-glb(k, new-rhs);
16-
var-to-def-index = var-to-def-index.bind(term,new-term);
16+
mark-var-to-def(new-term, term);
1717
term = new-term;
1818
};
1919
let kt = normalize(typeof(rhs)) && t1(c"GlobalVariable");

SRC/std-infer-expr.lsts

+5-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ let std-infer-expr(tctx: Maybe<TContext>, term: AST, is-scoped: Bool, used: IsUs
9898
let rough-tt = typeof(term);
9999
if rough-tt.is-arrow && not(rough-tt.is-open) {
100100
(_, let new-val) = std-infer-expr(tctx, val, is-scoped, Used, TAny);
101-
if not(is(val,new-val)) then { term = mk-glb(key,new-val); };
101+
if not(is(val,new-val)) then {
102+
let new-term = mk-glb(key,new-val);
103+
mark-var-to-def(new-term, term);
104+
term = new-term;
105+
};
102106
};
103107
);
104108
Var{key=key, token=token} => (

SRC/var-to-def-index.lsts

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ let var-to-def(k: AST): AST = (
66
if not(non-zero(def)) {
77
exit-error( untern("Unable to Find Symlink in Context: \{k}"), k );
88
};
9-
let sym = var-to-def-index.lookup(def, ASTEOF);
10-
if non-zero(sym) then sym else def
9+
def-to-sym(def)
10+
);
11+
12+
let def-to-sym(k: AST): AST = (
13+
let sym = var-to-def-index.lookup(k, ASTEOF);
14+
if non-zero(sym) then sym else k
1115
);
1216

1317
let mark-var-to-def(k: AST, v: AST): Nil = (

0 commit comments

Comments
 (0)