On 6/18/07, Dan Amelang <[EMAIL PROTECTED]> wrote:
>
> Basically, I just want to walk one step up the clone family...
> Besides poking around in memory, I don't see a way to do this
> in jolt.

Here's a version of "super" I just coded up that uses this
memory-poking approach to get at the base. Comments welcome.

(syntax super
  (lambda (node compiler)
    (let ((selector [node at: '1])
          (args [node copyFrom: '2]))
      `(let ((base-vtable (long@ (+ [self _vtable] 8)))
             (__closure [[base-vtable lookup: ,selector] value]))
         ((long@ __closure) __closure self self ,@args)))))

(define [SubClass print: this]
  (super 'print: "something else"))

I know it could use some error checking, and I make an assumption that
size_t and oop are 4 bytes wide (which is not portable). Besides that,
I think it'll do.

Oh, and if we had something like "thisContext", I wouldn't even need
the "selector" parameter to super, as it could be extracted from
thisContext. But I'm sure Ian's got more important things to do :)

Dan
_______________________________________________
fonc mailing list
fonc@vpri.org
http://vpri.org/mailman/listinfo/fonc

Reply via email to