Inline reader module; add port->preserves

This commit is contained in:
Tony Garnock-Jones 2021-05-26 13:56:37 +02:00
parent ed3cd8de26
commit 7ab12108e4
3 changed files with 28 additions and 22 deletions

View File

@ -1,21 +0,0 @@
#lang racket/base
(provide (rename-out [read-preserves-schema-module read-syntax]))
(require preserves)
(require racket/port)
(require "../reader.rkt")
(require "../compiler.rkt")
(define (read-preserves-schema-module src [p (current-input-port)])
(define-values (_dirname filename _must-be-dir) (split-path src))
(define module-stx
(schema->module-stx
(string->symbol (path->string (path-replace-extension filename "")))
(parse-schema-dsl (port->list (lambda (p) (read-preserve p #:read-syntax? #t #:source src)) p)
#:source src
#:read-include (lambda (src) (file->preserves src #:read-syntax? #t)))))
;; (local-require racket/pretty)
;; (pretty-write module-stx) (newline)
module-stx)

View File

@ -2,4 +2,18 @@
(provide schema->module-stx)
(require "compiler.rkt")
(require (only-in "compiler.rkt" schema->module-stx))
(module+ reader
(provide (rename-out [read-preserves-schema-module read-syntax]))
(require (only-in preserves port->preserves file->preserves))
(require (only-in "reader.rkt" parse-schema-dsl))
(define (read-preserves-schema-module src [p (current-input-port)])
(define-values (_dirname filename _must-be-dir) (split-path src))
(schema->module-stx
(string->symbol (path->string (path-replace-extension filename "")))
(parse-schema-dsl (port->preserves p #:read-syntax? #t #:source src)
#:source src
#:read-include (lambda (src) (file->preserves src #:read-syntax? #t))))))

View File

@ -13,10 +13,12 @@
detect-preserve-syntax
read-preserve
port->preserves
file->preserves)
(require racket/match)
(require (only-in racket/file file->list))
(require (only-in racket/port port->list))
(require "record.rkt")
(require "float.rkt")
@ -56,3 +58,14 @@
#:read-syntax? read-syntax?
#:decode-embedded decode-embedded
#:source path))))
(define (port->preserves in-port
#:read-syntax? [read-syntax? #f]
#:decode-embedded [decode-embedded #f]
#:source [source (object-name in-port)])
(port->list (lambda (in-port)
(read-preserve in-port
#:read-syntax? read-syntax?
#:decode-embedded decode-embedded
#:source source))
in-port))