Lines Matching refs:frame

64     def new_func(self, node, frame, **kwargs):
65 # Only optimize if the frame is not volatile
66 if self.optimized and not frame.eval_ctx.volatile:
67 new_node = self.optimizer.visit(node, frame.eval_ctx)
69 return self.visit(new_node, frame)
70 return f(self, node, frame, **kwargs)
138 # a toplevel frame is the root + soft frames such as if conditions.
141 # the root frame is basically just the outermost frame, so no if
151 # this for example affects {% filter %} or {% macro %}. If a frame
159 # the parent of this frame
173 """Return an inner frame."""
179 """Return a soft frame. A soft frame may not be modified as
180 standalone thing as it shares the resources with the frame it
181 was created of, but it's not a rootlevel frame any longer.
217 declared. This is different from the frame visitor as it will
322 def buffer(self, frame):
323 """Enable buffering for the frame from that point onwards."""
324 frame.buffer = self.temporary_identifier()
325 self.writeline('%s = []' % frame.buffer)
327 def return_buffer_contents(self, frame, force_unescaped=False):
328 """Return the buffer contents of the frame."""
330 if frame.eval_ctx.volatile:
333 self.writeline('return Markup(concat(%s))' % frame.buffer)
337 self.writeline('return concat(%s)' % frame.buffer)
340 elif frame.eval_ctx.autoescape:
341 self.writeline('return Markup(concat(%s))' % frame.buffer)
343 self.writeline('return concat(%s)' % frame.buffer)
353 def start_write(self, frame, node=None):
354 """Yield or write into the frame buffer."""
355 if frame.buffer is None:
358 self.writeline('%s.append(' % frame.buffer, node)
360 def end_write(self, frame):
362 if frame.buffer is not None:
365 def simple_write(self, s, frame, node=None):
367 self.start_write(frame, node)
369 self.end_write(frame)
371 def blockvisit(self, nodes, frame):
372 """Visit a list of nodes as block in a frame. If the current frame
378 self.visit(node, frame)
409 def signature(self, node, frame, extra_kwargs=None):
426 self.visit(arg, frame)
431 self.visit(kwarg, frame)
437 self.visit(node.dyn_args, frame)
446 self.visit(kwarg.value, frame)
453 self.visit(node.dyn_kwargs, frame)
460 self.visit(node.dyn_kwargs, frame)
475 def enter_frame(self, frame):
477 for target, (action, param) in iteritems(frame.symbols.loads):
492 def leave_frame(self, frame, with_python_scope=False):
495 for target, _ in iteritems(frame.symbols.loads):
505 def macro_body(self, node, frame):
507 frame = frame.inner()
508 frame.symbols.analyze_node(node)
519 args.append(frame.symbols.ref(arg.name))
538 args.append(frame.symbols.declare_parameter('caller'))
541 args.append(frame.symbols.declare_parameter('kwargs'))
544 args.append(frame.symbols.declare_parameter('varargs'))
548 frame.require_output_check = False
549 frame.symbols.analyze_node(node)
553 self.buffer(frame)
554 self.enter_frame(frame)
556 self.push_parameter_definitions(frame)
558 ref = frame.symbols.ref(arg.name)
570 self.visit(default, frame)
575 self.blockvisit(node.body, frame)
576 self.return_buffer_contents(frame, force_unescaped=True)
577 self.leave_frame(frame, with_python_scope=True)
580 return frame, macro_ref
582 def macro_def(self, macro_ref, frame):
600 def dump_local_context(self, frame):
603 in iteritems(frame.symbols.dump_stores()))
614 def push_parameter_definitions(self, frame):
615 """Pushes all parameter targets from the given frame into a local
621 self._param_def_block.append(frame.symbols.dump_param_targets())
649 def derive_context(self, frame):
652 self.dump_local_context(frame),
665 def pop_assign_tracking(self, frame):
670 if not frame.toplevel or not vars:
675 ref = frame.symbols.ref(name)
682 ref = frame.symbols.ref(name)
695 def visit_Template(self, node, frame=None):
696 assert frame is None, 'no root frame allowed'
743 frame = Frame(eval_ctx)
745 ref = frame.symbols.declare_parameter('self')
747 frame.symbols.analyze_node(node)
748 frame.toplevel = frame.rootlevel = True
749 frame.require_output_check = have_extends and not self.has_known_extends
752 self.enter_frame(frame)
754 self.blockvisit(node.body, frame)
755 self.leave_frame(frame, with_python_scope=True)
783 # It's important that we do not make this frame a child of the
811 def visit_Block(self, node, frame):
814 if frame.toplevel:
825 context = self.derive_context(frame)
830 frame.buffer is None:
838 self.simple_write('event', frame)
843 def visit_Extends(self, node, frame):
845 if not frame.toplevel:
872 self.visit(node.template, frame)
884 if frame.rootlevel:
890 def visit_Include(self, node, frame):
906 self.visit(node.template, frame)
922 '%s)):' % (loop, self.dump_local_context(frame)))
938 self.simple_write('event', frame)
944 def visit_Import(self, node, frame):
946 self.writeline('%s = ' % frame.symbols.ref(node.target), node)
947 if frame.toplevel:
952 self.visit(node.template, frame)
957 self.dump_local_context(frame)))
962 if frame.toplevel and not node.target.startswith('_'):
965 def visit_FromImport(self, node, frame):
970 self.visit(node.template, frame)
975 self.dump_local_context(frame)))
989 '%r, missing)' % (frame.symbols.ref(alias), name))
990 self.writeline('if %s is missing:' % frame.symbols.ref(alias))
995 (frame.symbols.ref(alias),
1002 if frame.toplevel:
1011 (name, frame.symbols.ref(name)))
1014 '%r: %s' % (name, frame.symbols.ref(name)) for name in var_names
1024 def visit_For(self, node, frame):
1025 loop_frame = frame.inner()
1026 test_frame = frame.inner()
1027 else_frame = frame.inner()
1074 # Use the same buffer for the else frame
1108 self.visit(node.iter, frame)
1142 self.start_write(frame, node)
1148 self.visit(node.iter, frame)
1152 self.end_write(frame)
1154 def visit_If(self, node, frame):
1155 if_frame = frame.soft()
1175 def visit_Macro(self, node, frame):
1176 macro_frame, macro_ref = self.macro_body(node, frame)
1178 if frame.toplevel:
1181 ref = frame.symbols.ref(node.name)
1183 self.write('%s = ' % frame.symbols.ref(node.name))
1186 def visit_CallBlock(self, node, frame):
1187 call_frame, macro_ref = self.macro_body(node, frame)
1190 self.start_write(frame, node)
1191 self.visit_Call(node.call, frame, forward_caller=True)
1192 self.end_write(frame)
1194 def visit_FilterBlock(self, node, frame):
1195 filter_frame = frame.inner()
1200 self.start_write(frame, node)
1202 self.end_write(frame)
1205 def visit_With(self, node, frame):
1206 with_frame = frame.inner()
1213 self.visit(expr, frame)
1217 def visit_ExprStmt(self, node, frame):
1219 self.visit(node.node, frame)
1221 def visit_Output(self, node, frame):
1224 if self.has_known_extends and frame.require_output_check:
1241 # if we are inside a frame that requires output checking, we do so
1243 if frame.require_output_check:
1255 const = child.as_const(frame.eval_ctx)
1259 # the frame can't be volatile here, becaus otherwise the
1263 if frame.eval_ctx.autoescape:
1280 if len(body) < 3 or frame.buffer is not None:
1281 if frame.buffer is not None:
1284 self.writeline('%s.append(' % frame.buffer)
1286 self.writeline('%s.extend((' % frame.buffer)
1291 if frame.buffer is None:
1296 if frame.buffer is None:
1301 if frame.eval_ctx.volatile:
1304 elif frame.eval_ctx.autoescape:
1314 self.visit(item, frame)
1316 if frame.buffer is not None:
1318 if frame.buffer is not None:
1339 if frame.eval_ctx.volatile:
1343 elif frame.eval_ctx.autoescape:
1358 self.visit(argument, frame)
1366 def visit_Assign(self, node, frame):
1369 self.visit(node.target, frame)
1371 self.visit(node.node, frame)
1372 self.pop_assign_tracking(frame)
1374 def visit_AssignBlock(self, node, frame):
1376 block_frame = frame.inner()
1386 self.visit(node.target, frame)
1394 self.pop_assign_tracking(frame)
1399 def visit_Name(self, node, frame):
1400 if node.ctx == 'store' and frame.toplevel:
1403 ref = frame.symbols.ref(node.name)
1409 load = frame.symbols.find_load(ref)
1418 def visit_NSRef(self, node, frame):
1422 ref = frame.symbols.ref(node.name)
1430 def visit_Const(self, node, frame):
1431 val = node.as_const(frame.eval_ctx)
1437 def visit_TemplateData(self, node, frame):
1439 self.write(repr(node.as_const(frame.eval_ctx)))
1444 def visit_Tuple(self, node, frame):
1450 self.visit(item, frame)
1453 def visit_List(self, node, frame):
1458 self.visit(item, frame)
1461 def visit_Dict(self, node, frame):
1466 self.visit(item.key, frame)
1468 self.visit(item.value, frame)
1473 def visitor(self, node, frame):
1477 self.visit(node.left, frame)
1479 self.visit(node.right, frame)
1482 self.visit(node.left, frame)
1484 self.visit(node.right, frame)
1490 def visitor(self, node, frame):
1494 self.visit(node.node, frame)
1497 self.visit(node.node, frame)
1516 def visit_Concat(self, node, frame):
1517 if frame.eval_ctx.volatile:
1520 elif frame.eval_ctx.autoescape:
1526 self.visit(arg, frame)
1531 def visit_Compare(self, node, frame):
1532 self.visit(node.expr, frame)
1534 self.visit(op, frame)
1536 def visit_Operand(self, node, frame):
1538 self.visit(node.expr, frame)
1541 def visit_Getattr(self, node, frame):
1543 self.visit(node.node, frame)
1547 def visit_Getitem(self, node, frame):
1550 self.visit(node.node, frame)
1552 self.visit(node.arg, frame)
1556 self.visit(node.node, frame)
1558 self.visit(node.arg, frame)
1561 def visit_Slice(self, node, frame):
1563 self.visit(node.start, frame)
1566 self.visit(node.stop, frame)
1569 self.visit(node.step, frame)
1572 def visit_Filter(self, node, frame):
1589 self.visit(node.node, frame)
1590 elif frame.eval_ctx.volatile:
1593 (frame.buffer, frame.buffer))
1594 elif frame.eval_ctx.autoescape:
1595 self.write('Markup(concat(%s))' % frame.buffer)
1597 self.write('concat(%s)' % frame.buffer)
1598 self.signature(node, frame)
1604 def visit_Test(self, node, frame):
1608 self.visit(node.node, frame)
1609 self.signature(node, frame)
1613 def visit_CondExpr(self, node, frame):
1616 return self.visit(node.expr2, frame)
1622 self.visit(node.expr1, frame)
1624 self.visit(node.test, frame)
1630 def visit_Call(self, node, frame, forward_caller=False):
1637 self.visit(node.node, frame)
1639 self.signature(node, frame, extra_kwargs)
1644 def visit_Keyword(self, node, frame):
1646 self.visit(node.value, frame)
1650 def visit_MarkSafe(self, node, frame):
1652 self.visit(node.expr, frame)
1655 def visit_MarkSafeIfAutoescape(self, node, frame):
1657 self.visit(node.expr, frame)
1660 def visit_EnvironmentAttribute(self, node, frame):
1663 def visit_ExtensionAttribute(self, node, frame):
1666 def visit_ImportedName(self, node, frame):
1669 def visit_InternalName(self, node, frame):
1672 def visit_ContextReference(self, node, frame):
1675 def visit_Continue(self, node, frame):
1678 def visit_Break(self, node, frame):
1681 def visit_Scope(self, node, frame):
1682 scope_frame = frame.inner()
1688 def visit_OverlayScope(self, node, frame):
1690 self.writeline('%s = %s' % (ctx, self.derive_context(frame)))
1692 self.visit(node.context, frame)
1695 scope_frame = frame.inner(isolated=True)
1702 def visit_EvalContextModifier(self, node, frame):
1705 self.visit(keyword.value, frame)
1707 val = keyword.value.as_const(frame.eval_ctx)
1709 frame.eval_ctx.volatile = True
1711 setattr(frame.eval_ctx, keyword.key, val)
1713 def visit_ScopedEvalContextModifier(self, node, frame):
1715 saved_ctx = frame.eval_ctx.save()
1717 self.visit_EvalContextModifier(node, frame)
1719 self.visit(child, frame)
1720 frame.eval_ctx.revert(saved_ctx)