1(library (nmosh bootstrap util) 2 (export read-all 3 compile-to-codevector 4 compile-to-codevector/toplevel 5 obj->fasl 6 fasl->obj 7 write-cobj) 8 9 (import (only (mosh) format) 10 (rnrs) (srfi :8) (srfi :42) 11 #| 12 (only 13 (nmosh boot compiler) 14 compile compile-w/o-halt) 15 |# 16 (primitives 17 compile compile-w/o-halt) 18 (primitives 19 fasl-read 20 fasl-write!)) 21 22; from binary2c.scm 23(define (do-write-cobj name p bv) 24 (format p "static const uint8_t ~a_image[] = {" name) 25 (do-ec (: i 0 (bytevector-length bv)) 26 (begin (when (zero? (mod i 15)) (newline p)) 27 (format p "0x~a," (number->string (bytevector-u8-ref bv i) 16)))) 28 (display "\n};\n" p)) 29 30(define (write-cobj name p bv) 31 (let ((s (call-with-string-output-port (lambda (port) (do-write-cobj name port bv))))) 32 (put-string p s))) 33 34(define (compile-to-codevector/toplevel l) 35 (compile l)) 36 37(define (compile-to-codevector l) 38 (compile-w/o-halt l)) 39 40(define (obj->fasl obj) 41 (receive (port bv-proc) (open-bytevector-output-port) 42 (fasl-write! obj port) 43 (bv-proc))) 44 45(define (fasl->obj fasl) 46 (call-with-port (open-bytevector-input-port fasl) fasl-read)) 47 48(define (read-all fn) 49 (define (reader p) 50 (define (itr cur) 51 (let ((e (read p))) 52 (if (eof-object? e) 53 (reverse cur) 54 (itr (cons e cur))))) 55 (itr '())) 56 (call-with-input-file fn reader)) 57) 58