def _translate_rules(ctx, rules, scrutinee_trans):
for (pat, branch) in rules:
(condition, binding_translations) = ctx.translate_pat(
pat,
scrutinee_trans)
if not pat.bindings.keys() == binding_translations.keys():
raise typy.TypyExtensionError(
"All bindings must have translations.")
for binding_translation in binding_translations.itervalues():
if not isinstance(binding_translation, ast.expr):
raise typy.TypyExtensionError(
"Binding translation must be an expression.")
ctx_update = pat.ctx_update
ctx.variables.push(ctx_update)
branch_translation = ctx.translate(branch)
ctx.variables.pop()
yield (condition, binding_translations, ctx_update,
branch_translation)
评论列表
文章目录