diff --git a/drracket-core-lib/drracket/drracket.rkt b/drracket-core-lib/drracket/drracket.rkt index 6f3647f00..58fc4be1c 100644 --- a/drracket-core-lib/drracket/drracket.rkt +++ b/drracket-core-lib/drracket/drracket.rkt @@ -30,29 +30,26 @@ (define vec (sync evt)) (define str (vector-ref vec 1)) (when (regexp-match #rx"^cm: *compil(ing|ed)" str) - (display str) - (newline)) + (displayln str)) (loop)))))) (cond [debugging? (flprintf "PLTDRDEBUG: loading CM to load/create errortrace zos\n") - (let-values ([(zo-compile - make-compilation-manager-load/use-compiled-handler) - (parameterize ([current-namespace (make-base-empty-namespace)] - [use-compiled-file-paths '()]) - (values - (dynamic-require 'errortrace/zo-compile 'zo-compile) - (dynamic-require 'compiler/cm 'make-compilation-manager-load/use-compiled-handler)))]) - (flprintf "PLTDRDEBUG: installing CM to load/create errortrace zos\n") - (current-compile zo-compile) - (use-compiled-file-paths (list (build-path compiled-dir "errortrace"))) - (current-load/use-compiled (make-compilation-manager-load/use-compiled-handler)) - (error-display-handler (dynamic-require 'errortrace/errortrace-lib - 'errortrace-error-display-handler)) - (when cm-trace? - (flprintf "PLTDRDEBUG: enabling CM tracing\n") - (run-trace-thread)))] + (define-values (zo-compile make-compilation-manager-load/use-compiled-handler) + (parameterize ([current-namespace (make-base-empty-namespace)] + [use-compiled-file-paths '()]) + (values (dynamic-require 'errortrace/zo-compile 'zo-compile) + (dynamic-require 'compiler/cm 'make-compilation-manager-load/use-compiled-handler)))) + (flprintf "PLTDRDEBUG: installing CM to load/create errortrace zos\n") + (current-compile zo-compile) + (use-compiled-file-paths (list (build-path compiled-dir "errortrace"))) + (current-load/use-compiled (make-compilation-manager-load/use-compiled-handler)) + (error-display-handler (dynamic-require 'errortrace/errortrace-lib + 'errortrace-error-display-handler)) + (when cm-trace? + (flprintf "PLTDRDEBUG: enabling CM tracing\n") + (run-trace-thread))] [install-cm? (flprintf "PLTDRCM: loading compilation manager\n") (define make-compilation-manager-load/use-compiled-handler @@ -91,13 +88,12 @@ (for/list ([x (in-list (find-relevant-directories (list id)))]) (define proc (get-info/full x)) (if proc - (map (λ (dirs) - (apply build-path - x - (if (list? dirs) - dirs - (list dirs)))) - (proc id (λ () '()))) + (for/list ([dirs (in-list (proc id (λ () '())))]) + (apply build-path + x + (if (list? dirs) + dirs + (list dirs)))) '())))) (define make-compilation-manager-load/use-compiled-handler diff --git a/drracket-core-lib/drracket/sprof.rkt b/drracket-core-lib/drracket/sprof.rkt index 9cfe9e625..695dce023 100644 --- a/drracket-core-lib/drracket/sprof.rkt +++ b/drracket-core-lib/drracket/sprof.rkt @@ -16,13 +16,11 @@ (sleep pause-time) (define new-traces (map (λ (t) (continuation-mark-set->context (continuation-marks t))) (get-threads))) - (for-each (λ (trace) - (for-each (λ (line) - (hash-set! traces-table - line - (cons trace (hash-ref traces-table line '())))) - trace)) - new-traces) + (for ([trace (in-list new-traces)]) + (for-each + (λ (line) + (hash-set! traces-table line (cons trace (hash-ref traces-table line '())))) + trace)) (cond [(zero? i) (update-gui traces-table) @@ -38,8 +36,8 @@ (format "~a:~a~a" (cond [(path? (srcloc-source src)) - (let-values ([(base name dir?) (split-path (srcloc-source src))]) - name)] + (define-values (base name dir?) (split-path (srcloc-source src))) + name] [else (srcloc-source src)]) (if (srcloc-line src) (format "~a:~a" (srcloc-line src) (srcloc-column src)) @@ -108,14 +106,14 @@ [(send event button-up? 'left) (define admin (get-admin)) (when admin - (let ([dc (send admin get-dc)]) - (let-values ([(x y) (dc-location-to-editor-location (send event get-x) - (send event get-y))]) - (let* ([loc (find-position x y)] - [para (position-paragraph loc)]) - (set! clicked-srcloc-pr - (and (<= 0 para (last-paragraph)) (car (list-ref gui-display-data para)))) - (update-gui-display)))))] + (send admin get-dc) + (define-values (x y) + (dc-location-to-editor-location (send event get-x) (send event get-y))) + (define loc (find-position x y)) + (define para (position-paragraph loc)) + (set! clicked-srcloc-pr + (and (<= 0 para (last-paragraph)) (car (list-ref gui-display-data para)))) + (update-gui-display))] [else (void)])) (define/public (set-gui-display-data/refresh traces-table) @@ -138,12 +136,11 @@ (set! clear-old-pr void) (define denom-ht (make-hasheq)) (define filtered-gui-display-data - (map (λ (pr) - (let ([id (car pr)] - [stacks (filter-stacks (cdr pr))]) - (for-each (λ (stack) (hash-set! denom-ht stack #t)) stacks) - (cons id stacks))) - gui-display-data)) + (for/list ([pr (in-list gui-display-data)]) + (define id (car pr)) + (define stacks (filter-stacks (cdr pr))) + (for-each (λ (stack) (hash-set! denom-ht stack #t)) stacks) + (cons id stacks))) (define denom-count (hash-count denom-ht)) (let loop ([prs filtered-gui-display-data] [first? #t] @@ -151,22 +148,22 @@ (cond [(null? prs) (void)] [else - (let* ([pr (car prs)] - [fn (car pr)] - [count (length (cdr pr))]) - (cond - [(zero? count) (loop (cdr prs) first? i)] - [else - (unless first? - (insert "\n")) - (let ([before (last-position)]) - (hash-set! line-to-source i pr) - (insert (format-percentage (/ count denom-count))) - (insert (format " ~a" (format-fn-name fn))) - (let ([after (last-position)]) - (when (equal? (car pr) clicked-srcloc-pr) - (set! clear-old-pr (highlight-range before after "NavajoWhite"))))) - (loop (cdr prs) #f (+ i 1))]))])) + (define pr (car prs)) + (define fn (car pr)) + (define count (length (cdr pr))) + (cond + [(zero? count) (loop (cdr prs) first? i)] + [else + (unless first? + (insert "\n")) + (let ([before (last-position)]) + (hash-set! line-to-source i pr) + (insert (format-percentage (/ count denom-count))) + (insert (format " ~a" (format-fn-name fn))) + (let ([after (last-position)]) + (when (equal? (car pr) clicked-srcloc-pr) + (set! clear-old-pr (highlight-range before after "NavajoWhite"))))) + (loop (cdr prs) #f (+ i 1))])])) (lock #t) (end-edit-sequence) (update-info-editor clicked-srcloc-pr) @@ -373,11 +370,10 @@ (define/public (get-threads-to-profile) (define thds '()) (let loop ([cust (get-user-custodian)]) - (for-each (λ (obj) - (cond - [(custodian? obj) (loop obj)] - [(thread? obj) (set! thds (cons obj thds))])) - (custodian-managed-list cust system-custodian))) + (for ([obj (in-list (custodian-managed-list cust system-custodian))]) + (cond + [(custodian? obj) (loop obj)] + [(thread? obj) (set! thds (cons obj thds))]))) thds) ;; FIX diff --git a/drracket-tool-text-lib/drracket/private/syncheck/traversals.rkt b/drracket-tool-text-lib/drracket/private/syncheck/traversals.rkt index 4a52e9b1f..50e4a81e5 100644 --- a/drracket-tool-text-lib/drracket/private/syncheck/traversals.rkt +++ b/drracket-tool-text-lib/drracket/private/syncheck/traversals.rkt @@ -48,76 +48,81 @@ (λ (sexp [ignored void]) (parameterize ([current-directory (or user-directory (current-directory))] [current-load-relative-directory user-directory]) - (let ([is-module? (syntax-case sexp (module) - [(module . rest) #t] - [_ #f])]) - (cond - [is-module? - (let ([phase-to-binders (make-hash)] - [phase-to-varrefs (make-hash)] - [phase-to-varsets (make-hash)] - [phase-to-tops (make-hash)] - [phase-to-requires (make-hash)] - [binding-inits (make-hash)] - [templrefs (make-id-set 0)] - [module-lang-requires (make-hash)] - [requires (make-hash)] - [require-for-syntaxes (make-hash)] - [require-for-templates (make-hash)] - [require-for-labels (make-hash)] - [sub-identifier-binding-directives (make-hash)]) - (annotate-basic sexp - user-namespace user-directory - phase-to-binders - phase-to-varrefs - phase-to-varsets - phase-to-tops - binding-inits - templrefs - module-lang-requires - phase-to-requires - sub-identifier-binding-directives) - (annotate-variables user-namespace - user-directory - phase-to-binders - phase-to-varrefs - phase-to-varsets - phase-to-tops - templrefs - module-lang-requires - phase-to-requires - sub-identifier-binding-directives) - (annotate-contracts sexp - (hash-ref phase-to-binders 0 (λ () (make-id-set 0))) - (hash-ref binding-inits 0 (λ () (make-id-set 0))) - binder+mods-binder) - (when print-extra-info? - (print-extra-info (list (list 'phase-to-binders phase-to-binders) - (list 'phase-to-varrefs phase-to-varrefs) - (list 'phase-to-varsets phase-to-varsets) - (list 'phase-to-tops phase-to-tops) - (list 'phase-to-requires phase-to-requires) - (list 'binding-inits binding-inits) - (list 'templrefs templrefs) - (list 'module-lang-requires module-lang-requires) - (list 'requires requires) - (list 'require-for-syntaxes require-for-syntaxes) - (list 'require-for-templates require-for-templates) - (list 'require-for-labels require-for-labels) - (list 'sub-identifier-binding-directives - sub-identifier-binding-directives)))))] - [else + (define is-module? + (syntax-case sexp (module) + [(module . rest + ) + #t] + [_ #f])) + (cond + [is-module? + (let ([phase-to-binders (make-hash)] + [phase-to-varrefs (make-hash)] + [phase-to-varsets (make-hash)] + [phase-to-tops (make-hash)] + [phase-to-requires (make-hash)] + [binding-inits (make-hash)] + [templrefs (make-id-set 0)] + [module-lang-requires (make-hash)] + [requires (make-hash)] + [require-for-syntaxes (make-hash)] + [require-for-templates (make-hash)] + [require-for-labels (make-hash)] + [sub-identifier-binding-directives (make-hash)]) (annotate-basic sexp - user-namespace user-directory - tl-phase-to-binders - tl-phase-to-varrefs - tl-phase-to-varsets - tl-phase-to-tops - tl-binding-inits - tl-templrefs - tl-module-lang-requires - tl-phase-to-requires - tl-sub-identifier-binding-directives)]))))] + user-namespace + user-directory + phase-to-binders + phase-to-varrefs + phase-to-varsets + phase-to-tops + binding-inits + templrefs + module-lang-requires + phase-to-requires + sub-identifier-binding-directives) + (annotate-variables user-namespace + user-directory + phase-to-binders + phase-to-varrefs + phase-to-varsets + phase-to-tops + templrefs + module-lang-requires + phase-to-requires + sub-identifier-binding-directives) + (annotate-contracts sexp + (hash-ref phase-to-binders 0 (λ () (make-id-set 0))) + (hash-ref binding-inits 0 (λ () (make-id-set 0))) + binder+mods-binder) + (when print-extra-info? + (print-extra-info (list (list 'phase-to-binders phase-to-binders) + (list 'phase-to-varrefs phase-to-varrefs) + (list 'phase-to-varsets phase-to-varsets) + (list 'phase-to-tops phase-to-tops) + (list 'phase-to-requires phase-to-requires) + (list 'binding-inits binding-inits) + (list 'templrefs templrefs) + (list 'module-lang-requires module-lang-requires) + (list 'requires requires) + (list 'require-for-syntaxes require-for-syntaxes) + (list 'require-for-templates require-for-templates) + (list 'require-for-labels require-for-labels) + (list 'sub-identifier-binding-directives + sub-identifier-binding-directives)))))] + [else + (annotate-basic sexp + user-namespace + user-directory + tl-phase-to-binders + tl-phase-to-varrefs + tl-phase-to-varsets + tl-phase-to-tops + tl-binding-inits + tl-templrefs + tl-module-lang-requires + tl-phase-to-requires + tl-sub-identifier-binding-directives)])))] [expansion-completed (λ () (parameterize ([current-directory (or user-directory (current-directory))] diff --git a/drracket/gui-debugger/debug-tool.rkt b/drracket/gui-debugger/debug-tool.rkt index ce8e80c38..837dded50 100644 --- a/drracket/gui-debugger/debug-tool.rkt +++ b/drracket/gui-debugger/debug-tool.rkt @@ -191,18 +191,16 @@ (begin-edit-sequence) (define breakpoints (send (get-tab) get-breakpoints)) (define shifts empty) - (hash-for-each - breakpoints - (lambda (pos status) - (cond - ; deletion after breakpoint: no effect - [(<= pos start)] - ; deletion of breakpoint: remove from table - [(and (< start pos) (<= pos (+ start len))) (hash-remove! breakpoints pos)] - ; deletion before breakpoint: shift breakpoint - [(> pos (+ start len)) - (hash-remove! breakpoints pos) - (set! shifts (cons (cons (- pos len) status) shifts))]))) + (for ([(pos status) (in-hash breakpoints)]) + (cond + ; deletion after breakpoint: no effect + [(<= pos start)] + ; deletion of breakpoint: remove from table + [(and (< start pos) (<= pos (+ start len))) (hash-remove! breakpoints pos)] + ; deletion before breakpoint: shift breakpoint + [(> pos (+ start len)) + (hash-remove! breakpoints pos) + (set! shifts (cons (cons (- pos len) status) shifts))])) (for-each (lambda (p) (hash-set! breakpoints (car p) (cdr p))) shifts)) (inner (void) on-delete start len)) @@ -219,13 +217,12 @@ (begin-edit-sequence) (define breakpoints (send (get-tab) get-breakpoints)) (define shifts empty) - (hash-for-each breakpoints - (lambda (pos status) - (when (< start pos) - ;; text inserted before this breakpoint, so shift - ;; the breakpoint forward by positions - (hash-remove! breakpoints pos) - (set! shifts (cons (cons (+ pos len) status) shifts))))) + (for ([(pos status) (in-hash breakpoints)]) + (when (< start pos) + ;; text inserted before this breakpoint, so shift + ;; the breakpoint forward by positions + (hash-remove! breakpoints pos) + (set! shifts (cons (cons (+ pos len) status) shifts)))) ;; update the breakpoint locations (for-each (lambda (p) (hash-set! breakpoints (car p) (cdr p))) shifts))) @@ -489,28 +486,26 @@ (when (and (send (get-tab) debug?) (not before)) ;; render breakpoints (let ([breakpoints (send (get-tab) get-breakpoints)]) - (hash-for-each - breakpoints - (lambda (pos enabled?) - (when (and (>= pos 0) (or enabled? (and mouse-over-pos (= mouse-over-pos pos)))) - (define-values (xl yl xr yr) (find-char-box this pos)) - (define diameter (- xr xl)) - (define yoff (/ (- yr yl diameter) 2)) - (define op (send dc get-pen)) - (define ob (send dc get-brush)) - (case enabled? - [(#t) - (send dc set-pen bp-pen) - (send dc set-brush bp-brush)] - [(#f) - (send dc set-pen bp-mo-pen) - (send dc set-brush bp-mo-brush)] - [else - (send dc set-pen bp-tmp-pen) - (send dc set-brush bp-tmp-brush)]) - (send dc draw-ellipse (+ xl dx) (+ yl dy yoff) diameter diameter) - (send dc set-pen op) - (send dc set-brush ob))))) + (for ([(pos enabled?) (in-hash breakpoints)]) + (when (and (>= pos 0) (or enabled? (and mouse-over-pos (= mouse-over-pos pos)))) + (define-values (xl yl xr yr) (find-char-box this pos)) + (define diameter (- xr xl)) + (define yoff (/ (- yr yl diameter) 2)) + (define op (send dc get-pen)) + (define ob (send dc get-brush)) + (case enabled? + [(#t) + (send dc set-pen bp-pen) + (send dc set-brush bp-brush)] + [(#f) + (send dc set-pen bp-mo-pen) + (send dc set-brush bp-mo-brush)] + [else + (send dc set-pen bp-tmp-pen) + (send dc set-brush bp-tmp-brush)]) + (send dc draw-ellipse (+ xl dx) (+ yl dy yoff) diameter diameter) + (send dc set-pen op) + (send dc set-brush ob)))) ;; mark the boundaries of the current stack frame ;; unless we're at the end of the expression and looking at the top frame, ;; in which case just mark the current location @@ -804,11 +799,11 @@ ; break-after (case-lambda [(top-mark ccm val) - (let* ([debug-marks (continuation-mark-set->list ccm debug-key)]) - (car (send (get-tab) suspend - oeh - (cons top-mark debug-marks) - (list 'exit-break val))))] + (define debug-marks (continuation-mark-set->list ccm debug-key)) + (car (send (get-tab) suspend + oeh + (cons top-mark debug-marks) + (list 'exit-break val)))] [(top-mark ccm . vals) (define debug-marks (continuation-mark-set->list ccm debug-key)) (apply values @@ -818,15 +813,16 @@ (cons 'exit-break vals)))]))) (uncaught-exception-handler (lambda (exn) - (if (and (exn:break? exn) (send (get-tab) suspend-on-break?)) - (let ([marks (exn-continuation-marks exn)] - [cont (exn:break-continuation exn)]) - (send (get-tab) suspend - oeh - (continuation-mark-set->list marks debug-key) - 'break) - (cont)) - (oeh exn))))))))))) + (cond + [(and (exn:break? exn) (send (get-tab) suspend-on-break?)) + (define marks (exn-continuation-marks exn)) + (define cont (exn:break-continuation exn)) + (send (get-tab) suspend + oeh + (continuation-mark-set->list marks debug-key) + 'break) + (cont)] + [else (oeh exn)])))))))))) (define (debug-tab-mixin super%) (class super% @@ -1237,37 +1233,37 @@ (send variables-text end-edit-sequence)) (define/public (register-stack-frames frames already-stopped?) - (let* ([trimmed-exprs - (map (lambda (frame) - (let ([expr (mark-source frame)]) - (cond - ; should succeed unless the user closes a secondary tab during debugging - [(and expr (filename->defs (syntax-source expr))) - => (lambda (defs) - (trim-expr-str - (if (syntax-position expr) - (send defs get-text - (sub1 (syntax-position expr)) - (+ -1 (syntax-position expr) (syntax-span expr))) - "??") - 15))] - ["??"]))) - frames)] - [trimmed-lengths (map add1 (map string-length trimmed-exprs))] - [positions (foldl + 0 trimmed-lengths)]) - (send stack-frames begin-edit-sequence) - (send stack-frames lock #f) - (unless already-stopped? - (send stack-frames delete 0 (send stack-frames last-position)) - (for-each (lambda (trimmed-expr) - (send stack-frames insert (format "~a\n" trimmed-expr))) - trimmed-exprs)) - (send stack-frames change-style normal-sd 0 (send stack-frames last-position)) - (send stack-frames change-style bold-sd - (send stack-frames paragraph-start-position (send (get-current-tab) get-frame-num)) - (send stack-frames paragraph-end-position (send (get-current-tab) get-frame-num))) - (send stack-frames lock #t) - (send stack-frames end-edit-sequence))) + (define trimmed-exprs + (map (lambda (frame) + (let ([expr (mark-source frame)]) + (cond + ; should succeed unless the user closes a secondary tab during debugging + [(and expr (filename->defs (syntax-source expr))) + => + (lambda (defs) + (trim-expr-str (if (syntax-position expr) + (send defs get-text + (sub1 (syntax-position expr)) + (+ -1 (syntax-position expr) (syntax-span expr))) + "??") + 15))] + ["??"]))) + frames)) + (define trimmed-lengths (map add1 (map string-length trimmed-exprs))) + (foldl + 0 trimmed-lengths) + (send stack-frames begin-edit-sequence) + (send stack-frames lock #f) + (unless already-stopped? + (send stack-frames delete 0 (send stack-frames last-position)) + (for-each (lambda (trimmed-expr) (send stack-frames insert (format "~a\n" trimmed-expr))) + trimmed-exprs)) + (send stack-frames change-style normal-sd 0 (send stack-frames last-position)) + (send stack-frames change-style + bold-sd + (send stack-frames paragraph-start-position (send (get-current-tab) get-frame-num)) + (send stack-frames paragraph-end-position (send (get-current-tab) get-frame-num))) + (send stack-frames lock #t) + (send stack-frames end-edit-sequence)) (define/public (clear-stack-frames/vars) (send stack-frames begin-edit-sequence) @@ -1551,29 +1547,35 @@ (define/augment (on-tab-change old new) (check-current-language-for-debugger) - (if (send new debug?) - (let ([status (send new get-break-status)]) - (if status - (send new suspend-gui (send new get-stack-frames) status #f #t) - (send new resume-gui)) - (show-debug)) - (hide-debug)) + (cond + [(send new debug?) + (define status (send new get-break-status)) + (if status + (send new suspend-gui (send new get-stack-frames) status #f #t) + (send new resume-gui)) + (show-debug)] + [else (hide-debug)]) (inner (void) on-tab-change old new)) (define/public (check-current-language-for-debugger) - (let* ([settings (send (get-definitions-text) get-next-settings)] - [lang (drscheme:language-configuration:language-settings-language settings)] - [visible? (and (send lang capability-value 'gui-debugger:debug-button) - (not (is-a? lang drscheme:module-language:module-language<%>)) ;; the opt-out button handles this language - (not (debugger-does-not-work-for? - (extract-language-level settings))))]) - (define debug-parent (send debug-button get-parent)) - (define debug-button-currently-visible? (member debug-button (send debug-parent get-children))) - (if visible? - (unless debug-button-currently-visible? - (send debug-parent add-child debug-button)) - (when debug-button-currently-visible? - (send debug-parent delete-child debug-button))))) + (define settings (send (get-definitions-text) get-next-settings)) + (define lang (drscheme:language-configuration:language-settings-language settings)) + (define visible? + (and + (send lang capability-value 'gui-debugger:debug-button) + (not + (is-a? + lang + drscheme:module-language:module-language<%>)) ;; the opt-out button handles this language + (not (debugger-does-not-work-for? (extract-language-level settings))))) + (define debug-parent (send debug-button get-parent)) + (define debug-button-currently-visible? + (member debug-button (send debug-parent get-children))) + (if visible? + (unless debug-button-currently-visible? + (send debug-parent add-child debug-button)) + (when debug-button-currently-visible? + (send debug-parent delete-child debug-button)))) (send (get-button-panel) change-children (lambda (children) @@ -1582,7 +1584,7 @@ ; hide debug button if it's not supported for the initial language: (check-current-language-for-debugger))) - (drscheme:language:register-capability 'gui-debugger:debug-button (flat-contract boolean?) #t) + (drscheme:language:register-capability 'gui-debugger:debug-button boolean? #t) (drscheme:get/extend:extend-definitions-text debug-definitions-text-mixin) (drscheme:get/extend:extend-interactions-text debug-interactions-text-mixin) (drscheme:get/extend:extend-unit-frame debug-unit-frame-mixin) diff --git a/drracket/version/tool.rkt b/drracket/version/tool.rkt index 81aca6f9e..b543f5b96 100644 --- a/drracket/version/tool.rkt +++ b/drracket/version/tool.rkt @@ -30,9 +30,11 @@ ;; wait until the definitions are instantiated, return top-level window (define (wait-for-definitions) (define ws (get-top-level-windows)) - (if (null? ws) - (begin (sleep 1) (wait-for-definitions)) - (car ws))) + (cond + [(null? ws) + (sleep 1) + (wait-for-definitions)] + [else (car ws)])) #| ;; Cute code, but may resize the window if too much space, and people ;; didn't like this way of asking if you want update checks. ;; show a message and a disable button