Skip to content

Commit 6545d94

Browse files
interestingly, the def is non null
1 parent e2c4bb4 commit 6545d94

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed

PLUGINS/BACKEND/C/std-c-compile-expr.lsts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let std-c-compile-expr(ctx: FContext, t: AST, is-stmt: Bool): Fragment = (
33
let f = match t {
44
Var{ key=key } => (
5-
let def = var-to-def-index.lookup(t, ASTEOF);
5+
let def = var-to-def(t);
66
let e = std-c-fragment-context.lookup(def, mk-fragment());
77
if not(non-zero(e)) {
88
exit-error( untern("Unable to Find Variable Fragment in Context: \{key}"), t );

SRC/decorate-var-to-def.lsts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ let mark-var-to-def-todo(tctx: Maybe<TContext>, k: CString, tt: Type, t: AST): N
88
let decorate-var-to-def(): Nil = (
99
for vector Tuple{tctx=first, k=second, tt=third, t=fourth} in decorate-var-to-def-todo {
1010
let def = defof-var(t, tctx, k, tt);
11-
if non-zero(def) then var-to-def-index = var-to-def-index.bind(t, def);
11+
if non-zero(def) then mark-var-to-def(t, def);
1212
}
1313
);

SRC/infer-global-terms.lsts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@ let infer-global-terms(term: AST): AST = (
1111
Glb{val:Abs{}} => ();
1212
Glb{k=key, rhs=val} => (
1313
(_, let new-rhs) = std-infer-expr((None :: TContext?), rhs, false, Used, TAny);
14-
if not(is(rhs,new-rhs)) then term = mk-glb(k, new-rhs);
14+
if not(is(rhs,new-rhs)) then {
15+
let new-term = mk-glb(k, new-rhs);
16+
var-to-def-index = var-to-def-index.bind(term,new-term);
17+
term = new-term;
18+
};
1519
let kt = normalize(typeof(rhs)) && t1(c"GlobalVariable");
1620
global-type-context = global-type-context.bind(k.key, kt, term);
1721
mark-global-as-seen(k.key, kt, TAny);

SRC/var-to-def-index.lsts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,17 @@
11

22
let var-to-def-index = mk-hashtable-is(type(AST), type(AST));
3+
4+
let var-to-def(k: AST): AST = (
5+
let def = var-to-def-index.lookup(k, ASTEOF);
6+
if not(non-zero(def)) {
7+
exit-error( untern("Unable to Find Symlink in Context: \{k}"), k );
8+
};
9+
let sym = var-to-def-index.lookup(def, ASTEOF);
10+
if non-zero(sym) then sym else def
11+
);
12+
13+
let mark-var-to-def(k: AST, v: AST): Nil = (
14+
let sym = var-to-def-index.lookup(v, ASTEOF);
15+
if non-zero(sym) then v = sym;
16+
var-to-def-index = var-to-def-index.bind(k, v);
17+
);

0 commit comments

Comments
 (0)