@@ -13,21 +13,23 @@ case object ExplicitCondExprAssign extends Stage:
13
13
def nullifies : Set [Stage ] = Set (DropUnreferencedAnons )
14
14
15
15
def transform (designDB : DB )(using MemberGetSet , CompilerOptions ): DB =
16
- var headers = List .empty[DFConditional .Header ]
17
16
extension (ch : DFConditional .Header )
18
17
// recursive call to patch conditional block chains
19
18
private def patchChains (headerVar : DFVal , op : DFNet .Op ): List [(DFMember , Patch )] =
20
19
// changing type of header to unit, since the expression is now a statement
21
- headers = ch :: headers
20
+ val headerPatch = ch -> Patch .Replace (
21
+ ch.updateDFType(DFUnit ),
22
+ Patch .Replace .Config .FullReplacement
23
+ )
22
24
val cbChain = getSet.designDB.conditionalChainTable(ch)
23
25
val lastMembers = cbChain.map(_.members(MemberView .Folded ).last)
24
- lastMembers.flatMap {
26
+ headerPatch :: lastMembers.flatMap {
25
27
case ident @ Ident (underlying : DFConditional .Header ) =>
26
28
ident -> Patch .Remove () :: underlying.patchChains(headerVar, op)
27
29
case ident @ Ident (underlying) =>
28
30
val assignDsn = new MetaDesign (
29
31
ident,
30
- Patch .Add .Config .After
32
+ Patch .Add .Config .ReplaceWithLast ( Patch . Replace . Config . FullReplacement )
31
33
):
32
34
(op : @ unchecked) match
33
35
case DFNet .Op .Assignment =>
@@ -39,7 +41,7 @@ case object ExplicitCondExprAssign extends Stage:
39
41
headerVar.asVarAny.nbassign(underlying.asValAny)(using
40
42
dfc.setMetaAnon(ident.meta.position)
41
43
)
42
- ident -> Patch . Remove () :: assignDsn.patch :: Nil
44
+ Some ( assignDsn.patch)
43
45
case _ => ??? // not possible
44
46
}
45
47
end patchChains
@@ -51,7 +53,7 @@ case object ExplicitCondExprAssign extends Stage:
51
53
val removeNetPatch = net -> Patch .Remove ()
52
54
removeNetPatch :: ch.patchChains(headerVar, op)
53
55
end extension
54
- val patchList1 = designDB.members.view
56
+ val patchList = designDB.members.view
55
57
// collect all the assignments from anonymous conditionals
56
58
.flatMap {
57
59
case net @ DFNet .Assignment (toVal, header : DFConditional .Header ) if header.isAnonymous =>
@@ -61,15 +63,7 @@ case object ExplicitCondExprAssign extends Stage:
61
63
header.patchChainsNet(toVal, net, DFNet .Op .Assignment )
62
64
case _ => Nil
63
65
}.toList
64
- val patchList2 = headers.map { h =>
65
- h -> Patch .Replace (
66
- h.updateDFType(DFUnit ),
67
- Patch .Replace .Config .FullReplacement
68
- )
69
- }
70
- designDB
71
- .patch(patchList1)
72
- .patch(patchList2)
66
+ designDB.patch(patchList)
73
67
end transform
74
68
end ExplicitCondExprAssign
75
69
0 commit comments