Skip to content

Commit

Permalink
SI-9245 Fresher name in Try and test
Browse files Browse the repository at this point in the history
Fresh name for catcher gets a dollar. "Here, have a dollar."
Test due to retronym demonstrates possible conflict.

Over the lifetime of the universe, surely at least one code
monkey would type in that identifier to catch a banana.
  • Loading branch information
som-snytt committed Jun 7, 2016
1 parent 650fbee commit 3f3a3bb
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/compiler/scala/tools/nsc/ast/parser/TreeBuilder.scala
Expand Up @@ -105,7 +105,7 @@ abstract class TreeBuilder {
def makeCatchFromExpr(catchExpr: Tree): CaseDef = {
val binder = freshTermName()
val pat = Bind(binder, Typed(Ident(nme.WILDCARD), Ident(tpnme.Throwable)))
val catchDef = ValDef(Modifiers(ARTIFACT), freshTermName("catchExpr"), TypeTree(), catchExpr)
val catchDef = ValDef(Modifiers(ARTIFACT), freshTermName("catchExpr$"), TypeTree(), catchExpr)
val catchFn = Ident(catchDef.name)
val body = atPos(catchExpr.pos.makeTransparent)(Block(
List(catchDef),
Expand Down
27 changes: 27 additions & 0 deletions test/files/pos/t9245.scala
@@ -0,0 +1,27 @@

/*
Was:
test/files/pos/t9245.scala:5: error: recursive value catchExpr1 needs type
try {} catch catchExpr1
^
Now:
def catchExpr1: PartialFunction[Throwable,Any] = scala.this.Predef.???;
def test: Any = try {
()
} catch {
case (x$1 @ (_: Throwable)) => {
<artifact> val catchExpr$1: PartialFunction[Throwable,Any] = Test.this.catchExpr1;
if (catchExpr$1.isDefinedAt(x$1))
catchExpr$1.apply(x$1)
else
throw x$1
}
}
*/
trait Test {
def catchExpr1: PartialFunction[Throwable, Any] = ???
def test = {
try {} catch catchExpr1
}
}

0 comments on commit 3f3a3bb

Please sign in to comment.