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 2020/06/26 11:34:56 UTC

[groovy] 04/04: Eliminate the tail recursion for better performance

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 51a2470a243d24c86d2d00e4ceb5b3aa215eeabb
Author: Daniel Sun <su...@apache.org>
AuthorDate: Fri Jun 26 18:42:44 2020 +0800

    Eliminate the tail recursion for better performance
    
    (cherry picked from commit af7f9a3c6d1fd321b82a164d79a255fce2a9c964)
---
 .../org/codehaus/groovy/classgen/VariableScopeVisitor.java  | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index 4ff9a18..536630a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -167,6 +167,17 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
     }
 
     private Variable findClassMember(final ClassNode cn, final String name) {
+        for (ClassNode classNode = cn; null != classNode; classNode = classNode.getSuperClass()) {
+            Variable variable = doFindClassMember(classNode, name);
+            if (null != variable) {
+                return variable;
+            }
+        }
+
+        return null;
+    }
+
+    private Variable doFindClassMember(final ClassNode cn, final String name) {
         if (cn == null) return null;
 
         if (cn.isScript()) {
@@ -198,7 +209,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
             if (fn != null) return fn;
         }
 
-        return findClassMember(cn.getSuperClass(), name);
+        return null;
     }
 
     private Variable findVariableDeclaration(final String name) {