groovy-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sh...@apache.org
Subject [2/2] groovy git commit: GROOVY-8074: Statically compiled dot property accesses instance property instead of Map property (closes #539)
Date Thu, 11 May 2017 06:07:05 GMT
GROOVY-8074: Statically compiled dot property accesses instance property instead of Map property
(closes #539)


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

Branch: refs/heads/master
Commit: 2989bfcae0c9505b715c1313425ce86763b0a0ce
Parents: 70a4847
Author: Shil Sinha <shils@apache.org>
Authored: Sun May 7 14:47:19 2017 -0400
Committer: Shil Sinha <shils@apache.org>
Committed: Thu May 11 02:00:13 2017 -0400

----------------------------------------------------------------------
 .../asm/sc/StaticTypesCallSiteWriter.java       | 26 +++++++++-----------
 ...ArraysAndCollectionsStaticCompileTest.groovy | 12 +++++++++
 2 files changed, 24 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/2989bfca/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index d77316a..d558f9d 100644
--- a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@ -137,6 +137,15 @@ public class StaticTypesCallSiteWriter extends CallSiteWriter implements
Opcodes
             expr.visit(controller.getAcg());
             return;
         }
+
+        boolean isStaticProperty = receiver instanceof ClassExpression
+                && (receiverType.isDerivedFrom(receiver.getType()) || receiverType.implementsInterface(receiver.getType()));
+
+        if (!isStaticProperty && (receiverType.implementsInterface(MAP_TYPE) || MAP_TYPE.equals(receiverType)))
{
+            // for maps, replace map.foo with map.get('foo')
+            writeMapDotProperty(receiver, methodName, mv, safe);
+            return;
+        }
         if (makeGetPropertyWithGetter(receiver, receiverType, methodName, safe, implicitThis))
return;
         if (makeGetField(receiver, receiverType, methodName, safe, implicitThis, samePackages(receiverType.getPackageName(),
classNode.getPackageName()))) return;
         if (receiverType.isEnum()) {
@@ -211,22 +220,11 @@ public class StaticTypesCallSiteWriter extends CallSiteWriter implements
Opcodes
             }
         }
 
-        boolean isStaticProperty = receiver instanceof ClassExpression
-                && (receiverType.isDerivedFrom(receiver.getType()) || receiverType.implementsInterface(receiver.getType()));
-
-        if (!isStaticProperty) {
-            if (receiverType.implementsInterface(MAP_TYPE) || MAP_TYPE.equals(receiverType))
{
-                // for maps, replace map.foo with map.get('foo')
-                writeMapDotProperty(receiver, methodName, mv, safe);
-                return;
-            }
-            if (receiverType.implementsInterface(LIST_TYPE) || LIST_TYPE.equals(receiverType))
{
-                writeListDotProperty(receiver, methodName, mv, safe);
-                return;
-            }
+        if (!isStaticProperty && (receiverType.implementsInterface(LIST_TYPE) ||
LIST_TYPE.equals(receiverType))) {
+            writeListDotProperty(receiver, methodName, mv, safe);
+            return;
         }
 
-
         controller.getSourceUnit().addError(
                 new SyntaxException("Access to "+
                                                 (receiver instanceof ClassExpression ?receiver.getType():receiverType).toString(false)

http://git-wip-us.apache.org/repos/asf/groovy/blob/2989bfca/src/test/org/codehaus/groovy/classgen/asm/sc/ArraysAndCollectionsStaticCompileTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/ArraysAndCollectionsStaticCompileTest.groovy
b/src/test/org/codehaus/groovy/classgen/asm/sc/ArraysAndCollectionsStaticCompileTest.groovy
index fbb4f3c..3e6f278 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/ArraysAndCollectionsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/ArraysAndCollectionsStaticCompileTest.groovy
@@ -128,6 +128,18 @@ class ArraysAndCollectionsStaticCompileTest extends ArraysAndCollectionsSTCTest
         }
     }
 
+    void testMapSubclassPropertyStyleAccess() {
+        assertScript '''
+            class MyMap extends LinkedHashMap {
+                def foo = 1
+            }
+        
+            def map = new MyMap()
+            map.put('foo', 42)
+            assert map.foo == 42               
+        '''
+    }
+
     @Override
     void testForInLoop() {
         try {


Mime
View raw message