groovy git commit: Refine the fix of GROOVY-8474: support primitive type

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

groovy git commit: Refine the fix of GROOVY-8474: support primitive type

Daniel.Sun
Repository: groovy
Updated Branches:
  refs/heads/master 221c13988 -> 05866b3ac


Refine the fix of GROOVY-8474: support primitive type


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

Branch: refs/heads/master
Commit: 05866b3ace50d42a6db173febde4199a8cfb8776
Parents: 221c139
Author: sunlan <[hidden email]>
Authored: Fri Feb 9 09:01:32 2018 +0800
Committer: sunlan <[hidden email]>
Committed: Fri Feb 9 09:01:32 2018 +0800

----------------------------------------------------------------------
 .../groovy/classgen/AsmClassGenerator.java      |   7 +-
 src/test/groovy/bugs/Groovy8474Bug.groovy       | 128 +++++++++++++++++++
 2 files changed, 134 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/05866b3a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index e7cb2fe..8123e83 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -1103,8 +1103,13 @@ public class AsmClassGenerator extends ClassGenerator {
             throw new RuntimeParserException("Cannot access private field[" + fieldName + "] of " + classNode.getName() + "'s super class", expression);
         }
 
+        OperandStack operandStack = controller.getOperandStack();
+        operandStack.doAsType(fieldNode.getType());
+
         mv.visitVarInsn(ALOAD, 0);
-        mv.visitInsn(SWAP);
+        operandStack.push(classNode);
+
+        operandStack.swap();
 
         String owner = BytecodeHelper.getClassInternalName(classNode.getSuperClass().getName());
         String desc = BytecodeHelper.getTypeDescription(fieldNode.getType());

http://git-wip-us.apache.org/repos/asf/groovy/blob/05866b3a/src/test/groovy/bugs/Groovy8474Bug.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/bugs/Groovy8474Bug.groovy b/src/test/groovy/bugs/Groovy8474Bug.groovy
index 7a6f397..ab64c75 100644
--- a/src/test/groovy/bugs/Groovy8474Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8474Bug.groovy
@@ -104,6 +104,134 @@ class Groovy8474Bug extends GroovyTestCase {
         '''
     }
 
+    void testSettingSuperProperty5() {
+        assertScript '''
+            class T {
+              Integer group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = 1
+              }
+            }
+            
+            assert 1 == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty6() {
+        assertScript '''
+            class T {
+              Long group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = 1
+              }
+            }
+            
+            assert 1 == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty7() {
+        assertScript '''
+            class T {
+              Long group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = Long.MAX_VALUE
+              }
+            }
+            
+            assert Long.MAX_VALUE == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty8() {
+        assertScript '''
+            class T {
+              int group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = Integer.MAX_VALUE
+              }
+            }
+            
+            assert Integer.MAX_VALUE == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty9() {
+        assertScript '''
+            class T {
+              long group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = Long.MAX_VALUE
+              }
+            }
+            
+            assert Long.MAX_VALUE == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty10() {
+        assertScript '''
+            class T {
+              int group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = 1
+              }
+            }
+            
+            assert 1 == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty11() {
+        assertScript '''
+            class T {
+              long group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = 123456789123456789
+              }
+            }
+            
+            assert 123456789123456789 == new S().group
+        '''
+    }
+
+    void testSettingSuperProperty12() {
+        assertScript '''
+            class T {
+              boolean group
+            }
+            
+            class S extends T {
+              S() {
+                super.group = true
+              }
+            }
+            
+            assert true == new S().group
+        '''
+    }
+
     void testSettingSuperProtectedField() {
         assertScript '''
             class T {

Daniel Sun
Apache Groovy committer

Blog: http://blog.sunlan.me
Twitter: @daniel_sun