From 139f4ff08b12453021b47952f9d7ceb7942e931b Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 3 Jun 2021 23:23:22 +0200 Subject: [PATCH] Accept parameters in #lang preserves-schema lines --- .../preserves-schema/bin/preserves-schema-rkt.rkt | 2 +- .../racket/preserves/preserves-schema/main.rkt | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/implementations/racket/preserves/preserves-schema/bin/preserves-schema-rkt.rkt b/implementations/racket/preserves/preserves-schema/bin/preserves-schema-rkt.rkt index 2defb6e..0b64868 100644 --- a/implementations/racket/preserves/preserves-schema/bin/preserves-schema-rkt.rkt +++ b/implementations/racket/preserves/preserves-schema/bin/preserves-schema-rkt.rkt @@ -2,7 +2,7 @@ (provide batch-compile load-plugins) -(require "../main.rkt") +(require "../compiler.rkt") (require "../reader.rkt") (require racket/match) (require racket/pretty) diff --git a/implementations/racket/preserves/preserves-schema/main.rkt b/implementations/racket/preserves/preserves-schema/main.rkt index d6d2967..9bcbbe4 100644 --- a/implementations/racket/preserves/preserves-schema/main.rkt +++ b/implementations/racket/preserves/preserves-schema/main.rkt @@ -6,13 +6,28 @@ (module+ reader (provide (rename-out [read-preserves-schema-module read-syntax])) + (require racket/match) (require (only-in "reader.rkt" port->schema)) + (require (only-in racket/port port->list)) + (require (only-in "bin/preserves-schema-rkt.rkt" load-plugins)) (define (read-preserves-schema-module src [p (current-input-port)]) (define-values (_dirname filename _must-be-dir) (split-path src)) + (define plugin-modules '()) + (let loop ((params (port->list read (open-input-string (read-line p))))) + (match params + ['() + (void)] + [(list* '#:plugin modname more) + (set! plugin-modules (cons modname plugin-modules)) + (loop more)] + [other + (raise-syntax-error #f "Invalid #lang preserves-schema parameters: ~v" other)])) + (define plugins (load-plugins plugin-modules)) (schema->module-stx (string->symbol (path->string (path-replace-extension filename ""))) (lambda (module-path) #f) (port->schema src p) + #:plugins plugins #:translation-paths (schema-translation-paths src filename #f