nac3_sca/nac3artiq/language.py

36 lines
882 B
Python

from inspect import isclass
from functools import wraps
import nac3artiq
__all__ = ["extern", "kernel"]
nac3 = nac3artiq.NAC3()
allow_object_registration = True
def extern(function):
assert allow_object_registration
nac3.register_object(function)
return function
def kernel(function_or_class):
global allow_object_registration
if isclass(function_or_class):
assert allow_object_registration
nac3.register_object(function_or_class)
return function_or_class
else:
@wraps(function_or_class)
def run_on_core(self, *args, **kwargs):
global allow_object_registration
if allow_object_registration:
nac3.analyze()
allow_object_registration = False
nac3.compile_method(self.__class__.__name__, function_or_class.__name__)
return run_on_core