You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by sh...@apache.org on 2017/05/11 06:07:05 UTC
[2/2] groovy git commit: GROOVY-8074: Statically compiled dot
property accesses instance property instead of Map property (closes #539)
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 <sh...@apache.org>
Authored: Sun May 7 14:47:19 2017 -0400
Committer: Shil Sinha <sh...@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 {