[Zope-Checkins] CVS: Releases/Zope/lib/python/Products/PageTemplates - Expressions.py:1.36.6.9

Evan Simpson evan@zope.com
Thu, 26 Sep 2002 17:35:18 -0400


Update of /cvs-repository/Releases/Zope/lib/python/Products/PageTemplates
In directory cvs.zope.org:/tmp/cvs-serv8005/lib/python/Products/PageTemplates

Modified Files:
      Tag: Zope-2_6-branch
	Expressions.py 
Log Message:
Merge fix for Collector #538 from trunk.


=== Releases/Zope/lib/python/Products/PageTemplates/Expressions.py 1.36.6.8 => 1.36.6.9 ===
--- Releases/Zope/lib/python/Products/PageTemplates/Expressions.py:1.36.6.8	Wed Sep 25 19:20:09 2002
+++ Releases/Zope/lib/python/Products/PageTemplates/Expressions.py	Thu Sep 26 17:35:17 2002
@@ -154,6 +154,7 @@
     def __init__(self, name, expr, engine):
         self._s = expr
         self._name = name
+        self._hybrid = 0
         paths = expr.split('|')
         self._subexprs = []
         add = self._subexprs.append
@@ -163,6 +164,7 @@
                 # This part is the start of another expression type,
                 # so glue it back together and compile it.
                 add(engine.compile(('|'.join(paths[i:]).lstrip())))
+                self._hybrid = 1
                 break
             add(SubPathExpr(path)._eval)
 
@@ -187,8 +189,11 @@
             else:
                 break
         else:
-            # On the last subexpression allow exceptions through.
+            # On the last subexpression allow exceptions through, and
+            # don't autocall if the expression was not a subpath.
             ob = self._subexprs[-1](econtext)
+            if self._hybrid:
+                return ob
 
         if self._name == 'nocall' or isinstance(ob, StringType):
             return ob