mirror of https://github.com/m-labs/artiq.git
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:
|
||||
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):
|
||||
diag = diagnostic.Diagnostic("error",
|
||||
"type annotation for {kind}, '{annot}', is not an ARTIQ type",
|
||||
|
|
Loading…
Reference in New Issue