File tree 4 files changed +13
-4
lines changed
4 files changed +13
-4
lines changed Original file line number Diff line number Diff line change 99
99
(Sar rax char-shift)
100
100
(Sal rax int-shift))]
101
101
['integer->char
102
- (seq assert-codepoint
102
+ (seq ( assert-codepoint #f )
103
103
(Sar rax int-shift)
104
104
(Sal rax char-shift)
105
105
(Xor rax type-char))]
253
253
(define assert-cons
254
254
(assert-type ptr-mask type-cons))
255
255
256
- (define assert-codepoint
256
+ (define ( assert-codepoint x)
257
257
(let ((ok (gensym)))
258
258
(seq (assert-integer rax)
259
259
(Cmp rax (imm->bits 0 ))
Original file line number Diff line number Diff line change 56
56
(define (cons-bits? v)
57
57
(zero? (bitwise-xor (bitwise-and v imm-mask) type-cons)))
58
58
59
+ (define (string-bits? v)
60
+ (zero? (bitwise-xor (bitwise-and v imm-mask) type-string)))
61
+
59
62
(define (box-bits? v)
60
63
(zero? (bitwise-xor (bitwise-and v imm-mask) type-box)))
Original file line number Diff line number Diff line change 18
18
(box (unload-value (heap-ref i)))]
19
19
[(? cons-bits? i)
20
20
(cons (unload-value (heap-ref (+ i (arithmetic-shift 1 imm-shift))))
21
- (unload-value (heap-ref i)))]))
21
+ (unload-value (heap-ref i)))]
22
+ [(? string-bits? i)
23
+ (let* ((n (unload-value (heap-ref i)))
24
+ (cs (map (lambda (j) (unload-value (heap-ref (+ i (* 8 j) 8 )))) (build-list n values))))
25
+ (apply string cs))]
26
+ ))
22
27
23
28
(define (untag i)
24
29
(arithmetic-shift (arithmetic-shift i (- (integer-length ptr-mask)))
Original file line number Diff line number Diff line change 13
13
(match v
14
14
[(? integer?) v]
15
15
[(? boolean?) v]
16
- [(? char?) v]
16
+ [(? char?) v]
17
+ [(? string?) v]
17
18
[(? eof-object?) v]
18
19
[(? void?) v]
19
20
['() '() ]
You can’t perform that action at this time.
0 commit comments