forked from M-Labs/artiq
parent
6d29e768a5
commit
a5bb4a24af
|
@ -599,7 +599,10 @@ class ARTIQIRGenerator(algorithm.Visitor):
|
||||||
self.append(ir.Reraise())
|
self.append(ir.Reraise())
|
||||||
|
|
||||||
def visit_Raise(self, node):
|
def visit_Raise(self, node):
|
||||||
self.raise_exn(self.visit(node.exc), loc=self.current_loc)
|
if types.is_exn_constructor(node.exc.type):
|
||||||
|
self.raise_exn(self.alloc_exn(node.exc.type.instance), loc=self.current_loc)
|
||||||
|
else:
|
||||||
|
self.raise_exn(self.visit(node.exc), loc=self.current_loc)
|
||||||
|
|
||||||
def visit_Try(self, node):
|
def visit_Try(self, node):
|
||||||
dispatcher = self.add_block("try.dispatch")
|
dispatcher = self.add_block("try.dispatch")
|
||||||
|
|
|
@ -1290,20 +1290,13 @@ class Inferencer(algorithm.Visitor):
|
||||||
|
|
||||||
if node.exc is not None:
|
if node.exc is not None:
|
||||||
exc_type = node.exc.type
|
exc_type = node.exc.type
|
||||||
if not types.is_var(exc_type) and not builtins.is_exception(exc_type):
|
if types.is_exn_constructor(exc_type):
|
||||||
if types.is_exn_constructor(exc_type):
|
pass # short form
|
||||||
notes = [diagnostic.Diagnostic("note",
|
elif not types.is_var(exc_type) and not builtins.is_exception(exc_type):
|
||||||
"this value is an exception constructor; use {suggestion} instead",
|
|
||||||
{"suggestion": node.exc.loc.source() + "()"},
|
|
||||||
node.exc.loc)]
|
|
||||||
else:
|
|
||||||
notes = []
|
|
||||||
|
|
||||||
diag = diagnostic.Diagnostic("error",
|
diag = diagnostic.Diagnostic("error",
|
||||||
"cannot raise a value of type {type}, which is not an exception",
|
"cannot raise a value of type {type}, which is not an exception",
|
||||||
{"type": types.TypePrinter().name(exc_type)},
|
{"type": types.TypePrinter().name(exc_type)},
|
||||||
node.loc,
|
node.loc)
|
||||||
notes=notes)
|
|
||||||
self.engine.process(diag)
|
self.engine.process(diag)
|
||||||
|
|
||||||
def visit_Assert(self, node):
|
def visit_Assert(self, node):
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
# RUN: %python -m artiq.compiler.testbench.jit %s
|
||||||
|
# RUN: %python %s
|
||||||
|
# REQUIRES: exceptions
|
||||||
|
|
||||||
|
try:
|
||||||
|
raise ValueError
|
||||||
|
except ValueError:
|
||||||
|
pass
|
Loading…
Reference in New Issue