From 4e987026148fe65c323afbc93cd560c07bf06b3f Mon Sep 17 00:00:00 2001 From: Yale AI Dept Date: Wed, 14 Jul 1993 13:08:00 -0500 Subject: Import to github. --- printers/print-modules.scm | 125 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 printers/print-modules.scm (limited to 'printers/print-modules.scm') diff --git a/printers/print-modules.scm b/printers/print-modules.scm new file mode 100644 index 0000000..2372714 --- /dev/null +++ b/printers/print-modules.scm @@ -0,0 +1,125 @@ +;;; print-modules.scm -- print routines for module-related AST structures +;;; +;;; author : Sandra Loosemore +;;; date : 6 Jan 1992 +;;; +;;; +;;; This file corresponds to the file ast/modules.scm. + +;;; Note: by default, only the module name is printed. To print the +;;; full module, the function print-full-module must be called. + +(define *print-abbreviated-modules* '#t) + +(define-ast-printer module (object xp) + (if *print-abbreviated-modules* + (begin + (write-string "Module " xp) + (write-string (symbol->string (module-name object)) xp)) + (do-print-full-module object xp))) + +(define (print-full-module object . maybe-stream) + (let ((stream (if (not (null? maybe-stream)) + (car maybe-stream) + (current-output-port)))) + (dynamic-let ((*print-abbreviated-modules* '#f)) + (pprint object stream)))) + +(define (do-print-full-module object xp) + (dynamic-let ((*print-abbreviated-modules* '#t)) + (let ((modid (module-name object)) + (exports (module-exports object)) + (body (append (module-imports object) + (module-fixities object) + (module-synonyms object) + (module-algdatas object) + (module-classes object) + (module-instances object) + (if (or (not (module-default object)) + (eq? (module-default object) + *standard-module-default*)) + '() + (list (module-default object))) + (module-decls object)))) + (write-string "module " xp) + (write-modid modid xp) + (when (not (null? exports)) + (write-whitespace xp) + (write-commaized-list exports xp)) + (write-wheredecls body xp)))) + +(define-ast-printer import-decl (object xp) + (let ((modid (import-decl-module-name object)) + (mode (import-decl-mode object)) + (specs (import-decl-specs object)) + (renamings (import-decl-renamings object))) + (with-ast-block (xp) + (write-string "import " xp) + (write-modid modid xp) + (if (eq? mode 'all) + (when (not (null? specs)) + (write-whitespace xp) + (write-string "hiding " xp) + (write-commaized-list specs xp)) + (begin + (write-whitespace xp) + (write-commaized-list specs xp))) + (when (not (null? renamings)) + (write-whitespace xp) + (write-string "renaming " xp) + (write-commaized-list renamings xp)) + ))) + +(define-ast-printer entity-module (object xp) + (write-modid (entity-name object) xp) + (write-string ".." xp)) + +(define-ast-printer entity-var (object xp) + (write-varid (entity-name object) xp)) + +(define-ast-printer entity-con (object xp) + (write-tyconid (entity-name object) xp)) + +(define-ast-printer entity-abbreviated (object xp) + (write-tyconid (entity-name object) xp) + (write-string "(..)" xp)) + +(define-ast-printer entity-class (object xp) + (with-ast-block (xp) + (write-tyclsid (entity-name object) xp) + (write-whitespace xp) + (write-delimited-list (entity-class-methods object) xp + (function write-varid) "," "(" ")"))) + +(define-ast-printer entity-datatype (object xp) + (with-ast-block (xp) + (write-tyconid (entity-name object) xp) + (write-whitespace xp) + (write-delimited-list (entity-datatype-constructors object) xp + (function write-conid) "," "(" ")"))) + + +(define-ast-printer renaming (object xp) + (with-ast-block (xp) + (write-varid-conid (renaming-from object) xp) + (write-string " to" xp) + (write-whitespace xp) + (write-varid-conid (renaming-to object) xp))) + +;;; *** Should it omit precedence if it's 9? + +(define-ast-printer fixity-decl (object xp) + (let* ((fixity (fixity-decl-fixity object)) + (associativity (fixity-associativity fixity)) + (precedence (fixity-precedence fixity)) + (ops (fixity-decl-names object))) + (with-ast-block (xp) + (cond ((eq? associativity 'l) + (write-string "infixl " xp)) + ((eq? associativity 'r) + (write-string "infixr " xp)) + ((eq? associativity 'n) + (write-string "infix " xp))) + (write precedence xp) + (write-whitespace xp) + (write-delimited-list ops xp (function write-varop-conop) "," "" "")))) -- cgit v1.2.3