Patch title: Release 85 bulk changes
Abstract:
File: /pliant/util/remote/client.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/crypto/channel.pli"
module "/pliant/language/data/string_cast.pli"
module "/pliant/protocol/dns/name.pli"
module "common.pli"


meta remote e
  var Pointer:Arrow c :> pliant_general_dictionary first "pl
  if c=null or entry_type:c<>Function
    return
  var Link:Function current_function :> c map Function
  if e:size<2 or not (e:0 cast Str)
    return
  var Str id
  var Pointer:Expression body
  var Int ls_index := undefined
  var Int rs_index := undefined
  var Int success_index := undefined
  var Int failure_index := undefined
  var Int failure2_index := undefined
  var Int i
  if e:size>=4 and e:1:ident="id" and (e:2 constant Str)<>nu
    id := (e:2 constant Str) map Str
    body :> e 3
    i := 4
  else
    id := e:external_module:name+" "+current_function:name
    body :> e 1
    i := 2
  while i<e:size
    if i+2<e:size and e:i:ident="local_streaming" and e:(i+1
      ls_index := i
      i += 3
    eif i+2<e:size and e:i:ident="remote_streaming" and e:(i
      rs_index := i
      i += 3
    eif i+1<e:size and e:i:ident="success" and e:(i+1):ident
      success_index := i
      i += 2
    eif i+1<e:size and e:i:ident="failure" and e:(i+1):ident
      failure_index := i
      i += 2
    eif i+2<e:size and e:i:ident="failure" and e:(i+1):ident
      failure2_index := i
      i += 3
    else
      console "i = " i eol
      return
  e suckup e:0
  var Pointer:Module module :> e module ; var Address mark :
  e local_variable "remote site" Str
  e local_variable "remote rejected" CBool
  var Link:List expressions :> new List
  var Link:List byaddress :> new List
  expressions append addressof:body
  if ls_index=defined
module "/pliant/language/compiler.pli"
module "/pliant/language/parser.pli"
module "/pliant/language/context.pli"
module "/pliant/language/stream.pli"
module "/pliant/util/crypto/channel.pli"
module "/pliant/language/data/string_cast.pli"
module "/pliant/protocol/dns/name.pli"
module "common.pli"


meta remote e
  var Pointer:Arrow c :> pliant_general_dictionary first "pl
  if c=null or entry_type:c<>Function
    return
  var Link:Function current_function :> c map Function
  if e:size<2 or not (e:0 cast Str)
    return
  var Str id
  var Pointer:Expression body
  var Int ls_index := undefined
  var Int rs_index := undefined
  var Int success_index := undefined
  var Int failure_index := undefined
  var Int failure2_index := undefined
  var Int i
  if e:size>=4 and e:1:ident="id" and (e:2 constant Str)<>nu
    id := (e:2 constant Str) map Str
    body :> e 3
    i := 4
  else
    id := e:external_module:name+" "+current_function:name
    body :> e 1
    i := 2
  while i<e:size
    if i+2<e:size and e:i:ident="local_streaming" and e:(i+1
      ls_index := i
      i += 3
    eif i+2<e:size and e:i:ident="remote_streaming" and e:(i
      rs_index := i
      i += 3
    eif i+1<e:size and e:i:ident="success" and e:(i+1):ident
      success_index := i
      i += 2
    eif i+1<e:size and e:i:ident="failure" and e:(i+1):ident
      failure_index := i
      i += 2
    eif i+2<e:size and e:i:ident="failure" and e:(i+1):ident
      failure2_index := i
      i += 3
    else
      console "i = " i eol
      return
  e suckup e:0
  var Pointer:Module module :> e module ; var Address mark :
  e local_variable "remote site" Str
  e local_variable "remote rejected" CBool
  var Link:List expressions :> new List
  var Link:List byaddress :> new List
  expressions append addressof:body
  if ls_index=defined
    e local_variable e:(ls_index+1):ident Stream
    e local_variable e:(ls_index+1) Stream
    expressions append addressof:(e ls_index+2)
  if rs_index=defined
    expressions append addressof:(e ls_index+2)
  if rs_index=defined
    e local_variable e:(rs_index+1):ident Stream
    e local_variable e:(rs_index+1) Stream
    expressions append addressof:(e rs_index+2)
  if success_index=defined
    expressions append addressof:(e success_index+1)
  if failure_index=defined
    expressions append addressof:(e failure_index+1)
  if failure2_index=defined
    expressions append addressof:(e rs_index+2)
  if success_index=defined
    expressions append addressof:(e success_index+1)
  if failure_index=defined
    expressions append addressof:(e failure_index+1)
  if failure2_index=defined
    e local_variable e:(failure2_index+1):ident Str
    e local_variable e:(failure2_index+1) Str
    expressions append addressof:(e failure2_index+2)
  var List functions ; var Link:Type type
  module define "control" addressof:(the_meta control)
  module define "modify" addressof:(the_meta modify)
  module define "ignore" addressof:(the_meta ignore)
  module define "pliant shared" addressof:byaddress
  module define "share" addressof:(the_meta 'pliant share ar
  var Link:Dictionary modify :> new Dictionary
  module define "pliant remote modify" addressof:modify
  var Link:Dictionary ignore :> new Dictionary
  module define "pliant remote ignore" addressof:ignore
  e freeze expressions byaddress functions type
  module rewind mark
  void ?
  var Pointer:Arrow ba :> byaddress first
  while ba<>null
    ignore insert (cast (ba map Ident) Str) true addressof:v
    ba :> byaddress next ba
  var Link:RemoteFunction fun :> new RemoteFunction
  fun body :> functions:first map Function
  fun type :> type
  fun id := id
  fun site_offset := type offset "remote site"
  fun rejected_offset := type offset "remote rejected"
  for (var Int i) 0 type:nb_fields-1
    var Pointer:TypeField tf :> type field i
    if (tf:name search " " -1)=(-1) and (ignore first tf:nam
      if ls_index=undefined or tf:name<>e:(ls_index+1):ident
        if rs_index=undefined or tf:name<>e:(rs_index+1):ide
          if failure2_index=undefined or tf:name<>e:(failure
            var Pointer:Function conv :> tf:type get_generic
            if not exists:conv or conv=(the_function '. to s
              error error_id_compile "Cannot convert '"+tf:n
              return
            fun:ro_dict insert tf:name i
            fun ro_list += i
            if (modify first tf:name)<>null
              fun:rw_dict insert tf:name i
              fun rw_list += i
  var Pointer:Arrow c :> functions first
  if ls_index=defined
    c :> functions next c
    fun local_streaming :> c map Function
    fun ls_offset := type offset e:(ls_index+1):ident
  if rs_index=defined
    c :> functions next c
    fun remote_streaming :> c map Function
    fun rs_offset := type offset e:(rs_index+1):ident
  if success_index=defined
    c :> functions next c
    fun success_code :> c map Function
  if failure_index=defined
    c :> functions next c
    fun failure_code :> c map Function
  if failure2_index=defined
    c :> functions next c
    fun failure_code :> c map Function
    fun message_offset := type offset e:(failure2_index+1):i
  e add (instruction (the_function remote_execute DelayedAct
  var Link:Argument adr :> argument local Address
  e add (instruction (the_function '. get_address' DelayedAc
  var Pointer:Int index :> fun:ro_list first
  while exists:index
    var Pointer:TypeField tf :> fun:type field index
    var Pointer:Arrow c :> pliant_general_dictionary first t
    if c<>null and entry_type:c=LocalVariable
      var Link:LocalVariable l :> c map LocalVariable
      var Link:Argument field :> argument indirect Address a
      e add (instruction (the_function 'copy Universal' Univ
    index :> fun:ro_list next index
  remote_sem request
  remote_functions remove id null
  remote_functions insert id true addressof:fun
  remote_sem release
  e set_void_result


    expressions append addressof:(e failure2_index+2)
  var List functions ; var Link:Type type
  module define "control" addressof:(the_meta control)
  module define "modify" addressof:(the_meta modify)
  module define "ignore" addressof:(the_meta ignore)
  module define "pliant shared" addressof:byaddress
  module define "share" addressof:(the_meta 'pliant share ar
  var Link:Dictionary modify :> new Dictionary
  module define "pliant remote modify" addressof:modify
  var Link:Dictionary ignore :> new Dictionary
  module define "pliant remote ignore" addressof:ignore
  e freeze expressions byaddress functions type
  module rewind mark
  void ?
  var Pointer:Arrow ba :> byaddress first
  while ba<>null
    ignore insert (cast (ba map Ident) Str) true addressof:v
    ba :> byaddress next ba
  var Link:RemoteFunction fun :> new RemoteFunction
  fun body :> functions:first map Function
  fun type :> type
  fun id := id
  fun site_offset := type offset "remote site"
  fun rejected_offset := type offset "remote rejected"
  for (var Int i) 0 type:nb_fields-1
    var Pointer:TypeField tf :> type field i
    if (tf:name search " " -1)=(-1) and (ignore first tf:nam
      if ls_index=undefined or tf:name<>e:(ls_index+1):ident
        if rs_index=undefined or tf:name<>e:(rs_index+1):ide
          if failure2_index=undefined or tf:name<>e:(failure
            var Pointer:Function conv :> tf:type get_generic
            if not exists:conv or conv=(the_function '. to s
              error error_id_compile "Cannot convert '"+tf:n
              return
            fun:ro_dict insert tf:name i
            fun ro_list += i
            if (modify first tf:name)<>null
              fun:rw_dict insert tf:name i
              fun rw_list += i
  var Pointer:Arrow c :> functions first
  if ls_index=defined
    c :> functions next c
    fun local_streaming :> c map Function
    fun ls_offset := type offset e:(ls_index+1):ident
  if rs_index=defined
    c :> functions next c
    fun remote_streaming :> c map Function
    fun rs_offset := type offset e:(rs_index+1):ident
  if success_index=defined
    c :> functions next c
    fun success_code :> c map Function
  if failure_index=defined
    c :> functions next c
    fun failure_code :> c map Function
  if failure2_index=defined
    c :> functions next c
    fun failure_code :> c map Function
    fun message_offset := type offset e:(failure2_index+1):i
  e add (instruction (the_function remote_execute DelayedAct
  var Link:Argument adr :> argument local Address
  e add (instruction (the_function '. get_address' DelayedAc
  var Pointer:Int index :> fun:ro_list first
  while exists:index
    var Pointer:TypeField tf :> fun:type field index
    var Pointer:Arrow c :> pliant_general_dictionary first t
    if c<>null and entry_type:c=LocalVariable
      var Link:LocalVariable l :> c map LocalVariable
      var Link:Argument field :> argument indirect Address a
      e add (instruction (the_function 'copy Universal' Univ
    index :> fun:ro_list next index
  remote_sem request
  remote_functions remove id null
  remote_functions insert id true addressof:fun
  remote_sem release
  e set_void_result