Skip to content

Commit 161ec94

Browse files
Merge branch 'master' into tasty-extractors
2 parents a5eec26 + fabd65d commit 161ec94

File tree

9 files changed

+62
-20
lines changed

9 files changed

+62
-20
lines changed

compiler/src/dotty/tools/dotc/ast/untpd.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
112112

113113
case class Protected() extends Mod(Flags.Protected)
114114

115-
case class Val() extends Mod(Flags.EmptyFlags)
116-
117115
case class Var() extends Mod(Flags.Mutable)
118116

119117
case class Implicit() extends Mod(Flags.ImplicitCommon)
@@ -132,8 +130,6 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
132130

133131
case class Inline() extends Mod(Flags.Inline)
134132

135-
case class Type() extends Mod(Flags.EmptyFlags)
136-
137133
case class Enum() extends Mod(Flags.EmptyFlags)
138134

139135
case class EnumCase() extends Mod(Flags.EmptyFlags)

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1879,15 +1879,18 @@ object Parsers {
18791879
mods =
18801880
atPos(start, in.offset) {
18811881
if (in.token == VAL) {
1882-
val mod = atPos(in.skipToken()) { Mod.Val() }
1883-
mods.withAddedMod(mod)
1884-
} else if (in.token == VAR) {
1882+
in.nextToken()
1883+
mods
1884+
}
1885+
else if (in.token == VAR) {
18851886
val mod = atPos(in.skipToken()) { Mod.Var() }
18861887
addMod(mods, mod)
1887-
} else {
1888+
}
1889+
else {
18881890
if (!(mods.flags &~ (ParamAccessor | Inline)).isEmpty)
18891891
syntaxError("`val' or `var' expected")
1890-
if (firstClauseOfCaseClass) mods else mods | PrivateLocal
1892+
if (firstClauseOfCaseClass) mods
1893+
else mods | PrivateLocal
18911894
}
18921895
}
18931896
}
@@ -2038,9 +2041,8 @@ object Parsers {
20382041
*/
20392042
def defOrDcl(start: Int, mods: Modifiers): Tree = in.token match {
20402043
case VAL =>
2041-
val mod = atPos(in.skipToken()) { Mod.Val() }
2042-
val mods1 = mods.withAddedMod(mod)
2043-
patDefOrDcl(start, mods1)
2044+
in.nextToken()
2045+
patDefOrDcl(start, mods)
20442046
case VAR =>
20452047
val mod = atPos(in.skipToken()) { Mod.Var() }
20462048
val mod1 = addMod(mods, mod)

compiler/src/dotty/tools/dotc/transform/Splicer.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ object Splicer {
5151
* - Other parameters are lifted to quoted.Types.TreeExpr (may reference a binding)
5252
*/
5353
private def getLiftedArgs(call: Tree, bindings: List[Tree])(implicit ctx: Context): List[Any] = {
54-
val bindMap = bindings.map {
55-
case vdef: ValOrDefDef => (vdef.rhs, ref(vdef.symbol).withPos(vdef.rhs.pos))
54+
val bindMap = bindings.collect {
55+
case vdef: ValDef => (vdef.rhs, ref(vdef.symbol).withPos(vdef.rhs.pos))
5656
}.toMap
5757
def allArgs(call: Tree, acc: List[List[Tree]]): List[List[Tree]] = call match {
5858
case call: Apply => allArgs(call.fun, call.args :: acc)

compiler/test/dotty/tools/dotc/parsing/ModifiersParsingTest.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,16 @@ class ModifiersParsingTest {
8282
assert(source.firstConstrValDef.modifiers == List(Mod.Var()))
8383

8484
source = "class A(val a: Int)"
85-
assert(source.firstConstrValDef.modifiers == List(Mod.Val()))
85+
assert(source.firstConstrValDef.modifiers == List())
8686

8787
source = "class A(private val a: Int)"
88-
assert(source.firstConstrValDef.modifiers == List(Mod.Private(), Mod.Val()))
88+
assert(source.firstConstrValDef.modifiers == List(Mod.Private()))
8989

9090
source = "class A(protected var a: Int)"
9191
assert(source.firstConstrValDef.modifiers == List(Mod.Protected(), Mod.Var()))
9292

9393
source = "class A(protected implicit val a: Int)"
94-
assert(source.firstConstrValDef.modifiers == List(Mod.Protected(), Mod.Implicit(), Mod.Val()))
94+
assert(source.firstConstrValDef.modifiers == List(Mod.Protected(), Mod.Implicit()))
9595

9696
source = "class A[T]"
9797
assert(source.firstTypeParam.modifiers == List())
@@ -125,8 +125,8 @@ class ModifiersParsingTest {
125125
""".stripMargin
126126

127127
assert(source.field("a").modifiers == List(Mod.Lazy(), Mod.Var()))
128-
assert(source.field("b").modifiers == List(Mod.Lazy(), Mod.Private(), Mod.Val()))
129-
assert(source.field("c").modifiers == List(Mod.Final(), Mod.Val()))
128+
assert(source.field("b").modifiers == List(Mod.Lazy(), Mod.Private()))
129+
assert(source.field("c").modifiers == List(Mod.Final()))
130130
assert(source.field("f").modifiers == List(Mod.Abstract(), Mod.Override()))
131131
assert(source.field("g").modifiers == List(Mod.Inline()))
132132
}
@@ -146,7 +146,7 @@ class ModifiersParsingTest {
146146

147147
@Test def blockDef = {
148148
var source: Tree = "implicit val x : A = ???"
149-
assert(source.modifiers == List(Mod.Implicit(), Mod.Val()))
149+
assert(source.modifiers == List(Mod.Implicit()))
150150

151151
source = "implicit var x : A = ???"
152152
assert(source.modifiers == List(Mod.Implicit(), Mod.Var()))

tests/run/quote-impure-by-name.check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1 + {Index.zero[String("bar"), scala.Tuple2[String("baz"), scala.Unit]]}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import scala.quoted._
2+
3+
import dotty.tools.dotc.quoted.Toolbox._
4+
5+
class Index[K, Keys](val index: String) extends AnyVal {
6+
override def toString: String = index
7+
}
8+
object Index {
9+
10+
implicit def zero[K, T]: Index[K, (K, T)] = new Index("0")
11+
12+
implicit inline def succ[K, H, T](implicit prev: => Index[K, T]): Index[K, (H, T)] = ~succImpl('(prev))('[K], '[H], '[T])
13+
14+
def succImpl[K, H, T](prev: Expr[Index[K, T]])(implicit k: Type[K], h: Type[H], t: Type[T]): Expr[Index[K, (H, T)]] = {
15+
val value = s"1 + {${prev.show}}"
16+
'(new Index(~value.toExpr))
17+
}
18+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
object Test {
2+
3+
def main(args: Array[String]): Unit = {
4+
println(Index.succ["bar", "foo", ("bar", ("baz", Unit))])
5+
}
6+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import scala.quoted._
2+
3+
class Index[K, Keys](val index: Int) extends AnyVal
4+
object Index {
5+
6+
implicit def zero[K, T]: Index[K, (K, T)] = new Index(0)
7+
8+
implicit inline def succ[K, H, T](implicit prev: => Index[K, T]): Index[K, (H, T)] = ~succImpl('[K], '[H], '[T])
9+
10+
def succImpl[K, H, T](implicit k: Type[K], h: Type[H], t: Type[T]): Expr[Index[K, (H, T)]] = {
11+
'(new Index(0))
12+
}
13+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
object Test {
2+
3+
def main(args: Array[String]): Unit = {
4+
Index.succ["bar", "foo", ("bar", ("baz", Unit))]
5+
}
6+
}

0 commit comments

Comments
 (0)