Details
-
Type:
Sub-task
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: 3.0
-
Component/s: None
-
Labels:None
-
Environment:N/A
-
Testcase included:yes
-
Patch Submitted:Yes
-
Number of attachments :
Description
groovy:000> 1000 * 1000000000 ===> 1000000000000
More info in mail thread http://www.nabble.com/Patch:-Dynamic-type-promotion-td22976282.html
Patch attached. Diffstat:
main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java | 23 - main/org/codehaus/groovy/runtime/InvokerHelper.java | 20 - main/org/codehaus/groovy/runtime/typehandling/BigIntegerMath.java | 26 + main/org/codehaus/groovy/runtime/typehandling/IntegerMath.java | 70 ++++ main/org/codehaus/groovy/runtime/typehandling/LongMath.java | 85 ++++-- main/org/codehaus/groovy/runtime/typehandling/NumberMath.java | 90 ++++-- test/groovy/operator/IntegerOperatorsTest.groovy | 141 +++++++++- 7 files changed, 369 insertions(+), 86 deletions(-)
I'll also keep an updated patch available at http://dl.getdropbox.com/u/283098/patches/groovy_dynamic_type_promotion.patch
Here's an overview of the patch:
- Added test cases to IntegerOperatorsTest.groovy
- Modified NumberMath toBigInteger and toBigDecimal methods to call into DefaultGroovyMethods versions
- Modified IntegerMath to support dynamic type promotion for abs, add, subtract, multiply, unary minus and left shift.
- Modified BigIntegerMath to support left shift and right shift. It does not support unsigned right shift (>>>).
- Modified LongMath to support dynamic type promotion for abs, add, subtract, multiply, unary minus and left shift. Also changed a few "new Long" to "Long.valueOf" since it can be faster.
- Modified DefaultGroovyMethods.abs to call into NumberMath. Optimized toBigInteger so that it doesn't do unnecessary string conversions. Tweaked a few comments.
- Modified InvokerHelper.unaryMinus. Tweaked some valueOf.
- Modified semantics for the shift operators. It's now type coerced/promoted the same as other binary operators. Negative shifts are not allowed.
Activity
Guillaume Laforge
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Fix Version/s | 1.7-beta-1 [ 14014 ] | |
| Fix Version/s | 1.6.2 [ 15151 ] |
Guillaume Laforge
made changes -
| Fix Version/s | 1.6.3 [ 15251 ] | |
| Fix Version/s | 1.6.2 [ 15151 ] |
Guillaume Laforge
made changes -
| Fix Version/s | 1.6.3 [ 15251 ] |
Guillaume Laforge
made changes -
| Fix Version/s | 1.7-beta-1 [ 14014 ] | |
| Fix Version/s | 1.7-beta-x [ 15538 ] |
blackdrag blackdrag
made changes -
| Fix Version/s | 1.8.x [ 15750 ] | |
| Fix Version/s | 2.x [ 17013 ] | |
| Fix Version/s | 1.7.x [ 15538 ] |
blackdrag blackdrag
made changes -
| Parent | GROOVY-2503 [ 61571 ] | |
| Issue Type | Improvement [ 4 ] | Sub-task [ 7 ] |
blackdrag blackdrag
made changes -
| Fix Version/s | 3.0 [ 13489 ] | |
| Fix Version/s | 1.8.x [ 15750 ] | |
| Fix Version/s | 2.x [ 17013 ] |
Is this something for 3.0 or is it not relevant any longer and should be closed?