|
6 | 6 | ;; Op1 Value* Heap -> Answer* |
7 | 7 | (define (interp-prim1 p v h) |
8 | 8 | (match (list p v) |
9 | | - [(list 'add1 (? int-bits? i)) (cons h (+ i (imm->bits 1)))] |
10 | | - [(list 'sub1 (? int-bits? i)) (cons h (- i (imm->bits 1)))] |
11 | | - [(list 'zero? (? int-bits? i)) (cons h (imm->bits (zero? i)))] |
12 | | - [(list 'char? v) (cons h (imm->bits (char-bits? v)))] |
13 | | - [(list 'char->integer (? char-bits?)) (cons h (imm->bits (char->integer (bits->value v))))] |
14 | | - [(list 'integer->char (? cp-bits?)) (cons h (imm->bits (integer->char (bits->value v))))] |
15 | | - [(list 'eof-object? v) (cons h (if (= v (imm->bits eof)) val-true val-false))] |
| 9 | + [(list 'add1 (? int-bits? i)) (cons h (+ i (value->bits 1)))] |
| 10 | + [(list 'sub1 (? int-bits? i)) (cons h (- i (value->bits 1)))] |
| 11 | + [(list 'zero? (? int-bits? i)) (cons h (value->bits (zero? i)))] |
| 12 | + [(list 'char? v) (cons h (value->bits (char-bits? v)))] |
| 13 | + [(list 'char->integer (? char-bits?)) (cons h (value->bits (char->integer (bits->value v))))] |
| 14 | + [(list 'integer->char (? cp-bits?)) (cons h (value->bits (integer->char (bits->value v))))] |
| 15 | + [(list 'eof-object? v) (cons h (if (= v (value->bits eof)) val-true val-false))] |
16 | 16 | [(list 'write-byte (? byte-bits?)) (cons h (begin (write-byte (bits->value v)) val-void))] |
17 | 17 | [(list 'box v) (alloc-box v h)] |
18 | 18 | [(list 'unbox (? box-bits? i)) (cons h (heap-ref h i))] |
19 | 19 | [(list 'car (? cons-bits? i)) (cons h (heap-ref h i))] |
20 | 20 | [(list 'cdr (? cons-bits? i)) (cons h (heap-ref h (+ i (arithmetic-shift 1 imm-shift))))] |
21 | | - [(list 'empty? v) (cons h (if (= (imm->bits '()) v) val-true val-false))] |
| 21 | + [(list 'empty? v) (cons h (if (= (value->bits '()) v) val-true val-false))] |
22 | 22 | [_ 'err])) |
23 | 23 |
|
24 | 24 | ;; Op2 Value* Value* Heap -> Answer* |
25 | 25 | (define (interp-prim2 p v1 v2 h) |
26 | 26 | (match (list p v1 v2) |
27 | 27 | [(list '+ (? int-bits? i1) (? int-bits? i2)) (cons h (+ i1 i2))] |
28 | 28 | [(list '- (? int-bits? i1) (? int-bits? i2)) (cons h (- i1 i2))] |
29 | | - [(list '< (? int-bits? i1) (? int-bits? i2)) (cons h (imm->bits (< i1 i2)))] |
30 | | - [(list '= (? int-bits? i1) (? int-bits? i2)) (cons h (imm->bits (= i1 i2)))] |
31 | | - [(list 'eq? v1 v2) (cons h (imm->bits (= v1 v2)))] |
| 29 | + [(list '< (? int-bits? i1) (? int-bits? i2)) (cons h (value->bits (< i1 i2)))] |
| 30 | + [(list '= (? int-bits? i1) (? int-bits? i2)) (cons h (value->bits (= i1 i2)))] |
| 31 | + [(list 'eq? v1 v2) (cons h (value->bits (= v1 v2)))] |
32 | 32 | [(list 'cons v1 v2) (alloc-cons v1 v2 h)] |
33 | 33 | [_ 'err])) |
34 | 34 |
|
35 | 35 | ;; Bits -> Boolean |
36 | 36 | (define (byte-bits? i) |
37 | 37 | (and (int-bits? i) |
38 | | - (<= (imm->bits 0) i (imm->bits 255)))) |
| 38 | + (<= (value->bits 0) i (value->bits 255)))) |
39 | 39 |
|
40 | 40 | ;; Bits -> Boolean |
41 | 41 | (define (cp-bits? v) |
42 | 42 | (and (int-bits? v) |
43 | | - (or (<= (imm->bits 0) v (imm->bits 55295)) |
44 | | - (<= (imm->bits 57344) v (imm->bits 1114111))))) |
| 43 | + (or (<= (value->bits 0) v (value->bits 55295)) |
| 44 | + (<= (value->bits 57344) v (value->bits 1114111))))) |
0 commit comments