forked from M-Labs/artiq
compiler: allows string annotation
According to PEP484, type hint can be a string literal for forward references. With PEP563, type hint would be preserved in annotations in string form.
This commit is contained in:
parent
094a346974
commit
c29a149d16
|
@ -949,6 +949,27 @@ class Stitcher:
|
||||||
if annot is None:
|
if annot is None:
|
||||||
annot = builtins.TNone()
|
annot = builtins.TNone()
|
||||||
|
|
||||||
|
if isinstance(function, SpecializedFunction):
|
||||||
|
host_function = function.host_function
|
||||||
|
else:
|
||||||
|
host_function = function
|
||||||
|
|
||||||
|
embedded_function = host_function.artiq_embedded.function
|
||||||
|
|
||||||
|
if isinstance(embedded_function, str):
|
||||||
|
embedded_function = host_function
|
||||||
|
|
||||||
|
if isinstance(annot, str):
|
||||||
|
if annot not in embedded_function.__globals__:
|
||||||
|
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))
|
||||||
|
self.engine.process(diag)
|
||||||
|
annot = embedded_function.__globals__[annot]
|
||||||
|
|
||||||
if not isinstance(annot, types.Type):
|
if not isinstance(annot, types.Type):
|
||||||
diag = diagnostic.Diagnostic("error",
|
diag = diagnostic.Diagnostic("error",
|
||||||
"type annotation for {kind}, '{annot}', is not an ARTIQ type",
|
"type annotation for {kind}, '{annot}', is not an ARTIQ type",
|
||||||
|
|
Loading…
Reference in New Issue