From 68029b4adec9f7f8596d9056574ded551265a8f6 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 16 May 2012 06:37:03 -0600 Subject: [PATCH] raco decompile: show `require's --- collects/compiler/decompile.rkt | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/collects/compiler/decompile.rkt b/collects/compiler/decompile.rkt index ff3d99c342..9341f939c1 100644 --- a/collects/compiler/decompile.rkt +++ b/collects/compiler/decompile.rkt @@ -4,7 +4,8 @@ racket/port racket/match racket/list - racket/set) + racket/set + racket/path) (provide decompile) @@ -162,7 +163,10 @@ (cond [(symbol? modidx) modidx] [else - (collapse-module-path-index modidx (current-directory))])) + (collapse-module-path-index modidx (build-path + (or (current-load-relative-directory) + (current-directory)) + "here.rkt"))])) (define (decompile-module mod-form orig-stack stx-ht mod-name) (match mod-form @@ -172,6 +176,28 @@ [(stack) (append '(#%modvars) orig-stack)] [(closed) (make-hasheq)]) `(,mod-name ,(if (symbol? name) name (last name)) .... + ,@(let ([l (apply + append + (for/list ([req (in-list requires)] + #:when (pair? (cdr req))) + (define l (for/list ([mpi (in-list (cdr req))]) + (define p (mpi->string mpi)) + (if (path? p) + (let ([d (current-load-relative-directory)]) + (path->string (if d + (find-relative-path d p #:more-than-root? #t) + p))) + p))) + (if (eq? 0 (car req)) + l + `((,@(case (car req) + [(#f) `(for-label)] + [(1) `(for-syntax)] + [else `(for-meta ,(car req))]) + ,@l)))))]) + (if (null? l) + null + `((require ,@l)))) ,@defns ,@(for/list ([submod (in-list pre-submodules)]) (decompile-module submod orig-stack stx-ht 'module))