@@ -3,6 +3,7 @@ package semantics
33
44import mlscript .utils .* , shorthands .*
55import syntax .*
6+ import scala .collection .mutable .Buffer
67
78
89final case class QuantVar (sym : VarSymbol , ub : Opt [Term ], lb : Opt [Term ])
@@ -101,7 +102,7 @@ sealed trait Statement extends AutoLocated:
101102 case RegRef (reg, value) => reg :: value :: Nil
102103 case Assgn (lhs, rhs) => lhs :: rhs :: Nil
103104 case Deref (term) => term :: Nil
104- case TermDefinition (_, k, _, ps, sign, body, res) =>
105+ case TermDefinition (_, k, _, ps, sign, body, res, _ ) =>
105106 ps.toList.flatMap(_.subTerms) ::: sign.toList ::: body.toList
106107 case cls : ClassDef =>
107108 cls.paramsOpt.toList.flatMap(_.flatMap(_.subTerms)) ::: cls.body.blk :: Nil
@@ -169,7 +170,7 @@ sealed trait Statement extends AutoLocated:
169170 case CompType (lhs, rhs, pol) => s " ${lhs.showDbg} ${if pol then " |" else " &" } ${rhs.showDbg}"
170171 case Error => " <error>"
171172 case Tup (fields) => fields.map(_.showDbg).mkString(" [" , " , " , " ]" )
172- case TermDefinition (_, k, sym, ps, sign, body, res) => s " ${k.str} ${sym}${
173+ case TermDefinition (_, k, sym, ps, sign, body, res, flags ) => s " ${flags} ${k.str} ${sym}${
173174 ps.map(_.showDbg).mkString(" " )
174175 }${sign.fold(" " )(" : " + _.showDbg)}${
175176 body match
@@ -186,6 +187,15 @@ final case class LetDecl(sym: LocalSymbol) extends Statement
186187
187188final case class DefineVar (sym : LocalSymbol , rhs : Term ) extends Statement
188189
190+ final case class TermDefFlags (mod : Bool ):
191+ def showDbg : Str =
192+ val flags = Buffer .empty[String ]
193+ if mod then flags += " module"
194+ flags.mkString(" " )
195+ override def toString : String = " ‹" + showDbg + " ›"
196+
197+ object TermDefFlags { val empty : TermDefFlags = TermDefFlags (false ) }
198+
189199final case class TermDefinition (
190200 owner : Opt [InnerSymbol ],
191201 k : TermDefKind ,
@@ -194,6 +204,7 @@ final case class TermDefinition(
194204 sign : Opt [Term ],
195205 body : Opt [Term ],
196206 resSym : FlowSymbol ,
207+ flags : TermDefFlags ,
197208) extends Companion
198209
199210case class ObjBody (blk : Term .Blk ):
@@ -273,8 +284,14 @@ case class TypeDef(
273284
274285
275286// TODO Store optional source locations for the flags instead of booleans
276- final case class FldFlags (mut : Bool , spec : Bool , genGetter : Bool ):
277- def showDbg : Str = (if mut then " mut " else " " ) + (if spec then " spec " else " " ) + (if genGetter then " val " else " " )
287+ final case class FldFlags (mut : Bool , spec : Bool , genGetter : Bool , mod : Bool ):
288+ def showDbg : Str =
289+ val flags = Buffer .empty[String ]
290+ if mut then flags += " mut"
291+ if spec then flags += " spec"
292+ if genGetter then flags += " gen"
293+ if mod then flags += " module"
294+ flags.mkString(" " )
278295 override def toString : String = " ‹" + showDbg + " ›"
279296
280297final case class Fld (flags : FldFlags , value : Term , asc : Opt [Term ]) extends FldImpl
0 commit comments