@@ -3,10 +3,10 @@ package semantics
33package ucs
44
55import mlscript .utils .* , shorthands .*
6- import syntax .Tree .* , Elaborator .{Ctxl , ctx }
6+ import syntax .Tree .* , Elaborator .{Ctxl , ctx }, Elaborator . State
77
88/** Contains some helpers that makes UCS desugaring easier. */
9- trait DesugaringBase (using state : Elaborator . State ):
9+ trait DesugaringBase (using state : State ):
1010 val elaborator : Elaborator
1111
1212 import elaborator .tl .* , state .globalThisSymbol
@@ -22,30 +22,24 @@ trait DesugaringBase(using state: Elaborator.State):
2222 protected final def app (l : Term , r : Term , label : Str ): Term .App = app(l, r, FlowSymbol (label))
2323 protected final def app (l : Term , r : Term , s : FlowSymbol ): Term .App = Term .App (l, r)(App (Empty (), Empty ()), s)
2424
25- /** Get the class symbol defined in the `Predef` module. */
26- protected def resolvePredefMember (name : Str ): Ctxl [(Term .SynthSel , ClassSymbol )] =
27- val predefSymbol = ctx.builtins.Predef
28- val innerSel = sel(globalThisSymbol.ref(), " Predef" , predefSymbol)
29- val memberSymbol = predefSymbol.tree.definedSymbols.get(name).flatMap(_.asCls).getOrElse:
30- lastWords(s " Cannot resolve ` $name` in `Predef`. " )
31- (sel(innerSel, name, memberSymbol), memberSymbol)
32-
3325 /** Make a term looks like `globalThis.Predef.MatchResult` with its symbol. */
34- protected lazy val matchResultClass : Ctxl [(Term .SynthSel , ClassSymbol )] = resolvePredefMember(" MatchResult" )
26+ protected lazy val matchResultClass : Ctxl [(Term .Sel | Term .SynthSel , ClassSymbol )] =
27+ (State .runtimeSymbol.ref().selNoSym(" MatchResult" , synth= true ), State .matchResultClsSymbol)
3528
3629 /** Make a pattern looks like `globalThis.Predef.MatchResult.class`. */
3730 protected def matchResultPattern (parameters : Opt [List [BlockLocalSymbol ]]): Ctxl [Pattern .ClassLike ] =
3831 val (classRef, classSym) = matchResultClass
39- val classSel = Term .SynthSel (matchResultClass._1 , Ident (" class" ))(S (classSym))
32+ val classSel = Term .SynthSel (classRef , Ident (" class" ))(S (classSym))
4033 Pattern .ClassLike (classSym, classSel, parameters, false )(Empty ())
4134
4235 /** Make a term looks like `globalThis.Predef.MatchFailure` with its symbol. */
43- protected lazy val matchFailureClass : Ctxl [(Term .SynthSel , ClassSymbol )] = resolvePredefMember(" MatchFailure" )
36+ protected lazy val matchFailureClass : Ctxl [(Term .Sel | Term .SynthSel , ClassSymbol )] =
37+ (State .runtimeSymbol.ref().selNoSym(" MatchFailure" , synth= true ), State .matchFailureClsSymbol)
4438
4539 /** Make a pattern looks like `globalThis.Predef.MatchFailure.class`. */
4640 protected def matchFailurePattern (parameters : Opt [List [BlockLocalSymbol ]]): Ctxl [Pattern .ClassLike ] =
4741 val (classRef, classSym) = matchResultClass
48- val classSel = Term .SynthSel (matchResultClass._1 , Ident (" class" ))(S (classSym))
42+ val classSel = Term .SynthSel (classRef , Ident (" class" ))(S (classSym))
4943 Pattern .ClassLike (classSym, classSel, parameters, false )(Empty ())
5044
5145 /** Create a term that selects a method in the `Predef` module. */
0 commit comments