マンガ書いてみる

ココのマンガを参考にしつつ。
最初の状態が以下?

  sp>|        |
     +........+
     | size   |
     | info   |
     |  up    |
argp>| arg[0] |
     +--------+
     .        .
     .        .
     +--------+
     |        |
 env>| ENV    |
     +--------+
     .        .
     .        .
     +--------+
     |        |
cont>| CONT   |
     +--------+
     .        .
     .        .

あら、違うな。こう?

argp,sp>|        |
        +........+
        | size   |
        | info   |
        |  up    |
        | arg[0] |
        +--------+
        .        .
        .        .
        +--------+
        |        |
    env>| ENV    |
        +--------+
        .        .
        .        .
        +--------+
        |        |
   cont>| CONT   |
        +--------+
     .        .
     .        .

FINISH_ENV なマクロで ARGP に SP 代入しております。あら。ENV も微妙ですね。
どこを始点すれば良いのか微妙だな。最初何もナシ、という前提にて最初から見てみる。

PRE-CALL

以下。

#define PUSH_CONT(next_pc)                              \
    do {                                                \
        ScmContFrame *newcont = (ScmContFrame*)SP;      \
        newcont->prev = CONT;                           \
        newcont->env = ENV;                             \
        newcont->argp = ARGP;                           \
        newcont->size = SP - ARGP;                      \
        newcont->pc = next_pc;                          \
        newcont->base = BASE;                           \
        CONT = newcont;                                 \
        SP += CONT_FRAME_SIZE;                          \
        ARGP = SP;                                      \
    } while (0)

終了時点のスタックの状態が以下?

argp,sp>|        |
        +--------+
        | base   |
        | pc     |
        | size   |
        | argp   |
        | env    |
   cont>| prev   |
        +--------+

CONSTI-PUSH(1) されて時点が以下?

     sp>|        |
   argp>|   1    |   ;; scheme object
        +--------+
        | base   |
        | pc     |
        | size   |
        | argp   |
        | env    |
   cont>| prev   |
        +--------+

CALL でどうなるか、というと以下?

argp,sp>|        |
        +--------+
        | size   |
        | info   |
    env>| up     |
        |   1    |   ;; scheme object
        +--------+
        | base   |
        | pc     |
        | size   |
        | argp   |
        | env    |
   cont>| prev   |
        +--------+

引数数が無い時、とか CLOSURE ではない時、とか末尾呼び出し、とかその他諸々で状態は違うはず。とりあえずこれが元、でマンガ書いてみた方が良さげ。
とりあえず今日はもう寝ます。