Source code for curry.backends.cxx.interface

from ..generic.eval import evaluator
from ... import backends
from . import (
    compiler, cyrtbindings, fundamental_symbols, implementation, loader
  , materialize, tiered, toolchain
  )
from ...objects.handle import getHandle

[docs] class IBackend(backends.IBackend): @property def backend_name(self): return 'cxx' @property def extend_plan_skeleton(self): return toolchain.extend_plan_skeleton @property def compile(self): return compiler.compile
[docs] def get_interpreter_state(self, interp): return interp._its
[docs] def init_interpreter_state(self, interp): # A new interpreter and a reset unload the modules whose compiles run in # the background. tiered.cancel() interp._its = cyrtbindings.InterpreterState()
[docs] def module_loaded(self, interp, moduleobj, currypath): materialize.module_loaded(interp, moduleobj, currypath) tiered.module_loaded(interp, moduleobj, currypath)
[docs] def module_unlinked(self, interp, moduleobj): # The tables of the module go to the kept store now, not when the last # Python reference to the module goes: a module of the same name made # after a reset takes them back without their steps, whether or not the # old module object is alive (issue #114). M = getHandle(moduleobj).backend_handle if M is not None: M.retire()
[docs] def before_evaluation(self, interp): if tiered.enabled(interp): tiered.poll(interp)
[docs] def after_evaluation(self, interp): if tiered.enabled(interp): tiered.poll(interp)
[docs] def tiered_counts(self): return tiered.counts()
[docs] def num_collections(self): return cyrtbindings.gc_collections()
[docs] def gc_seconds(self): return cyrtbindings.gc_seconds()
[docs] def gc_counters(self): return cyrtbindings.gc_counters()
[docs] def scheduler_counters_enabled(self): return cyrtbindings.scheduler_counters_enabled()
[docs] def getimpl(self, symbol): return implementation.getimpl(symbol)
[docs] def find_or_create_internal_module(self, moduleobj): h = getHandle(moduleobj) M = cyrtbindings.Module.find_or_create(h.fullname) M.link(h.icurry.metadata.get('cxx.shlib')) return M
@property def fundamental_symbols(self): return fundamental_symbols @property def load_module(self): return loader.load_module
[docs] def lookup_builtin_module(self, modulename): if modulename == 'Prelude': from ..generic.currylib import prelude return prelude.PreludeSpecification() elif modulename == 'Control.SetFunctions': from ..generic.currylib import setfunctions return setfunctions.SetFunctionsSpecification()
@property def create_evaluation_rts(self): return cyrtbindings.RuntimeState @property def make_node(self): return cyrtbindings.make_node @property def materialize(self): return materialize.materialize @property def object_file_extension(self): return '.so' @property def write_module(self): return compiler.write_module