forked from M-Labs/artiq
parent
770dda6fd7
commit
cc28b596b3
|
@ -560,6 +560,11 @@ class Stitcher:
|
||||||
break
|
break
|
||||||
old_typedtree_hash = typedtree_hash
|
old_typedtree_hash = typedtree_hash
|
||||||
|
|
||||||
|
# When we have an excess of type information, sometimes we can infer every type
|
||||||
|
# in the AST without discovering every referenced attribute of host objects, so
|
||||||
|
# do one last pass unconditionally.
|
||||||
|
inferencer.visit(self.typedtree)
|
||||||
|
|
||||||
# For every host class we embed, fill in the function slots
|
# For every host class we embed, fill in the function slots
|
||||||
# with their corresponding closures.
|
# with their corresponding closures.
|
||||||
for instance_type, constructor_type in list(self.type_map.values()):
|
for instance_type, constructor_type in list(self.type_map.values()):
|
||||||
|
@ -579,7 +584,6 @@ class Stitcher:
|
||||||
getattr(constructor, attr))
|
getattr(constructor, attr))
|
||||||
synthesizer.finalize()
|
synthesizer.finalize()
|
||||||
self._inject(ast)
|
self._inject(ast)
|
||||||
|
|
||||||
# After we have found all functions, synthesize a module to hold them.
|
# After we have found all functions, synthesize a module to hold them.
|
||||||
source_buffer = source.Buffer("", "<synthesized>")
|
source_buffer = source.Buffer("", "<synthesized>")
|
||||||
self.typedtree = asttyped.ModuleT(
|
self.typedtree = asttyped.ModuleT(
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# RUN: %python -m artiq.compiler.testbench.embedding %s
|
||||||
|
|
||||||
|
from artiq.experiment import *
|
||||||
|
|
||||||
|
class MyClass:
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
for k, v in kwargs.items():
|
||||||
|
setattr(self, k, v)
|
||||||
|
|
||||||
|
|
||||||
|
sl = [MyClass(x=1), MyClass(x=2)]
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def bug(l):
|
||||||
|
for c in l:
|
||||||
|
print(c.x)
|
||||||
|
|
||||||
|
@kernel
|
||||||
|
def entrypoint():
|
||||||
|
bug(sl)
|
Loading…
Reference in New Issue