mirror of https://github.com/m-labs/artiq.git
update NAC3
This commit is contained in:
parent
a8129093df
commit
c7cca11ad1
|
@ -60,9 +60,9 @@ class Core:
|
||||||
self.comm.close()
|
self.comm.close()
|
||||||
|
|
||||||
def compile(self, method, args, kwargs, file_output=None):
|
def compile(self, method, args, kwargs, file_output=None):
|
||||||
if core_language._allow_module_registration:
|
if core_language._allow_registration:
|
||||||
self.compiler.analyze_modules(core_language._registered_modules)
|
self.compiler.analyze(core_language._registered_functions, core_language._registered_classes)
|
||||||
core_language._allow_module_registration = False
|
core_language._allow_registration = False
|
||||||
|
|
||||||
if hasattr(method, "__self__"):
|
if hasattr(method, "__self__"):
|
||||||
obj = method.__self__
|
obj = method.__self__
|
||||||
|
|
|
@ -4,7 +4,7 @@ Core ARTIQ extensions to the Python language.
|
||||||
|
|
||||||
from typing import Generic, TypeVar
|
from typing import Generic, TypeVar
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
from inspect import getfullargspec, getmodule
|
from inspect import getfullargspec
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
|
|
||||||
|
@ -25,24 +25,29 @@ def round64(x):
|
||||||
return round(x)
|
return round(x)
|
||||||
|
|
||||||
|
|
||||||
_allow_module_registration = True
|
_allow_registration = True
|
||||||
_registered_modules = set()
|
# Delay NAC3 analysis until all referenced variables are supposed to exist on the CPython side.
|
||||||
|
_registered_functions = set()
|
||||||
|
_registered_classes = set()
|
||||||
|
|
||||||
def _register_module_of(obj):
|
def _register_function(fun):
|
||||||
assert _allow_module_registration
|
assert _allow_registration
|
||||||
# Delay NAC3 analysis until all referenced variables are supposed to exist on the CPython side.
|
_registered_functions.add(fun)
|
||||||
_registered_modules.add(getmodule(obj))
|
|
||||||
|
def _register_class(cls):
|
||||||
|
assert _allow_registration
|
||||||
|
_registered_classes.add(cls)
|
||||||
|
|
||||||
|
|
||||||
def extern(function):
|
def extern(function):
|
||||||
"""Decorates a function declaration defined by the core device runtime."""
|
"""Decorates a function declaration defined by the core device runtime."""
|
||||||
_register_module_of(function)
|
_register_function(function)
|
||||||
return function
|
return function
|
||||||
|
|
||||||
|
|
||||||
def kernel(function_or_method):
|
def kernel(function_or_method):
|
||||||
"""Decorates a function or method to be executed on the core device."""
|
"""Decorates a function or method to be executed on the core device."""
|
||||||
_register_module_of(function_or_method)
|
_register_function(function_or_method)
|
||||||
argspec = getfullargspec(function_or_method)
|
argspec = getfullargspec(function_or_method)
|
||||||
if argspec.args and argspec.args[0] == "self":
|
if argspec.args and argspec.args[0] == "self":
|
||||||
@wraps(function_or_method)
|
@wraps(function_or_method)
|
||||||
|
@ -59,7 +64,7 @@ def kernel(function_or_method):
|
||||||
|
|
||||||
def portable(function):
|
def portable(function):
|
||||||
"""Decorates a function or method to be executed on the same device (host/core device) as the caller."""
|
"""Decorates a function or method to be executed on the same device (host/core device) as the caller."""
|
||||||
_register_module_of(function)
|
_register_function(function)
|
||||||
return function
|
return function
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,7 +73,7 @@ def nac3(cls):
|
||||||
Decorates a class to be analyzed by NAC3.
|
Decorates a class to be analyzed by NAC3.
|
||||||
All classes containing kernels or portable methods must use this decorator.
|
All classes containing kernels or portable methods must use this decorator.
|
||||||
"""
|
"""
|
||||||
_register_module_of(cls)
|
_register_class(cls)
|
||||||
return cls
|
return cls
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -82,11 +82,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1636252154,
|
"lastModified": 1636618109,
|
||||||
"narHash": "sha256-YPRjk9M9GdUiAZircxUl5BDU8rN5t0B0ZkIau+dMqmg=",
|
"narHash": "sha256-dJu9Tw+8mVL3ZMIlcvM9g6WT3hYrKDaVceZJV+BxjTA=",
|
||||||
"ref": "master",
|
"ref": "master",
|
||||||
"rev": "50f1aca1aa7ecb4412aa4b8a0daa1cc644d8ca89",
|
"rev": "c004da85f705fef8952885c1493407610a05b61d",
|
||||||
"revCount": 412,
|
"revCount": 415,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.m-labs.hk/M-Labs/nac3.git"
|
"url": "https://git.m-labs.hk/M-Labs/nac3.git"
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue