summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-23 18:51:08 +0000
committerPaul Phillips <paulp@improving.org>2010-03-23 18:51:08 +0000
commit10be8dc7854ad1c7a21d86e0e3675d5231384aa5 (patch)
tree0f1295a51afdf2373f4f89231ba013d81ab70fc1 /src/library
parentc452268c133dde1d7555473f992545b08d69194f (diff)
downloadscala-10be8dc7854ad1c7a21d86e0e3675d5231384aa5.tar.gz
scala-10be8dc7854ad1c7a21d86e0e3675d5231384aa5.tar.bz2
scala-10be8dc7854ad1c7a21d86e0e3675d5231384aa5.zip
Fix and test case for #3169.
Diffstat (limited to 'src/library')
-rw-r--r--src/library/scala/math/BigDecimal.scala7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/library/scala/math/BigDecimal.scala b/src/library/scala/math/BigDecimal.scala
index 6bd6b33484..bb6965fcdc 100644
--- a/src/library/scala/math/BigDecimal.scala
+++ b/src/library/scala/math/BigDecimal.scala
@@ -29,6 +29,8 @@ object BigDecimal
private val minCached = -512
private val maxCached = 512
+
+ /** Cache ony for defaultMathContext using BigDecimals in a small range. */
private lazy val cache = new Array[BigDecimal](maxCached - minCached + 1)
val defaultMathContext = MathContext.UNLIMITED
@@ -50,12 +52,13 @@ object BigDecimal
*/
def apply(i: Int): BigDecimal = apply(i, defaultMathContext)
def apply(i: Int, mc: MathContext): BigDecimal =
- if (minCached <= i && i <= maxCached) {
+ if (mc == defaultMathContext && minCached <= i && i <= maxCached) {
val offset = i - minCached
var n = cache(offset)
if (n eq null) { n = new BigDecimal(BigDec.valueOf(i), mc); cache(offset) = n }
n
- } else new BigDecimal(BigDec.valueOf(i), mc)
+ }
+ else new BigDecimal(BigDec.valueOf(i), mc)
/** Constructs a <code>BigDecimal</code> whose value is equal to that of the
* specified long value.