Source code for curry.icurry.metadata

from . import types
from ..utility.visitation import dispatch

@dispatch.on('arg')
def merge(arg, extern, **kwds):
  '''
  Merge metadata from an external module into an ICurry object

  Args:
    arg:
      An instance of IFunction or IDataType.
    extern:
      An instance of IModule that provides external definitions.  If provided,
      this takes precedence over the metadata found in arg.
    itype:
      Keyword only.  An instance of IDataType, used to resolve constructors.
      Required for IConstructor.
  '''
  assert False

@merge.when(types.IFunction)
def merge(ifun, extern):
  if extern is not None and ifun.name in extern.functions:
    ifun.update_metadata(extern.functions[ifun.name].metadata)

[docs] @merge.when(types.IDataType) def merge(itype, extern): if extern is not None and itype.name in extern.types: itype_extern = extern.types[itype.name] itype.update_metadata(itype_extern.metadata) for ictor, ictor_extern in zip(itype.constructors, itype_extern.constructors): ictor.update_metadata(ictor_extern.metadata)