summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-03-01 09:34:35 -0500
committerEugene Burmako <xeno.by@gmail.com>2014-03-01 09:34:35 -0500
commitda124b33956f83be8b2ebbb77208c4aecde1c6dc (patch)
tree93f460f61eac9f6b26493cee43724cd6e4605591
parentcfac5e9e540434d5d1fc6decc2e6669995473c87 (diff)
parent6ec0f2f44f74657799b4b215c913a67089110061 (diff)
downloadscala-da124b33956f83be8b2ebbb77208c4aecde1c6dc.tar.gz
scala-da124b33956f83be8b2ebbb77208c4aecde1c6dc.tar.bz2
scala-da124b33956f83be8b2ebbb77208c4aecde1c6dc.zip
Merge pull request #3596 from densh/si/8333
SI-8333 can't use modifiers if class is in a block
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala8
-rw-r--r--src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala2
-rw-r--r--test/files/scalacheck/quasiquotes/DefinitionConstructionProps.scala6
3 files changed, 11 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 3542fe5945..9e631febee 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -3096,10 +3096,6 @@ self =>
stats ++= importClause()
acceptStatSepOpt()
}
- else if (isExprIntro) {
- stats += statement(InBlock)
- if (!isCaseDefEnd) acceptStatSep()
- }
else if (isDefIntro || isLocalModifier || isAnnotation) {
if (in.token == IMPLICIT) {
val start = in.skipToken()
@@ -3110,6 +3106,10 @@ self =>
}
acceptStatSepOpt()
}
+ else if (isExprIntro) {
+ stats += statement(InBlock)
+ if (!isCaseDefEnd) acceptStatSep()
+ }
else if (isStatSep) {
in.nextToken()
}
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
index b22e0b0e82..af17ae9ac0 100644
--- a/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
+++ b/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
@@ -118,6 +118,8 @@ trait Parsers { self: Quasiquotes =>
override def isTemplateIntro: Boolean = super.isTemplateIntro || (isHole && lookingAhead { isTemplateIntro })
+ override def isDefIntro: Boolean = super.isDefIntro || (isHole && lookingAhead { isDefIntro })
+
override def isDclIntro: Boolean = super.isDclIntro || (isHole && lookingAhead { isDclIntro })
override def isStatSep(token: Int) = token == EOF || super.isStatSep(token)
diff --git a/test/files/scalacheck/quasiquotes/DefinitionConstructionProps.scala b/test/files/scalacheck/quasiquotes/DefinitionConstructionProps.scala
index fdb0d83277..c6ad453c45 100644
--- a/test/files/scalacheck/quasiquotes/DefinitionConstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/DefinitionConstructionProps.scala
@@ -9,7 +9,7 @@ object DefinitionConstructionProps
with ValDefConstruction
with PatDefConstruction
with DefConstruction
- with PackageConstruction
+ with PackageConstruction
with ImportConstruction {
val x: Tree = q"val x: Int"
@@ -81,6 +81,10 @@ trait ClassConstruction { self: QuasiquoteProperties =>
assertEqAst(q" class C($privx)", " class C(x: Int) ")
assertEqAst(q"case class C($privx)", "case class C(private[this] val x: Int)")
}
+
+ property("SI-8333") = test {
+ assertEqAst(q"{ $NoMods class C }", "{ class C }")
+ }
}
trait TraitConstruction { self: QuasiquoteProperties =>