Skip to content

Commit 83b6cf2

Browse files
author
EnzeXing
committed
Address comments and add tests
1 parent 3842538 commit 83b6cf2

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

compiler/src/dotty/tools/dotc/transform/init/Objects.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class Objects(using Context @constructorOnly):
151151
def hasVar(sym: Symbol)(using Heap.MutableData): Boolean = Heap.containsVal(this, sym)
152152

153153
def initVal(field: Symbol, value: Value)(using Context, Heap.MutableData) = log("Initialize " + field.show + " = " + value + " for " + this, printer) {
154-
assert(field.is(Flags.Param) || !field.is(Flags.Mutable), "Field is mutable: " + field.show)
154+
assert((field.is(Flags.Param) && field.is(Flags.JavaDefined)) || !field.is(Flags.Mutable), "Field is mutable: " + field.show + ", class = " + klass)
155155
Heap.writeJoinVal(this, field, value)
156156
}
157157

@@ -421,7 +421,7 @@ class Objects(using Context @constructorOnly):
421421
def hasVar(sym: Symbol)(using EnvMap.EnvMapMutableData): Boolean = EnvMap.containsVal(this, sym)
422422

423423
def initVal(field: Symbol, value: Value)(using Context, EnvMap.EnvMapMutableData) = log("Initialize " + field.show + " = " + value + " for " + this, printer) {
424-
assert(field.is(Flags.Param) || !field.is(Flags.Mutable), "Field is mutable: " + field.show)
424+
assert((field.is(Flags.Param) && field.is(Flags.JavaDefined)) || !field.is(Flags.Mutable), "Field is mutable: " + field.show)
425425
EnvMap.writeJoinVal(this, field, value)
426426
}
427427

@@ -1804,7 +1804,7 @@ class Objects(using Context @constructorOnly):
18041804
val seqPats = pats.drop(selectors.length - 1)
18051805
val toSeqRes = call(resToMatch, selectors.last, Nil, resultTp, superType = NoType, needResolve = true)
18061806
val toSeqResTp = resultTp.memberInfo(selectors.last).finalResultType
1807-
evalSeqPatterns(toSeqRes, toSeqResTp, elemTp, seqPats)
1807+
evalSeqPatterns(toSeqRes, toSeqResTp, elemTp, seqPats) // passing elemTp to evalSeqPatterns that does not exist?
18081808
end if
18091809

18101810
else
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
trait Node {
2+
val prefix = 5
3+
val child = Array(3)
4+
}
5+
6+
class SpecialNode extends Node
7+
8+
class Group extends Node
9+
10+
class C extends Node
11+
12+
object Elem {
13+
def apply(prefix: Int, children: Int*) = new C
14+
def unapplySeq(n: Node) = n match {
15+
case _: SpecialNode | _: Group => None
16+
case _ => Some((n.prefix, n.child.toSeq))
17+
}
18+
}
19+
20+
object O {
21+
def updateNode(node: Node): Node =
22+
node match {
23+
case Elem(prefix, children @ _*) =>
24+
Elem(prefix, children: _*)
25+
case other => other
26+
}
27+
28+
val a = updateNode(new Group)
29+
}

0 commit comments

Comments
 (0)