SICP 読み (287) 5.4 積極制御評価器

早起きしてデバッガを試してみたら動かない。これはこれで原因を調べないと駄目だな。

問題 5.24 の続き

exp を push していないのが原因だった模様。ev-cond-なんたらを以下に。

ev-cond
    (assign exp (op cond-clauses) (reg exp))

ev-cond-loop
    (test (op null?) (reg exp))
    (branch (label ev-cond-false))
    (assign unev (op cdr) (reg exp))
    (assign exp (op car) (reg exp))
    (test (op cond-else-clause?) (reg exp))
    (branch (label ev-cond-consequent))
    (save exp)
    (save unev)
    (save env)
    (save continue)
    (assign continue (label ev-cond-decide))
    (assign exp (op cond-predicate) (reg exp))
    (goto (label eval-dispatch))

ev-cond-decide
    (restore continue)
    (restore env)
    (restore unev)
    (restore exp)
    (test (op true?) (reg val))
    (branch (label ev-cond-consequent))
    (assign exp (reg unev))
    (goto (label ev-cond-loop))

ev-cond-consequent
    (save continue)
    (assign unev (op cond-actions) (reg exp))
    (goto (label ev-sequence))

ev-cond-false
    (assign val (const false))
    (goto (reg continue))

ev-cond-false も動作確認は未実施。一応の動作確認はできてますが ...
# 別途確認入れ次第、追記を予定しとります。