anchor.diff:  
   \g Create member in active object
   : member ( size "name" -- ) 
  -   >oarena dup allot oarena> 
  -   create sizeof @ , sizeof +! does> @ o@ + ; immediate
  +   dup oallot  create sizeof @ , sizeof +! does> @ o@ + ; immediate
  +
  +\ Create wordlist and chain it to prototype wordlist
  +: clonewl o@ @ owordlist ! ;
  +
  +\ Clone the sizeof field
  +: clonesz sizeof @ o, ;
  +
  +: mbr?  name>xt handler mbrhandler = ;
  +: ins?  name>xt handler inshandler = ;
  +: obj?  name>xt handler objhandler = ;
  +: slot? dup mbr? swap ins? or ;
  +
  +0 value nextslot
  +
  +: (findoffset) ( offset nfa -- offset nfa )
  +   >r  r@ slot? if 
  +      r@ name>xt >body @ over = if  r@ to found else  r@ to nextslot  then
  +   then r> ;
  +
  +: offset>slot ( offset -- nfa )
  +   0 to nextslot
  +   o@ ['] (findoffset) forwordsin drop  found ;
  +
  +: forslots ( xt -- )
  +   0 to nextslot
  +   >r 0 begin dup sizeof @ < while 
  +      dup offset>slot ?dup if
  +          r@ execute
  +      then 1+
  +   repeat rdrop drop ;
  +
  +: slotoffset ( nfa -- offset )
  +   name>xt >body @ ;
  +
  +: slotaddr ( nfa -- addr )
  +   slotoffset o@ + ;
  +
  +: /slot ( nfa -- )
  +   nextslot if nextslot slotoffset else sizeof @ then swap slotoffset - ;
  +
  +: clonembr ( nfa -- )
  +   >r  r@ slotaddr  ohere  r> /slot dup oallot move ;
  +
  +: cloneins ( nfa -- )
  +   slotaddr >o (extend) late cloned extended ;
  +
  +: cloneslot ( nfa -- )
  +   dup mbr? if clonembr else cloneins then ;
  +
  +: cloneslots ( cloneaddr -- cloneaddr )
  +   ['] cloneslot forslots ;
   
   \g Clone active object
  -: cloned ( -- clone  O: prototype -- prototype )
  -   >oarena here
  -   o@ @ wordlist !  \ Create wordlist and chain it to prototype wordlist
  -   sizeof here over @ cell- cell- dup allot move  \ Clone prototype data
  -   oarena> extended >o (extend) ;
  +: cloned ( -- O: prototype -- prototype )
  +   ohere clonewl clonesz cloneslots extended >o (extend) ;
   
   : single  (extend) parse-word (late) (extended) ;
   
  
positive.code: world clone object
  \g Prototype object
  
  extended
  
negative.code: \ Current object: topmost object in object stack
  \ Active object: object that will receive subsequent messages
  
  \ Create the bootstrap world, just a wordlist and a sizeof field 
  \ in the object arena
  :noname owordlist 3 cells o, ; execute constant (world)
  
  
  \ Push the bootstrap world to the object and order stacks and establish it as 
  \ current worldist, making it the active object
  (world) >o o@ +order definitions
  
  \ Add current object to order stack and set it as current wordlist
  : (extend) ( O: obj -- obj )
     o@ +order definitions ;
  
  \ Remove active object from the order stack and restore previously
  \ current wordlist
  : (extended)  previous definitions ;
  
  \g Make current object the active object
  