Files
gyehoek-hs/doc/abi.org
T
2026-08-17 16:17:53 -06:00

1.3 KiB

ABI

largely based on the Guile Hoot's ABI.

calling convention

non-tail calls

  • set the global variable $current-closure to the callee's closure.
  • load arguments into globals $arg0, $arg1, $arg2, …
  • push return continuation onto $cont-stack

scratchpad

  ;; Scheme source
  (define (silly f g h x)
    (f (h x) (g x)))


  ;; continuation-passing style
  (define (silly f g h x ktail)
    (h x (κ (x0)
            (g x (κ (x1)
                    (f x0 x1 ktail))))))

  ;; with explicit stacks
  (define (silly)
    (define f (pop!))
    (define g (pop!))
    (define h (pop!))
    (define x (pop!))
    (define ktail (pop-cont!))
    (push-cont! (κ (x0)
                   (define x* (pop!))
                   (define g* (pop!))
                   (push-cont! (κ (x1)
                                  (define f* (pop!))
                                  (define x0* (pop!))
                                  (push-cont! ktail)
                                  (push! x0*)
                                  (push! x1)
                                  (call! f)))
                   (push! x*)
                   (call! g)))
    (push! x)
    (call! h))