compiler: fixed embedding annotation evaluation

This commit is contained in:
pca006132 2021-06-25 11:17:34 +08:00 committed by Sebastien Bourdeauducq
parent 66b6555c72
commit c6a7b8a8dd

View File

@ -952,21 +952,25 @@ class Stitcher:
else:
host_function = function
embedded_function = host_function.artiq_embedded.function
if hasattr(host_function, 'artiq_embedded'):
embedded_function = host_function.artiq_embedded.function
else:
embedded_function = host_function
if isinstance(embedded_function, str):
embedded_function = host_function
if isinstance(annot, str):
if annot not in embedded_function.__globals__:
try:
annot = eval(annot, embedded_function.__globals__)
except Exception:
diag = diagnostic.Diagnostic(
"error",
"type annotation for {kind}, {annot}, is not defined",
{"kind": kind, "annot": repr(annot)},
self._function_loc(function),
notes=self._call_site_note(call_loc, fn_kind))
"error",
"type annotation for {kind}, {annot}, cannot be evaluated",
{"kind": kind, "annot": repr(annot)},
self._function_loc(function),
notes=self._call_site_note(call_loc, fn_kind))
self.engine.process(diag)
annot = embedded_function.__globals__[annot]
if not isinstance(annot, types.Type):
diag = diagnostic.Diagnostic("error",