Patch title: Release 94 bulk changes
Abstract:
File: /pliant/storage/database/interface.pli
Key:
    Removed line
    Added line
module "/pliant/language/compiler.pli"
module "prototype.pli"

public

gvar Relation data_interface_cache
gvar List data_interface_generators

enumerated DataKind
  data_undefined
  data_field
  data_record
  data_set

function data_kind t -> k
  arg Type t ; arg DataKind k
  if (t:flags .and. type_flag_field)<>0
    k := data_field
  eif (t:flags .and. type_flag_record)<>0
    k := data_record
  eif t:category="Set"
    k := data_set
  eif (t get_generic_method (the_function '. from string' Universal Str Str CBool Int Int -> Status):generic_index)<>(the_function '. from string' Universal Str Str CBool Int Int -> Status)
    k := data_field
  eif t:nb_fields>0
    k := data_record
  else
    k := data_field

 
function data_interface_prototype t f -> di
  arg Type t ; arg Function f ; arg Link:DataInterface_ di
  indirect

constant genaddr addressof:data_interface_generators

function data_interface t -> di
  arg Type t ; arg Link:DataInterface_ di
  if (data_interface_cache query addressof:t null)<>null
    di :> (data_interface_cache query addressof:t null) map DataInterface_
    return
  di :> null map DataInterface_
  var Pointer:List generators :> genaddr map List
  var Pointer:Arrow c :> generators first
  while c<>null and not exists:di
    di :> data_interface_prototype t (c map Function)
    if exists:di 
      data_interface_cache define addressof:t null addressof:di
      return
    c :> generators next c

export data_interface