/pliant/language/type/pointer/address.pli
 
 1  scope "/pliant/language/" "/pliant/install/" 
 2  module "/pliant/install/ring2.pli" 
 3   
 4  meta '. translate' e 
 5    if e:size<>or not (e:cast Address) or (e:constant Type)=null 
 6      return 
 7    suckup e:0 
 8    var Link:Type :> (e:constant Type) map Type 
 9    var Link:Argument :> argument constant Int t:size 
 10    var Link:Argument :> argument local Address 
 11    add (instruction (the_function '+' Int Int -> Int) e:0:result a) 
 12    set_result access_read 
 13   
 14  meta '. map' e 
 15    if e:size<>or not (e:cast Address) or (e:constant Type)=null or not (e:cast Int) 
 16      return 
 17    suckup e:0 ; suckup e:2 
 18    var Link:Type :> (e:constant Type) map Type 
 19    var Link:Argument :> argument constant Int t:size 
 20    var Link:Argument :> argument local Int 
 21    add (instruction (the_function '*' Int Int -> Int) e:2:result m) 
 22    var Link:Argument :> argument local Address 
 23    add (instruction (the_function '+' Int Int -> Int) e:0:result a) 
 24    set_result (argument indirect 0) access_read+access_write 
 25   
 26  export '. translate' '. map'