Skip to content

Commit 1b6cc3b

Browse files
committed
More Scheme readback machinery
We need these things in the next version so that the next-but-one version can have a scheme evaluator!
1 parent 976586f commit 1b6cc3b

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

support/chez/support.ss

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@
504504
(if (number? obj) 1 0))
505505

506506
(define (blodwen-is-integer obj)
507-
(if (integer? obj) 1 0))
507+
(if (and (number? obj) (exact? obj)) 1 0))
508508

509509
(define (blodwen-is-float obj)
510510
(if (flonum? obj) 1 0))
@@ -530,6 +530,9 @@
530530
(define (blodwen-is-pair obj)
531531
(if (pair? obj) 1 0))
532532

533+
(define (blodwen-is-box obj)
534+
(if (box? obj) 1 0))
535+
533536
(define (blodwen-make-symbol str)
534537
(string->symbol str))
535538

@@ -541,9 +544,18 @@
541544
(define (blodwen-vector-length obj)
542545
(vector-length obj))
543546

547+
(define (blodwen-vector-list obj)
548+
(vector->list obj))
549+
550+
(define (blodwen-unbox obj)
551+
(unbox obj))
552+
544553
(define (blodwen-apply obj arg)
545554
(obj arg))
546555

556+
(define (blodwen-force obj)
557+
(obj))
558+
547559
(define (blodwen-read-symbol sym)
548560
(symbol->string sym))
549561

support/racket/support.rkt

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,3 +471,84 @@
471471
(define (blodwen-register-object obj proc)
472472
(register-finalizer obj (lambda (ptr) ((proc ptr) 'erased)))
473473
obj)
474+
475+
;; For creating and reading back scheme objects
476+
477+
(define ns (make-base-namespace))
478+
479+
; read a scheme string and evaluate it, returning 'Just result' on success
480+
; TODO: catch exception!
481+
(define (blodwen-eval-scheme str)
482+
(box (eval (read (open-input-string str)) ns))) ; box == Just
483+
484+
(define (blodwen-eval-okay obj)
485+
(if (null? obj)
486+
0
487+
1))
488+
489+
(define (blodwen-get-eval-result obj)
490+
(unbox obj))
491+
492+
(define (blodwen-debug-scheme obj)
493+
(display obj) (newline))
494+
495+
(define (blodwen-is-number obj)
496+
(if (number? obj) 1 0))
497+
498+
(define (blodwen-is-integer obj)
499+
(if (and (number? obj) (exact? obj)) 1 0))
500+
501+
(define (blodwen-is-float obj)
502+
(if (flonum? obj) 1 0))
503+
504+
(define (blodwen-is-char obj)
505+
(if (char? obj) 1 0))
506+
507+
(define (blodwen-is-string obj)
508+
(if (string? obj) 1 0))
509+
510+
(define (blodwen-is-procedure obj)
511+
(if (procedure? obj) 1 0))
512+
513+
(define (blodwen-is-symbol obj)
514+
(if (symbol? obj) 1 0))
515+
516+
(define (blodwen-is-vector obj)
517+
(if (vector? obj) 1 0))
518+
519+
(define (blodwen-is-nil obj)
520+
(if (null? obj) 1 0))
521+
522+
(define (blodwen-is-pair obj)
523+
(if (pair? obj) 1 0))
524+
525+
(define (blodwen-is-box obj)
526+
(if (box? obj) 1 0))
527+
528+
(define (blodwen-make-symbol str)
529+
(string->symbol str))
530+
531+
; The below rely on checking that the objects are the right type first.
532+
533+
(define (blodwen-vector-ref obj i)
534+
(vector-ref obj i))
535+
536+
(define (blodwen-vector-length obj)
537+
(vector-length obj))
538+
539+
(define (blodwen-vector-list obj)
540+
(vector->list obj))
541+
542+
(define (blodwen-unbox obj)
543+
(unbox obj))
544+
545+
(define (blodwen-apply obj arg)
546+
(obj arg))
547+
548+
(define (blodwen-force obj)
549+
(obj))
550+
551+
(define (blodwen-read-symbol sym)
552+
(symbol->string sym))
553+
554+
(define (blodwen-id x) x)

0 commit comments

Comments
 (0)