forked from M-Labs/artiq
transforms.artiq_ir_generator: treat builtins in 'with' syntactically.
This commit is contained in:
parent
22dab0c7cc
commit
ccc993071b
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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()
|
Loading…
Reference in New Issue