Skip to content

Commit 55ca3fd

Browse files
Store TermSymbol directly in BlockMemberSymbol rather than TermDefinition
1 parent 51a77b8 commit 55ca3fd

File tree

2 files changed

+6
-42
lines changed

2 files changed

+6
-42
lines changed

hkmc2/shared/src/main/scala/hkmc2/semantics/Elaborator.scala

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -257,21 +257,6 @@ object Elaborator:
257257
Nil)
258258
cs.defn = S(ClassDef.Parameterized(N, syntax.Cls, cs, BlockMemberSymbol(cs.name, Nil),
259259
Nil, ps, Nil, N, ObjBody(Blk(Nil, Term.Lit(UnitLit(false)))), N, Nil))
260-
ts.defn = S:
261-
TermDefinition(
262-
syntax.Fun,
263-
BlockMemberSymbol(id.name, td :: Nil),
264-
ts,
265-
ps :: Nil,
266-
N,
267-
N,
268-
N,
269-
FlowSymbol("MatchResult-constructor"),
270-
TermDefFlags.empty,
271-
Modulefulness(N)(false),
272-
Nil,
273-
N,
274-
)
275260
cs -> ts
276261
val (matchFailureClsSymbol, matchFailureTrmSymbol) =
277262
val id = new Ident("MatchFailure")
@@ -282,21 +267,6 @@ object Elaborator:
282267
val ps = PlainParamList(Param(flag, VarSymbol(Ident("errors")), N, Modulefulness(N)(false)) :: Nil)
283268
cs.defn = S(ClassDef.Parameterized(N, syntax.Cls, cs, BlockMemberSymbol(cs.name, td :: Nil),
284269
Nil, ps, Nil, N, ObjBody(Blk(Nil, Term.Lit(UnitLit(false)))), N, Nil))
285-
ts.defn = S:
286-
TermDefinition(
287-
syntax.Fun,
288-
BlockMemberSymbol(id.name, td :: Nil),
289-
ts,
290-
ps :: Nil,
291-
N,
292-
N,
293-
N,
294-
FlowSymbol("MatchFailure-constructor"),
295-
TermDefFlags.empty,
296-
Modulefulness(N)(false),
297-
Nil,
298-
N,
299-
)
300270
cs -> ts
301271
val builtinOpsMap =
302272
val baseBuiltins = builtins.map: op =>
@@ -1140,8 +1110,7 @@ extends Importer:
11401110
Fun, mtdSym, tsym, PlainParamList(Param(FldFlags.empty, valueSym, N, Modulefulness.none) :: Nil) :: Nil,
11411111
N, N, S(valueSym.ref(Ident("value"))), FlowSymbol(s"‹result of non-local return›"), TermDefFlags.empty, Modulefulness.none, Nil, N)
11421112
tsym.defn = S(td)
1143-
mtdSym.defn = S(td)
1144-
mtdSym.tdefn = S(td)
1113+
mtdSym.tsym = S(tsym)
11451114
val htd = HandlerTermDefinition(resumeSym, td)
11461115
Term.Handle(nonLocalRetHandler, state.nonLocalRetHandlerTrm, Nil, clsSym, htd :: Nil, b)
11471116
val r = FlowSymbol(s"‹result of ${sym}")
@@ -1160,7 +1129,7 @@ extends Importer:
11601129
TermDefFlags.empty.copy(isMethod = isMethod), mfn, annotations, N).withLocOf(td)
11611130
tsym.defn = S(tdf)
11621131
sym.defn = S(tdf)
1163-
sym.tdefn = S(tdf)
1132+
sym.tsym = S(tsym)
11641133

11651134
tdf
11661135
go(sts, Nil, tdf :: acc)
@@ -1247,7 +1216,7 @@ extends Importer:
12471216
assert(p.fldSym.isEmpty)
12481217
p.fldSym = S(fsym)
12491218
fsym.defn = S(fdef)
1250-
fsym.tdefn = S(fdef)
1219+
fsym.tsym = S(tsym)
12511220
tsym.defn = S(fdef)
12521221
fdef :: Nil
12531222
else
@@ -1395,7 +1364,7 @@ extends Importer:
13951364
S(clsSym),
13961365
)
13971366
ctsym.defn = S(ctdef)
1398-
sym.tdefn = S(ctdef)
1367+
sym.tsym = S(ctsym)
13991368
cd
14001369
sym.defn = S(defn)
14011370
go(sts, Nil, defn :: acc)

hkmc2/shared/src/main/scala/hkmc2/semantics/Symbol.scala

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ abstract class Symbol(using State) extends Located:
7474
// * So, the symbol is from the `TermDefinition`.
7575
def asTrm: Opt[TermSymbol] = this match
7676
case trm: TermSymbol => S(trm)
77-
case mem: BlockMemberSymbol => mem.tdefn match
78-
case S(defn: TermDefinition) => S(defn.tsym)
79-
case N => N
77+
case mem: BlockMemberSymbol => mem.tsym
8078
case _ => N
8179
def asPat: Opt[PatternSymbol] = this match
8280
case pat: PatternSymbol => S(pat)
@@ -204,10 +202,7 @@ class BlockMemberSymbol(val nme: Str, val trees: Ls[TypeOrTermDef], val nameIsMe
204202
extends MemberSymbol[Definition]:
205203

206204
// * This is a hack for that `TermDef` currently doesn't have a symbol.
207-
// * So, the symbol is from the `TermDefinition`.
208-
// * To prevent the `TermDefinition` from being overridden by other definitions,
209-
// * we use a special field here.
210-
var tdefn: Opt[TermDefinition] = N
205+
var tsym: Opt[TermSymbol] = N
211206

212207
def toLoc: Option[Loc] = Loc(trees)
213208

0 commit comments

Comments
 (0)