Path: news.daimi.aau.dk!news.uni-c.dk!sunic!sunic.sunet.se!news.funet.fi!news.csc.fi!news.eunet.fi!EU.net!howland.reston.ans.net!math.ohio-state.edu!jussieu.fr!univ-lyon1.fr!swidir.switch.ch!newsfeed.ACO.net!aci.cvut.cz!risc.upol.cz!decsys.vsb.cz!newsmast From: Marek Novy Newsgroups: comp.lang.beta Subject: Re: Overriding procedural patterns Date: 17 May 1995 10:18:18 GMT Organization: Technical University of Ostrava, Czech Republic Lines: 61 Message-ID: <3pciha$s0p@decsys.vsb.cz> References: <3o315c$9he@pulm1.accessone.com> <3odefd$hbp@belfort.daimi.aau.dk> <3otick$ NNTP-Posting-Host: odysseus.zcu.cz Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 1.1b2 (X11; I; IRIX 5.3 IP20) X-URL: news:3otick$s3l@belfort.daimi.aau.dk rws@daimi.aau.dk (Rene Wenzel Schmidt) wrote: [stuff deleted] >Code for e: (no change form current implementation) > >Me: putCharE > jump-subrutine [IDT+0] ; IDP is a register pointing to the > return ; INNER dispatch table > >Code for f: > >Mf: putString > jump-subrutine Me ; OUTER: Jumps directly to code for e > jump-subrutine [IDT+1] ; INNER: standard code. The offset is > ; 1 because it is the second INNER Why can't it be [IDT+0]. It will have always same value. Every ':!' can decrease the usual size of IDT by one. > return > >Code for g: > >Mg: putCharG > return > >The virtual-dispatch table for a call of G will have two >entries because there is two INNERs. Both of the entries >will point to Mg. > >IDTg: .word Mg > .word Mg > >A call of g will be translated into to: > >load IDT,IDTg >jump-subrutine Mf Also speaking to Erik. What do you say to that: :! (# ..... do ;#); where: Object >= 'functional-ancestor' >= 'structural-ancestor' So it means the 'over' will be bound to the 'functional-ancestor' inner. Outer has similar meaning, it directly calls imperatives replaced by over. Also inner is similar, it calls indirectly imperatives of a functional descendant. Limit cases: B:A!A(#....#); is equal to usual B:A(#....#); C:A!Object(#....#); is equal to Erik's C:!A(#....#); Implementation is straightforward using inner dispatch table. Is it right? -- Marek Novy, University of West Bohemia +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Look at BatOS. A new approach to object OS : http://ody.zcu.cz/~novy1