diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2014-03-01 09:34:35 -0500 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2014-03-01 09:34:35 -0500 |
commit | da124b33956f83be8b2ebbb77208c4aecde1c6dc (patch) | |
tree | 93f460f61eac9f6b26493cee43724cd6e4605591 | |
parent | cfac5e9e540434d5d1fc6decc2e6669995473c87 (diff) | |
parent | 6ec0f2f44f74657799b4b215c913a67089110061 (diff) | |
download | scala-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
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 => |