Minor refactoring: remove duplicated code of 
`StaticTypesBinaryExpressionMultiTypeDispatcher`

(cherry picked from commit ea81620)

(cherry picked from commit fb2a021)


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

Branch: refs/heads/GROOVY_2_5_X
Commit: 63e7d90d472d5b18c1301616fb2c9c7144ff9b94
Parents: ed6e5a1
Author: Daniel Sun <realblue...@hotmail.com>
Authored: Wed Feb 7 22:33:18 2018 +0800
Committer: Daniel Sun <realblue...@hotmail.com>
Committed: Wed Feb 7 23:03:41 2018 +0800

----------------------------------------------------------------------
 ...ypesBinaryExpressionMultiTypeDispatcher.java | 42 +++++++-------------
 1 file changed, 15 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/63e7d90d/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 58d9562..2c4ba0b 100644
--- 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -109,41 +109,29 @@ public class 
StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres
         ClassNode top = operandStack.getTopOperand();
         if (ClassHelper.isPrimitiveType(top) && 
(ClassHelper.isNumberType(top)||char_TYPE.equals(top))) {
             MethodVisitor mv = controller.getMethodVisitor();
-            if (WideningCategories.isIntCategory(top) || 
char_TYPE.equals(top)) {
-                mv.visitInsn(ICONST_1);
-            } else if (long_TYPE.equals(top)) {
-                mv.visitInsn(LCONST_1);
-            } else if (float_TYPE.equals(top)) {
-                mv.visitInsn(FCONST_1);
-            } else if (double_TYPE.equals(top)) {
-                mv.visitInsn(DCONST_1);
-            }
+            visitInsnByType(top, mv, ICONST_1, LCONST_1, FCONST_1, DCONST_1);
             if ("next".equals(method)) {
-                if (WideningCategories.isIntCategory(top) || 
char_TYPE.equals(top)) {
-                    mv.visitInsn(IADD);
-                } else if (long_TYPE.equals(top)) {
-                    mv.visitInsn(LADD);
-                } else if (float_TYPE.equals(top)) {
-                    mv.visitInsn(FADD);
-                } else if (double_TYPE.equals(top)) {
-                    mv.visitInsn(DADD);
-                }
+                visitInsnByType(top, mv, IADD, LADD, FADD, DADD);
             } else {
-                if (WideningCategories.isIntCategory(top) || 
char_TYPE.equals(top)) {
-                    mv.visitInsn(ISUB);
-                } else if (long_TYPE.equals(top)) {
-                    mv.visitInsn(LSUB);
-                } else if (float_TYPE.equals(top)) {
-                    mv.visitInsn(FSUB);
-                } else if (double_TYPE.equals(top)) {
-                    mv.visitInsn(DSUB);
-                }
+                visitInsnByType(top, mv, ISUB, LSUB, FSUB, DSUB);
             }
             return;
         }
         super.writePostOrPrefixMethod(op, method, expression, orig);
     }
 
+    private static void visitInsnByType(ClassNode top, MethodVisitor mv, int 
iInsn, int lInsn, int fInsn, int dInsn) {
+        if (WideningCategories.isIntCategory(top) || char_TYPE.equals(top)) {
+            mv.visitInsn(iInsn);
+        } else if (long_TYPE.equals(top)) {
+            mv.visitInsn(lInsn);
+        } else if (float_TYPE.equals(top)) {
+            mv.visitInsn(fInsn);
+        } else if (double_TYPE.equals(top)) {
+            mv.visitInsn(dInsn);
+        }
+    }
+
     @Override
     public void evaluateEqual(final BinaryExpression expression, final boolean 
defineVariable) {
         if (!defineVariable) {

Reply via email to