from .currylib import fundamental
from ..generic.eval import evaluator
from .graph import Node
from ... import backends
from . import compiler, loader, materialize, toolchain
import importlib
__all__ = ['IBackend']
[docs]
class IBackend(backends.IBackend):
@property
def backend_name(self):
return 'py'
@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):
from .eval.rts import InterpreterState
interp._its = InterpreterState()
[docs]
def find_or_create_internal_module(self, moduleobj):
pass
[docs]
def compile_pending(self, moduleobj):
materialize.compile_pending(moduleobj)
[docs]
def getimpl(self, symbol):
return materialize.getimpl(symbol)
@property
def fundamental_symbols(self):
return fundamental
@property
def load_module(self):
return loader.load_module
[docs]
def lookup_builtin_module(self, modulename):
if modulename == 'Prelude':
path = '.currylib.prelude'
module = importlib.import_module(path, package=__package__)
return module.PreludeSpecification()
elif modulename == 'Control.SetFunctions':
path = '.currylib.setfunctions'
module = importlib.import_module(path, package=__package__)
return module.SetFunctionsSpecification()
@property
def create_evaluation_rts(self):
from .eval import rts
return rts.RuntimeState
@property
def make_node(self):
return Node
@property
def materialize(self):
return materialize.materialize
@property
def object_file_extension(self):
return '.py'
@property
def write_module(self):
return compiler.write_module