Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (JMP stack-machine target)
- (run-stack-machine (make-stack-machine (get-stack stack-machine)
- (get-varnames stack-machine)
- (get-consts stack-machine)
- (get-names stack-machine)
- (get-code stack-machine)
- (quotient target 2))))
- (define cmpcodes (list < <= eq? (compose not eq?) > >= member (compose not member)))
- (define (CMP stack-machine i)
- (let ((TOS (top (get-stack stack-machine)))
- (TOS1 (top (pop (get-stack stack-machine)))))
- (let ((f (car (drop cmpcodes i))))
- (let ((res (f TOS1 TOS)))
- (run-stack-machine (make-stack-machine (push res (cddr (get-stack stack-machine)))
- (get-varnames stack-machine)
- (get-consts stack-machine)
- (get-names stack-machine)
- (get-code stack-machine)
- (add1 (get-IC stack-machine))))))))
- (define (IF_JMP stack-machine target bool)
- (if (eq? bool (top (get-stack stack-machine)))
- (run-stack-machine (make-stack-machine (pop(get-stack stack-machine))
- (get-varnames stack-machine)
- (get-consts stack-machine)
- (get-names stack-machine)
- (get-code stack-machine)
- (quotient target 2)))
- (run-stack-machine (make-stack-machine (pop(get-stack stack-machine))
- (get-varnames stack-machine)
- (get-consts stack-machine)
- (get-names stack-machine)
- (get-code stack-machine)
- (add1 (get-IC stack-machine))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement