forked from M-Labs/artiq
1
0
Fork 0

transforms.artiq_ir_generator: treat builtins in 'with' syntactically.

This commit is contained in:
whitequark 2015-12-10 21:29:16 +08:00
parent 22dab0c7cc
commit ccc993071b
3 changed files with 17 additions and 3 deletions

View File

@ -695,9 +695,11 @@ class ARTIQIRGenerator(algorithm.Visitor):
context_expr_node = node.items[0].context_expr context_expr_node = node.items[0].context_expr
optional_vars_node = node.items[0].optional_vars optional_vars_node = node.items[0].optional_vars
if types.is_builtin(context_expr_node.type, "sequential"): if isinstance(context_expr_node, asttyped.NameT) and \
context_expr_node.id == "sequential":
self.visit(node.body) self.visit(node.body)
elif types.is_builtin(context_expr_node.type, "parallel"): elif isinstance(context_expr_node, asttyped.NameT) and \
context_expr_node.id == "parallel":
parallel = self.append(ir.Parallel([])) parallel = self.append(ir.Parallel([]))
heads, tails = [], [] heads, tails = [], []
@ -715,6 +717,9 @@ class ARTIQIRGenerator(algorithm.Visitor):
if not tail.is_terminated(): if not tail.is_terminated():
tail.append(ir.Branch(self.current_block)) tail.append(ir.Branch(self.current_block))
else:
assert False
# Expression visitors # Expression visitors
# These visitors return a node in addition to mutating # These visitors return a node in addition to mutating
# the IR. # the IR.

View File

@ -762,7 +762,11 @@ class Inferencer(algorithm.Visitor):
self._unify(node.type, typ.find().instance, self._unify(node.type, typ.find().instance,
node.loc, None) node.loc, None)
else: else:
assert False diag = diagnostic.Diagnostic("error",
"builtin function '{name}' cannot be used in this context",
{"name": typ.name},
node.loc)
self.engine.process(diag)
def visit_CallT(self, node): def visit_CallT(self, node):
self.generic_visit(node) self.generic_visit(node)

View File

@ -0,0 +1,5 @@
# RUN: %python -m artiq.compiler.testbench.inferencer +diag %s >%t
# RUN: OutputCheck %s --file-to-check=%t
# CHECK-L: ${LINE:+1}: error: builtin function 'sequential' cannot be used in this context
sequential()