File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 3333 (let ((l1 (gensym 'if ))
3434 (l2 (gensym 'if )))
3535 (seq (compile-e e1)
36- (Cmp rax val-false )
36+ (Cmp rax (value->bits #f ) )
3737 (Je l1)
3838 (compile-e e2)
3939 (Jmp l2)
Original file line number Diff line number Diff line change 11#lang racket
22(provide interp interp-bits)
3- (require "ast.rkt " "types.rkt " )
3+ (require "ast.rkt " "types.rkt " " interp-prim-bits.rkt " )
44
55;; Expr -> Value
66(define (interp e)
1111 (match e
1212 [(Int i) (value->bits i)]
1313 [(Bool b) (value->bits b)]
14- [(Prim1 'add1 e0)
15- (+ (interp-bits e0) (value->bits 1 ))]
16- [(Prim1 'sub1 e0)
17- (- (interp-bits e0) (value->bits 1 ))]
18- [(Prim1 'zero? e)
19- (if (zero? (interp-bits e))
20- val-true
21- val-false)]
14+ [(Prim1 p e)
15+ (interp-prim1-bits p (interp-bits e))]
2216 [(If e1 e2 e3)
2317 (if (= (interp-bits e1) val-false)
2418 (interp-bits e3)
2519 (interp-bits e2))]))
26-
Original file line number Diff line number Diff line change 1+ #lang racket
2+ (require "types.rkt " )
3+ (provide interp-prim1-bits)
4+
5+ ;; Op Bits -> Bits
6+ (define (interp-prim1-bits op b)
7+ (match op
8+ ['add1 (+ b (value->bits 1 ))]
9+ ['sub1 (- b (value->bits 1 ))]
10+ ['zero? (= b (value->bits 0 ))]))
You can’t perform that action at this time.
0 commit comments