| |
| /pliant/language/compiler/type/inherit.pli |
| |
| 1 |
module "/pliant/install/ring1.pli" | |
| 2 |
| |
| 3 |
meta inherit e | |
| 4 |
if e:size<>1 | |
| 5 |
return | |
| 6 |
var Pointer:Type interface :> (e:0 constant Type) map Type | |
| 7 |
if addressof:interface=null | |
| 8 |
return | |
| 9 |
var Pointer:Arrow c :> e:module first "pliant type" | |
| 10 |
if c=null or entry_type:c<>Type | |
| 11 |
return | |
| 12 |
var Pointer:Type implementation :> c map Type | |
| 13 |
if interface:nb_fields<>0 and implementation:nb_fields<>0 | |
| 14 |
return | |
| 15 |
for (var Int i) 0 interface:nb_fields-1 | |
| 16 |
var Pointer:TypeField f :> interface field i | |
| 17 |
implementation define_field f:type f:name f:initial_value | |
| 18 |
interface maybe implementation | |
| 19 |
e set_void_result | |
| 20 |
| |
| 21 |
export inherit | |
| |