You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2018/03/09 04:57:35 UTC

[1/2] groovy git commit: Forbid `var` to declare methods

Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X f5f421b71 -> 930508a36


Forbid `var` to declare methods

(cherry picked from commit 9ede855)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/2bfb300e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/2bfb300e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/2bfb300e

Branch: refs/heads/GROOVY_2_6_X
Commit: 2bfb300eec702b3589cf83af0d66378866f84aeb
Parents: f5f421b
Author: sunlan <su...@apache.org>
Authored: Thu Mar 8 16:27:26 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Mar 9 12:57:20 2018 +0800

----------------------------------------------------------------------
 src/antlr/GroovyLexer.g4                        |  2 +-
 .../apache/groovy/parser/antlr4/AstBuilder.java |  5 +++++
 .../groovy/parser/antlr4/SyntaxErrorTest.groovy |  1 +
 .../src/test/resources/fail/Var_02x.groovy      | 20 ++++++++++++++++++++
 4 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/2bfb300e/src/antlr/GroovyLexer.g4
----------------------------------------------------------------------
diff --git a/src/antlr/GroovyLexer.g4 b/src/antlr/GroovyLexer.g4
index 0ae2866..bf855bf 100644
--- a/src/antlr/GroovyLexer.g4
+++ b/src/antlr/GroovyLexer.g4
@@ -347,7 +347,7 @@ IN              : 'in';
 TRAIT           : 'trait';
 THREADSAFE      : 'threadsafe'; // reserved keyword
 
-// Java10 keywords
+// the reserved type name of Java10
 VAR             : 'var';
 
 // ยง3.9 Keywords

http://git-wip-us.apache.org/repos/asf/groovy/blob/2bfb300e/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index bc9a2c5..f1e35d4 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1572,6 +1572,11 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         validateMethodDeclaration(ctx);
 
         ModifierManager modifierManager = createModifierManager(ctx);
+
+        if (modifierManager.contains(VAR)) {
+            throw createParsingFailedException("var cannot be used for method declarations", ctx);
+        }
+
         String methodName = this.visitMethodName(ctx.methodName());
         ClassNode returnType = this.visitReturnType(ctx.returnType());
         Parameter[] parameters = this.visitFormalParameters(ctx.formalParameters());

http://git-wip-us.apache.org/repos/asf/groovy/blob/2bfb300e/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
index 93f741d..a956e4c 100644
--- a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
+++ b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
@@ -214,6 +214,7 @@ class SyntaxErrorTest extends GroovyTestCase {
 
     void "test groovy core - var"() {
         TestUtils.doRunAndShouldFail('fail/Var_01x.groovy');
+        TestUtils.doRunAndShouldFail('fail/Var_02x.groovy');
     }
 
     /**************************************/

http://git-wip-us.apache.org/repos/asf/groovy/blob/2bfb300e/subprojects/parser-antlr4/src/test/resources/fail/Var_02x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/test/resources/fail/Var_02x.groovy b/subprojects/parser-antlr4/src/test/resources/fail/Var_02x.groovy
new file mode 100644
index 0000000..8855299
--- /dev/null
+++ b/subprojects/parser-antlr4/src/test/resources/fail/Var_02x.groovy
@@ -0,0 +1,20 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+var someMethod() {}


[2/2] groovy git commit: Minor refactoring: remove duplicated code of number calculation

Posted by su...@apache.org.
Minor refactoring: remove duplicated code of number calculation

(cherry picked from commit f73d551)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/930508a3
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/930508a3
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/930508a3

Branch: refs/heads/GROOVY_2_6_X
Commit: 930508a366a3118023dea7a85ecf09de5926a480
Parents: 2bfb300
Author: sunlan <su...@apache.org>
Authored: Fri Mar 9 12:54:10 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Mar 9 12:57:27 2018 +0800

----------------------------------------------------------------------
 .../groovy/runtime/dgmimpl/NumberNumberDiv.java | 87 ++++++++++++-------
 .../runtime/dgmimpl/NumberNumberMetaMethod.java | 78 +++++++++++++++++
 .../runtime/dgmimpl/NumberNumberMinus.java      | 91 +++++++++++---------
 .../runtime/dgmimpl/NumberNumberMultiply.java   | 91 +++++++++++---------
 .../runtime/dgmimpl/NumberNumberPlus.java       | 91 +++++++++++---------
 5 files changed, 282 insertions(+), 156 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/930508a3/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
index b20d4fe..443d970 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberDiv.java
@@ -46,51 +46,72 @@ public final class NumberNumberDiv extends NumberNumberMetaMethod {
         return NumberMath.divide(left, right);
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (receiver instanceof Integer) {
-            if (args[0] instanceof Float)
-                return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
 
-            if (args[0] instanceof Double)
-                return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Long) {
-            if (args[0] instanceof Float)
-                return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Float) {
-            if (args[0] instanceof Integer)
-                return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Double) {
-            if (args[0] instanceof Integer)
-                return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
+    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
         return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/930508a3/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
index 1d945fc..7e588cc 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
@@ -58,4 +58,82 @@ public abstract class NumberNumberMetaMethod extends CallSiteAwareMetaMethod {
             math = NumberMath.getMath(receiver,arg);
         }
     }
+
+    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        if (receiver instanceof Integer) {
+            if (args[0] instanceof Integer)
+                return createIntegerInteger(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Long)
+                return createIntegerLong(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Float)
+                return createIntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Double)
+                return createIntegerDouble(site, metaClass, metaMethod, params, receiver, args);
+        }
+
+        if (receiver instanceof Long) {
+            if (args[0] instanceof Integer)
+                return createLongInteger(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Long)
+                return createLongLong(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Float)
+                return createLongFloat(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Double)
+                return createLongDouble(site, metaClass, metaMethod, params, receiver, args);
+        }
+
+        if (receiver instanceof Float) {
+            if (args[0] instanceof Integer)
+                return createFloatInteger(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Long)
+                return createFloatLong(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Float)
+                return createFloatFloat(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Double)
+                return createFloatDouble(site, metaClass, metaMethod, params, receiver, args);
+        }
+
+        if (receiver instanceof Double) {
+            if (args[0] instanceof Integer)
+                return createDoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Long)
+                return createDoubleLong(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Float)
+                return createDoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+
+            if (args[0] instanceof Double)
+                return createDoubleDouble(site, metaClass, metaMethod, params, receiver, args);
+        }
+
+        return createNumberNumber(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public abstract CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
+    public abstract CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args);
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/930508a3/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
index 81fe53d..573634c 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMinus.java
@@ -43,63 +43,72 @@ public final class NumberNumberMinus extends NumberNumberMetaMethod {
         return NumberMath.subtract(left, right);
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (receiver instanceof Integer) {
-            if (args[0] instanceof Integer)
-                return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
 
-            if (args[0] instanceof Long)
-                return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Long) {
-            if (args[0] instanceof Integer)
-                return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Float) {
-            if (args[0] instanceof Integer)
-                return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Double) {
-            if (args[0] instanceof Integer)
-                return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
+    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
         return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/930508a3/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
index 2f170e1..a326515 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMultiply.java
@@ -45,63 +45,72 @@ public final class NumberNumberMultiply extends NumberNumberMetaMethod {
         return NumberMath.multiply(left, right);
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (receiver instanceof Integer) {
-            if (args[0] instanceof Integer)
-                return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
 
-            if (args[0] instanceof Long)
-                return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Long) {
-            if (args[0] instanceof Integer)
-                return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Float) {
-            if (args[0] instanceof Integer)
-                return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
+
+    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Double) {
-            if (args[0] instanceof Integer)
-                return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-            }
+    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
+    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
         return new NumberNumber(site, metaClass, metaMethod, params, receiver, args);
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/930508a3/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
index b5b0761..33e2128 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberPlus.java
@@ -43,63 +43,71 @@ public final class NumberNumberPlus extends NumberNumberMetaMethod {
         return NumberMath.add(left, right);
     }
 
-    public CallSite createPojoCallSite(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
-        if (receiver instanceof Integer) {
-            if (args[0] instanceof Integer)
-                return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createIntegerFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
+    public CallSite createIntegerDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new IntegerDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Long) {
-            if (args[0] instanceof Integer)
-                return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createLongFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
+    public CallSite createLongDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new LongDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Float) {
-            if (args[0] instanceof Integer)
-                return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createFloatFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
+    public CallSite createFloatDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new FloatDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-        if (receiver instanceof Double) {
-            if (args[0] instanceof Integer)
-                return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleInteger(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleInteger(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Long)
-                return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleLong(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleLong(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Float)
-                return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    public CallSite createDoubleFloat(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleFloat(site, metaClass, metaMethod, params, receiver, args);
+    }
 
-            if (args[0] instanceof Double)
-                return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
-        }
+    public CallSite createDoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
+        return new DoubleDouble(site, metaClass, metaMethod, params, receiver, args);
+    }
 
+    public CallSite createNumberNumber(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
         return new NumberNumberCallSite(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]) {
             public Object invoke(Object receiver, Object[] args) {
                 return math.addImpl((Number) receiver, (Number) args[0]);
@@ -111,6 +119,7 @@ public final class NumberNumberPlus extends NumberNumberMetaMethod {
         };
     }
 
+
     private static class DoubleDouble extends NumberNumberCallSite {
         public DoubleDouble(CallSite site, MetaClassImpl metaClass, MetaMethod metaMethod, Class[] params, Object receiver, Object[] args) {
             super(site, metaClass, metaMethod, params, (Number) receiver, (Number) args[0]);