Fixed a failing testcase. (Error caused by constant folding of undefined
authorArmin Ronacher <armin.ronacher@active-4.com>
Sun, 23 May 2010 20:58:28 +0000 (22:58 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sun, 23 May 2010 20:58:28 +0000 (22:58 +0200)
values)

--HG--
branch : trunk

jinja2/nodes.py
jinja2/runtime.py

index c8bb0476a8666e33217e4fe018860d420b336597..11247d83cc21fc6efd6ac0a4743ad2cc2afd169b 100644 (file)
 import operator
 from itertools import chain, izip
 from collections import deque
-from jinja2.utils import Markup
+from jinja2.utils import Markup, MethodType, FunctionType
+
+
+#: the types we support for context functions
+_context_function_types = (FunctionType, MethodType)
 
 
 _binop_to_func = {
@@ -585,12 +589,13 @@ class Call(Expr):
 
         # don't evaluate context functions
         args = [x.as_const(eval_ctx) for x in self.args]
-        if getattr(obj, 'contextfunction', False):
-            raise Impossible()
-        elif getattr(obj, 'evalcontextfunction', False):
-            args.insert(0, eval_ctx)
-        elif getattr(obj, 'environmentfunction', False):
-            args.insert(0, self.environment)
+        if isinstance(obj, _context_function_types):
+            if getattr(obj, 'contextfunction', False):
+                raise Impossible()
+            elif getattr(obj, 'evalcontextfunction', False):
+                args.insert(0, eval_ctx)
+            elif getattr(obj, 'environmentfunction', False):
+                args.insert(0, self.environment)
 
         kwargs = dict(x.as_const(eval_ctx) for x in self.kwargs)
         if self.dyn_args is not None:
index 1961e9f12684a23a0cabd04ab08b18f5935bf819..a89812ff223ef3f4b9fbaa16d0ee3e3e7138a378 100644 (file)
 """
 import sys
 from itertools import chain, imap
-from jinja2.nodes import EvalContext
+from jinja2.nodes import EvalContext, _context_function_types
 from jinja2.utils import Markup, partial, soft_unicode, escape, missing, \
-     concat, MethodType, FunctionType, internalcode, next, \
-     object_type_repr
+     concat, internalcode, next, object_type_repr
 from jinja2.exceptions import UndefinedError, TemplateRuntimeError, \
      TemplateNotFound
 
@@ -24,10 +23,6 @@ __all__ = ['LoopContext', 'TemplateReference', 'Macro', 'Markup',
            'markup_join', 'unicode_join', 'to_string',
            'TemplateNotFound']
 
-
-#: the types we support for context functions
-_context_function_types = (FunctionType, MethodType)
-
 #: the name of the function that is used to convert something into
 #: a string.  2to3 will adopt that automatically and the generated
 #: code can take advantage of it.