diff options
author | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-07-20 06:22:07 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@epfl.ch> | 2012-07-20 06:22:07 -0700 |
commit | 952cb61108faf1a68e58ee95460e9b3bcad40ea8 (patch) | |
tree | 88ad9adcd429c961b61132390c71670cc314a3f7 /src/compiler | |
parent | 314133f98118d6d2f9f515fcc5aa7a2e7e9a4559 (diff) | |
parent | d06c73c1f381c346b46ca9499fbec8677d3fab5e (diff) | |
download | scala-952cb61108faf1a68e58ee95460e9b3bcad40ea8.tar.gz scala-952cb61108faf1a68e58ee95460e9b3bcad40ea8.tar.bz2 scala-952cb61108faf1a68e58ee95460e9b3bcad40ea8.zip |
Merge pull request #927 from dgruntz/issue/5856
SI-5856 enables use of $this in string interpolation
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 7 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Scanners.scala | 6 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index e0c9631246..cde971085d 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -1169,7 +1169,12 @@ self => if (inPattern) dropAnyBraces(pattern()) else { if (in.token == IDENTIFIER) atPos(in.offset)(Ident(ident())) - else expr() + else if(in.token == LBRACE) expr() + else if(in.token == THIS) { in.nextToken(); atPos(in.offset)(This(tpnme.EMPTY)) } + else { + syntaxErrorOrIncomplete("error in interpolated string: identifier or block expected", true) + EmptyTree + } } } } diff --git a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala index 6ba273b8ea..7ccd6785bb 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Scanners.scala @@ -729,8 +729,12 @@ trait Scanners extends ScannersCommon { next.token = IDENTIFIER next.name = newTermName(cbuf.toString) cbuf.clear() + val idx = next.name.start - kwOffset + if (idx >= 0 && idx < kwArray.length) { + next.token = kwArray(idx) + } } else { - syntaxError("invalid string interpolation") + syntaxError("invalid string interpolation: `$$', `$'ident or `$'BlockExpr expected") } } else { val isUnclosedLiteral = !isUnicodeEscape && (ch == SU || (!multiLine && (ch == CR || ch == LF))) |