Skip to content

Commit 9c850e3

Browse files
Merge pull request #10333 from dotty-staging/fix-#9632
Fix #9632: Don't use inDefScopeBraces for staged blocks
2 parents 35f123a + 6f25a8f commit 9c850e3

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

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

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,9 @@ object Parsers {
15341534
def refinedTypeRest(t: Tree): Tree = {
15351535
argumentStart()
15361536
if (in.isNestedStart)
1537-
refinedTypeRest(atSpan(startOffset(t)) { RefinedTypeTree(rejectWildcardType(t), refinement()) })
1537+
refinedTypeRest(atSpan(startOffset(t)) {
1538+
RefinedTypeTree(rejectWildcardType(t), refinement(indentOK = true))
1539+
})
15381540
else t
15391541
}
15401542

@@ -1566,7 +1568,10 @@ object Parsers {
15661568
else t
15671569

15681570
/** The block in a quote or splice */
1569-
def stagedBlock() = inDefScopeBraces(block(simplify = true))
1571+
def stagedBlock() =
1572+
val saved = lastStatOffset
1573+
try inBraces(block(simplify = true))
1574+
finally lastStatOffset = saved
15701575

15711576
/** SimpleEpxr ::= spliceId | ‘$’ ‘{’ Block ‘}’)
15721577
* SimpleType ::= spliceId | ‘$’ ‘{’ Block ‘}’)
@@ -1628,7 +1633,7 @@ object Parsers {
16281633
makeTupleOrParens(inParens(argTypes(namedOK = false, wildOK = true)))
16291634
}
16301635
else if in.token == LBRACE then
1631-
atSpan(in.offset) { RefinedTypeTree(EmptyTree, refinement()) }
1636+
atSpan(in.offset) { RefinedTypeTree(EmptyTree, refinement(indentOK = false)) }
16321637
else if (isSplice)
16331638
splice(isType = true)
16341639
else
@@ -1772,8 +1777,11 @@ object Parsers {
17721777

17731778
/** Refinement ::= `{' RefineStatSeq `}'
17741779
*/
1775-
def refinement(): List[Tree] =
1776-
inBracesOrIndented(refineStatSeq(), rewriteWithColon = true)
1780+
def refinement(indentOK: Boolean): List[Tree] =
1781+
if indentOK then
1782+
inBracesOrIndented(refineStatSeq(), rewriteWithColon = true)
1783+
else
1784+
inBraces(refineStatSeq())
17771785

17781786
/** TypeBounds ::= [`>:' Type] [`<:' Type]
17791787
*/

compiler/test/dotty/tools/dotc/CompilationTests.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ class CompilationTests {
6666

6767
aggregateTests(
6868
compileFile("tests/rewrites/rewrites.scala", scala2CompatMode.and("-rewrite", "-indent")),
69-
compileFile("tests/rewrites/i8982.scala", defaultOptions.and("-indent", "-rewrite"))
69+
compileFile("tests/rewrites/i8982.scala", defaultOptions.and("-indent", "-rewrite")),
70+
compileFile("tests/rewrites/i9632.scala", defaultOptions.and("-indent", "-rewrite"))
7071
).checkRewrites()
7172
}
7273

tests/rewrites/i9632.scala

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
def f(using scala.quoted.QuoteContext) =
2+
'{
3+
val x = ${
4+
???
5+
}
6+
x
7+
}
8+
9+
type HasPath = {
10+
def getPath: String
11+
}
12+
type HashPath2 = Any {
13+
def getPath: String
14+
}
15+
val x = new {
16+
val y = 1
17+
}
18+
val y = new AnyRef {
19+
val y = 1
20+
}
21+

0 commit comments

Comments
 (0)