Skip to content

Commit 6e5b46f

Browse files
Add flags to TermDefinition
1 parent 59ede6f commit 6e5b46f

File tree

5 files changed

+405
-7
lines changed

5 files changed

+405
-7
lines changed

hkmc2/shared/src/main/scala/hkmc2/bbml/bbML.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -407,13 +407,13 @@ class BBTyper(using elState: Elaborator.State, tl: TL):
407407
effBuff += eff
408408
nestCtx += sym -> rhsTy
409409
goStats(stats)
410-
case TermDefinition(_, Fun, sym, ParamList(_, ps) :: Nil, sig, Some(body), _) :: stats =>
410+
case TermDefinition(_, Fun, sym, ParamList(_, ps) :: Nil, sig, Some(body), _, _) :: stats =>
411411
typeFunDef(sym, Term.Lam(ps, body), sig, ctx)
412412
goStats(stats)
413-
case TermDefinition(_, Fun, sym, Nil, sig, Some(body), _) :: stats =>
413+
case TermDefinition(_, Fun, sym, Nil, sig, Some(body), _, _) :: stats =>
414414
typeFunDef(sym, body, sig, ctx) // * may be a case expressions
415415
goStats(stats)
416-
case TermDefinition(_, Fun, sym, _, S(sig), None, _) :: stats =>
416+
case TermDefinition(_, Fun, sym, _, S(sig), None, _, _) :: stats =>
417417
ctx += sym -> typeType(sig)
418418
goStats(stats)
419419
case (clsDef: ClassDef) :: stats =>

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,8 @@ extends Importer:
485485
val b = rhs.map(term(_)(using newCtx))
486486
val r = FlowSymbol(s"‹result of ${sym}", nextUid)
487487
val tdf = TermDefinition(owner, k, sym, pss,
488-
td.signature.orElse(newSignatureTrees.get(id.name)).map(term), b, r)
488+
td.signature.orElse(newSignatureTrees.get(id.name)).map(term), b, r,
489+
TermDefFlags.empty)
489490
sym.defn = S(tdf)
490491
tdf
491492
go(sts, tdf :: acc)
@@ -654,7 +655,7 @@ extends Importer:
654655
def computeVariances(s: Statement): Unit =
655656
val trav = VarianceTraverser()
656657
def go(s: Statement): Unit = s match
657-
case TermDefinition(_, k, sym, pss, sign, body, r) =>
658+
case TermDefinition(_, k, sym, pss, sign, body, r, _) =>
658659
pss.foreach(ps => ps.params.foreach(trav.traverseType(S(false))))
659660
sign.foreach(trav.traverseType(S(true)))
660661
body match

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ sealed trait Statement extends AutoLocated:
101101
case RegRef(reg, value) => reg :: value :: Nil
102102
case Assgn(lhs, rhs) => lhs :: rhs :: Nil
103103
case Deref(term) => term :: Nil
104-
case TermDefinition(_, k, _, ps, sign, body, res) =>
104+
case TermDefinition(_, k, _, ps, sign, body, res, _) =>
105105
ps.toList.flatMap(_.subTerms) ::: sign.toList ::: body.toList
106106
case cls: ClassDef =>
107107
cls.paramsOpt.toList.flatMap(_.flatMap(_.subTerms)) ::: cls.body.blk :: Nil
@@ -169,7 +169,7 @@ sealed trait Statement extends AutoLocated:
169169
case CompType(lhs, rhs, pol) => s"${lhs.showDbg} ${if pol then "|" else "&"} ${rhs.showDbg}"
170170
case Error => "<error>"
171171
case Tup(fields) => fields.map(_.showDbg).mkString("[", ", ", "]")
172-
case TermDefinition(_, k, sym, ps, sign, body, res) => s"${k.str} ${sym}${
172+
case TermDefinition(_, k, sym, ps, sign, body, res, flags) => s"${flags} ${k.str} ${sym}${
173173
ps.map(_.showDbg).mkString("")
174174
}${sign.fold("")(": "+_.showDbg)}${
175175
body match
@@ -186,6 +186,15 @@ final case class LetDecl(sym: LocalSymbol) extends Statement
186186

187187
final case class DefineVar(sym: LocalSymbol, rhs: Term) extends Statement
188188

189+
final case class TermDefFlags(mod: Bool):
190+
def showDbg: Str = (
191+
(if mod then S("module") else N) ::
192+
Nil
193+
).flatten.mkString(" ")
194+
override def toString: String = "" + showDbg + ""
195+
196+
object TermDefFlags { val empty: TermDefFlags = TermDefFlags(false) }
197+
189198
final case class TermDefinition(
190199
owner: Opt[InnerSymbol],
191200
k: TermDefKind,
@@ -194,6 +203,7 @@ final case class TermDefinition(
194203
sign: Opt[Term],
195204
body: Opt[Term],
196205
resSym: FlowSymbol,
206+
flags: TermDefFlags,
197207
) extends Companion
198208

199209
case class ObjBody(blk: Term.Blk):

hkmc2/shared/src/main/scala/hkmc2/utils/utils.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ extension (s: String)
2020
.mkString("\"", "", "\"")
2121

2222

23+
import hkmc2.semantics.TermDefFlags
2324
import hkmc2.semantics.FldFlags
2425
import scala.collection.mutable.Buffer
2526
import mlscript.utils.StringOps
@@ -36,6 +37,10 @@ extension (t: Product)
3637
case Nil => "Nil"
3738
case xs: List[_] => "Ls of \n" + xs.iterator.map(aux(_)).mkString("\n").indent(" ")
3839
case s: String => s.escaped
40+
case TermDefFlags(mod) =>
41+
val flags = Buffer.empty[String]
42+
if mod then flags += "module"
43+
if flags.isEmpty then "()" else flags.mkString("(", ", ", ")")
3944
case FldFlags(mut, spec, genGetter) =>
4045
val flags = Buffer.empty[String]
4146
if mut then flags += "mut"

0 commit comments

Comments
 (0)