diff --git a/collects/drscheme/private/eval.ss b/collects/drscheme/private/eval.ss index 74848d4753..6eedc4e2dc 100644 --- a/collects/drscheme/private/eval.ss +++ b/collects/drscheme/private/eval.ss @@ -19,15 +19,18 @@ (import [prefix drscheme:language-configuration: drscheme:language-configuration/internal^] [prefix drscheme:rep: drscheme:rep^] [prefix drscheme:init: drscheme:init^] - [prefix drscheme:language: drscheme:language^]) + [prefix drscheme:language: drscheme:language^] + [prefix drscheme:unit: drscheme:unit^]) (export drscheme:eval^) (define (editor->port-name txt) (let* ([b (box #f)] [n (send txt get-filename b)]) (cond - [(or (unbox b) (not n)) - 'unknown] + [(or (unbox b) (not n)) + (if (is-a? txt drscheme:unit:definitions-text<%>) + (send txt get-port-name-identifier) + 'unknown)] [else n]))) (define (traverse-program/multiple language-settings diff --git a/collects/drscheme/private/rep.ss b/collects/drscheme/private/rep.ss index 24a36ed59a..22e16a3409 100644 --- a/collects/drscheme/private/rep.ss +++ b/collects/drscheme/private/rep.ss @@ -756,8 +756,7 @@ TODO (number? (srcloc-position loc)) (number? (srcloc-span loc)))) (map (λ (srcloc) - (if (equal? (normal-case-path (normalize-path (send definitions-text get-filename))) - (normal-case-path (normalize-path (srcloc-source srcloc)))) + (if (send definitions-text port-name-matches? (srcloc-source srcloc)) (make-srcloc definitions-text (srcloc-line srcloc) (srcloc-column srcloc) diff --git a/collects/drscheme/private/unit.ss b/collects/drscheme/private/unit.ss index a0b627d48b..4c048635a7 100644 --- a/collects/drscheme/private/unit.ss +++ b/collects/drscheme/private/unit.ss @@ -92,7 +92,9 @@ module browser threading seems wrong. get-tab get-next-settings after-set-next-settings - set-needs-execution-message)) + set-needs-execution-message + get-port-name-identifier + port-name-matches?)) (define-struct teachpack-callbacks (get-names ;; settings -> (listof string) @@ -403,6 +405,20 @@ module browser threading seems wrong. (define/public (get-tab) tab) (define/public (set-tab t) (set! tab t)) + (define port-name-identifier #f) + (define/public (get-port-name-identifier) + (unless port-name-identifier + (set! port-name-identifier (gensym 'unsaved-editor))) + port-name-identifier) + (define/public (port-name-matches? id) + (let ([filename (get-filename)]) + (or (and (path? id) + (path? filename) + (equal? (normal-case-path (normalize-path (get-filename))) + (normal-case-path (normalize-path id)))) + (and (symbol? port-name-identifier) + (equal? port-name-identifier id))))) + (inherit get-surrogate set-surrogate) (define/public (set-current-mode mode) (let ([surrogate (drscheme:modes:mode-surrogate mode)])