(self, code, ns, out, defs)
| 227 | self._interpret_code(item, ns, out, defs) |
| 228 | |
| 229 | def _interpret_code(self, code, ns, out, defs): |
| 230 | # __traceback_hide__ = True |
| 231 | name, pos = code[0], code[1] |
| 232 | if name == 'py': |
| 233 | self._exec(code[2], ns, pos) |
| 234 | elif name == 'continue': |
| 235 | raise _TemplateContinue() |
| 236 | elif name == 'break': |
| 237 | raise _TemplateBreak() |
| 238 | elif name == 'for': |
| 239 | vars, expr, content = code[2], code[3], code[4] |
| 240 | expr = self._eval(expr, ns, pos) |
| 241 | self._interpret_for(vars, expr, content, ns, out, defs) |
| 242 | elif name == 'cond': |
| 243 | parts = code[2:] |
| 244 | self._interpret_if(parts, ns, out, defs) |
| 245 | elif name == 'expr': |
| 246 | parts = code[2].split('|') |
| 247 | base = self._eval(parts[0], ns, pos) |
| 248 | for part in parts[1:]: |
| 249 | func = self._eval(part, ns, pos) |
| 250 | base = func(base) |
| 251 | out.append(self._repr(base, pos)) |
| 252 | elif name == 'default': |
| 253 | var, expr = code[2], code[3] |
| 254 | if var not in ns: |
| 255 | result = self._eval(expr, ns, pos) |
| 256 | ns[var] = result |
| 257 | elif name == 'inherit': |
| 258 | expr = code[2] |
| 259 | value = self._eval(expr, ns, pos) |
| 260 | defs['__inherit__'] = value |
| 261 | elif name == 'def': |
| 262 | name = code[2] |
| 263 | signature = code[3] |
| 264 | parts = code[4] |
| 265 | ns[name] = defs[name] = TemplateDef( |
| 266 | self, name, signature, body=parts, ns=ns, pos=pos) |
| 267 | elif name == 'comment': |
| 268 | return |
| 269 | else: |
| 270 | assert 0, "Unknown code: %r" % name |
| 271 | |
| 272 | def _interpret_for(self, vars, expr, content, ns, out, defs): |
| 273 | # __traceback_hide__ = True |
no test coverage detected