summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2012-02-22 23:05:26 +0100
committerMartin Odersky <odersky@gmail.com>2012-02-22 23:05:26 +0100
commit4eae7511a297b9d51e1aea2da38c5dacf786efa0 (patch)
tree9b57d4b39e3e76e5ba42be4e7f679a02a2f2befc /src
parentd604417bac9a583048d750f627c2de5f8e46424f (diff)
downloadscala-4eae7511a297b9d51e1aea2da38c5dacf786efa0.tar.gz
scala-4eae7511a297b9d51e1aea2da38c5dacf786efa0.tar.bz2
scala-4eae7511a297b9d51e1aea2da38c5dacf786efa0.zip
Compiler now ready to accept value classes in standard library. Time for a new STARR!
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala2
-rw-r--r--src/library/scala/runtime/StringAdd.scala7
-rw-r--r--src/library/scala/runtime/StringFormat.scala10
3 files changed, 17 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 5207fe8331..687c325760 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -103,7 +103,7 @@ trait Namers extends MethodSynthesis {
def enclosingNamerWithScope(scope: Scope) = {
var cx = context
while (cx != NoContext && cx.scope != scope) cx = cx.outer
- if (cx == context) thisNamer
+ if (cx == NoContext || cx == context) thisNamer
else newNamer(cx)
}
diff --git a/src/library/scala/runtime/StringAdd.scala b/src/library/scala/runtime/StringAdd.scala
index a1256c3f3b..a7e78ea9a3 100644
--- a/src/library/scala/runtime/StringAdd.scala
+++ b/src/library/scala/runtime/StringAdd.scala
@@ -8,8 +8,15 @@
package scala.runtime
+/** A wrapper class that adds string concatenation `+` to any value */
final class StringAdd(val self: Any) {
+ // Note: The implicit conversion from Any to StringAdd is one of two
+ // implicit conversions from Any to AnyRef in Predef. It is important to have at least
+ // two such conversions, so that silent conversions from value types to AnyRef
+ // are avoided. If StringFormat should become a value class, another
+ // implicit conversion from Any to AnyRef has to be introduced in Predef
+
def +(other: String) = String.valueOf(self) + other
}
diff --git a/src/library/scala/runtime/StringFormat.scala b/src/library/scala/runtime/StringFormat.scala
index 94bba4043c..1f0183afbb 100644
--- a/src/library/scala/runtime/StringFormat.scala
+++ b/src/library/scala/runtime/StringFormat.scala
@@ -8,7 +8,15 @@
package scala.runtime
-final class StringFormat(val self: Any) extends AnyVal {
+/** A wrapper class that adds a `formatted` operation to any value
+ */
+final class StringFormat(val self: Any) {
+
+ // Note: The implicit conversion from Any to StringFormat is one of two
+ // implicit conversions from Any to AnyRef in Predef. It is important to have at least
+ // two such conversions, so that silent conversions from value types to AnyRef
+ // are avoided. If StringFormat should become a value class, another
+ // implicit conversion from Any to AnyRef has to be introduced in Predef
/** Returns string formatted according to given `format` string.
* Format strings are as for `String.format`