Work on 5.25
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
|
||||
;: (start eceval)
|
||||
(load "misc/sicp-eceval-support.scm")
|
||||
(load "misc/sicp-leval.scm")
|
||||
|
||||
;; To restart, can do just
|
||||
;: (start eceval)
|
||||
@@ -92,6 +93,11 @@
|
||||
(list 'cond? cond?)
|
||||
(list 'let->combination let->combination)
|
||||
(list 'let? let?)
|
||||
|
||||
;;5.25
|
||||
(list 'delay-it delay-it)
|
||||
(list 'thunk? thunk?)
|
||||
|
||||
))
|
||||
|
||||
(define eceval
|
||||
@@ -176,30 +182,62 @@ ev-appl-did-operator
|
||||
(test (op no-operands?) (reg unev))
|
||||
(branch (label apply-dispatch))
|
||||
(save proc)
|
||||
ev-appl-operand-loop
|
||||
|
||||
(test (op primitive-procedure?) (reg proc))
|
||||
(branch (label ev-appl-operand-loop-force))
|
||||
(test (op compound-procedure?) (reg proc))
|
||||
(branch (label ev-appl-operand-loop-delay))
|
||||
|
||||
ev-appl-operand-loop-force
|
||||
(save argl)
|
||||
(assign exp (op first-operand) (reg unev))
|
||||
(test (op last-operand?) (reg unev))
|
||||
(branch (label ev-appl-last-arg))
|
||||
(branch (label ev-appl-last-arg-force))
|
||||
(save env)
|
||||
(save unev)
|
||||
(assign continue (label ev-appl-accumulate-arg))
|
||||
(assign continue (label ev-appl-accumulate-arg-force))
|
||||
(goto (label eval-dispatch))
|
||||
ev-appl-accumulate-arg
|
||||
ev-appl-accumulate-arg-force
|
||||
(restore unev)
|
||||
(restore env)
|
||||
(restore argl)
|
||||
(assign argl (op adjoin-arg) (reg val) (reg argl))
|
||||
(assign unev (op rest-operands) (reg unev))
|
||||
(goto (label ev-appl-operand-loop))
|
||||
ev-appl-last-arg
|
||||
(assign continue (label ev-appl-accum-last-arg))
|
||||
(goto (label ev-appl-operand-loop-force))
|
||||
ev-appl-last-arg-force
|
||||
(assign continue (label ev-appl-accum-last-arg-force))
|
||||
(goto (label eval-dispatch))
|
||||
ev-appl-accum-last-arg
|
||||
ev-appl-accum-last-arg-force
|
||||
(restore argl)
|
||||
(assign argl (op adjoin-arg) (reg val) (reg argl))
|
||||
(restore proc)
|
||||
(goto (label apply-dispatch))
|
||||
|
||||
ev-appl-operand-loop-delay
|
||||
(save argl)
|
||||
(assign exp (op first-operand) (reg unev))
|
||||
(test (op last-operand?) (reg unev))
|
||||
(branch (label ev-appl-last-arg-delay))
|
||||
(save env)
|
||||
(save unev)
|
||||
(assign continue (label ev-appl-accumulate-arg-delay))
|
||||
(goto (label eval-dispatch))
|
||||
ev-appl-accumulate-arg-delay
|
||||
(restore unev)
|
||||
(restore env)
|
||||
(restore argl)
|
||||
(assign argl (op adjoin-arg) (reg val) (reg argl))
|
||||
(assign unev (op rest-operands) (reg unev))
|
||||
(goto (label ev-appl-operand-loop-delay))
|
||||
ev-appl-last-arg-delay
|
||||
(assign continue (label ev-appl-accum-last-arg-delay))
|
||||
(goto (label eval-dispatch))
|
||||
ev-appl-accum-last-arg-delay
|
||||
(restore argl)
|
||||
(assign argl (op adjoin-arg) (reg val) (reg argl))
|
||||
(restore proc)
|
||||
(goto (label apply-dispatch))
|
||||
|
||||
apply-dispatch
|
||||
(test (op primitive-procedure?) (reg proc))
|
||||
(branch (label primitive-apply))
|
||||
|
||||
Reference in New Issue
Block a user