Patch title: Release 94 bulk changes
Abstract:
File: /pliant/language/type/set/relation.pli
Key:
    Removed line
    Added line
   
scope "/pliant/language/" "/pliant/install/"
module "/pliant/install/ring2.pli"



meta each e
  if e:size<3 or not e:0:is_pure_ident or not (e:1 cast Rela
    return
  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
  var Link:Expression key1 :> null map Expression
  var Link:Expression key2 :> null map Expression
  var Link:Type t :> Any
  var Int i := 2
  while i<e:size-1
    if i+1<e:size and e:i:ident="type" and (e:(i+1) constant
      t :> (e:(i+1) constant Type) map Type
      i += 2
    eif i+2<e:size and e:i:ident="getkeys" and e:(i+1):is_pu
      key1 :> e i+1
      key2 :> e i+2
      i += 3
    else
      return
  var Link:Argument index :> argument local Int
  var Link:Argument arrow :> argument local Pointer:Arrow
  if t=Any
    arrow :> argument local Pointer:Arrow
  else
    arrow :> argument local (pointerto linkto:t)
  var Link:Argument some :> argument local CBool
  var Link:LocalVariable lv :> new LocalVariable
  lv name := e:0 ident
  lv body :> arrow
  lv access := access_read+access_write
scope "/pliant/language/" "/pliant/install/"
module "/pliant/install/ring2.pli"



meta each e
  if e:size<3 or not e:0:is_pure_ident or not (e:1 cast Rela
    return
  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
  var Link:Expression key1 :> null map Expression
  var Link:Expression key2 :> null map Expression
  var Link:Type t :> Any
  var Int i := 2
  while i<e:size-1
    if i+1<e:size and e:i:ident="type" and (e:(i+1) constant
      t :> (e:(i+1) constant Type) map Type
      i += 2
    eif i+2<e:size and e:i:ident="getkeys" and e:(i+1):is_pu
      key1 :> e i+1
      key2 :> e i+2
      i += 3
    else
      return
  var Link:Argument index :> argument local Int
  var Link:Argument arrow :> argument local Pointer:Arrow
  if t=Any
    arrow :> argument local Pointer:Arrow
  else
    arrow :> argument local (pointerto linkto:t)
  var Link:Argument some :> argument local CBool
  var Link:LocalVariable lv :> new LocalVariable
  lv name := e:0 ident
  lv body :> arrow
  lv access := access_read+access_write
  lv function :> null map Function
  lv function :> current_function
  e define lv:name addressof:lv e:module
  e suckup e:1
  var Link:Instruction end :> instruction the_function:'do n
  e add (instruction (the_function '. scan_first' Relation T
  e add (instruction (the_function 'jump if not' CBool) some
  var Link:Instruction body :> instruction the_function:'do 
  e add body
  if addressof:key1<>null
    var Link:Argument adr1 :> argument local Address
    var Link:LocalVariable lv1 :> new LocalVariable
    lv1 name := key1 ident
    lv1 body :> adr1
    lv1 access := access_read
    lv1 function :> current_function
    e define lv1:name addressof:lv1 e:module
    var Link:Argument adr2 :> argument local Address
    var Link:LocalVariable lv2 :> new LocalVariable
    lv2 name := key2 ident
    lv2 body :> adr2
    lv2 access := access_read
    lv2 function :> current_function
    e define lv2:name addressof:lv2 e:module
    e add (instruction (the_function relation_item_addresses
  (e e:size-1) compile ?
  e suckup (e e:size-1)
  e add (instruction (the_function '. scan_next' Relation Ty
  e add (instruction (the_function 'jump if' CBool) some jum
  e add end 
  e set_void_result

export each
  lv function :> current_function
  e define lv:name addressof:lv e:module
  e suckup e:1
  var Link:Instruction end :> instruction the_function:'do n
  e add (instruction (the_function '. scan_first' Relation T
  e add (instruction (the_function 'jump if not' CBool) some
  var Link:Instruction body :> instruction the_function:'do 
  e add body
  if addressof:key1<>null
    var Link:Argument adr1 :> argument local Address
    var Link:LocalVariable lv1 :> new LocalVariable
    lv1 name := key1 ident
    lv1 body :> adr1
    lv1 access := access_read
    lv1 function :> current_function
    e define lv1:name addressof:lv1 e:module
    var Link:Argument adr2 :> argument local Address
    var Link:LocalVariable lv2 :> new LocalVariable
    lv2 name := key2 ident
    lv2 body :> adr2
    lv2 access := access_read
    lv2 function :> current_function
    e define lv2:name addressof:lv2 e:module
    e add (instruction (the_function relation_item_addresses
  (e e:size-1) compile ?
  e suckup (e e:size-1)
  e add (instruction (the_function '. scan_next' Relation Ty
  e add (instruction (the_function 'jump if' CBool) some jum
  e add end 
  e set_void_result

export each