<div dir="ltr"><span style="font-family:monospace">&quot;contarcts&quot;. I think DrRacket&#39;s spell checker would have caught that one (but I really need to fix indentation for scribble files before I&#39;d say that DrRacket is useable).</span><br>
<div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">Robby</span></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Apr 28, 2013 at 5:04 PM,  <span dir="ltr">&lt;<a href="mailto:mflatt@racket-lang.org" target="_blank">mflatt@racket-lang.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mflatt has updated `master&#39; from ad323e5081 to 60610b737d.<br>
  <a href="http://git.racket-lang.org/plt/ad323e5081..60610b737d" target="_blank">http://git.racket-lang.org/plt/ad323e5081..60610b737d</a><br>
<br>
=====[ 4 Commits ]======================================================<br>
Directory summary:<br>
  40.4% collects/drracket/private/<br>
  11.1% collects/pkg/gui/<br>
  45.5% collects/scribblings/reference/<br>
<br>
~~~~~~~~~~<br>
<br>
e468d1f Matthew Flatt &lt;<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>&gt; 2013-04-28 08:44<br>
:<br>
| minor code improvement<br>
:<br>
  M src/racket/src/eval.c | 2 +-<br>
<br>
~~~~~~~~~~<br>
<br>
05c0299 Matthew Flatt &lt;<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>&gt; 2013-04-28 09:32<br>
:<br>
| switch DrRacket&#39;s &quot;Install Package...&quot; to the new package manager GUI<br>
:<br>
  M collects/drracket/private/frame.rkt | 278 ++-------------------------------<br>
  M collects/pkg/gui/main.rkt           | 107 +++++++------<br>
<br>
~~~~~~~~~~<br>
<br>
0754f79 Matthew Flatt &lt;<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>&gt; 2013-04-28 10:09<br>
:<br>
| adjust the new &quot;notation&quot; section of the reference<br>
:<br>
  M collects/scribblings/reference/contracts.scrbl  | 7 +++++--<br>
  M collects/scribblings/reference/eval-model.scrbl | 2 +-<br>
  R collects/scribblings/reference/{intro.scrbl =&gt; notation.scrbl} (71%)<br>
  M collects/scribblings/reference/reference.scrbl  | 2 +-<br>
<br>
~~~~~~~~~~<br>
<br>
60610b7 Matthew Flatt &lt;<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>&gt; 2013-04-28 15:19<br>
:<br>
| add some comments to help explain the compiler&#39;s space-safety pass<br>
:<br>
  M src/racket/src/schpriv.h | 15 +++++++++------<br>
<br>
=====[ Overall Diff ]===================================================<br>
<br>
collects/drracket/private/frame.rkt<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/drracket/private/frame.rkt<br>
+++ NEW/collects/drracket/private/frame.rkt<br>
@@ -1,262 +1,16 @@<br>
 #lang racket/base<br>
<br>
 (module install-pkg racket/base<br>
-  (require racket/gui/base<br>
-           racket/class<br>
-           string-constants<br>
-           pkg/name<br>
-           pkg/lib<br>
-           racket/list<br>
-           framework)<br>
+  (require racket/class<br>
+           pkg/gui/main)<br>
   (provide install-pkg)<br>
-<br>
-  (define sc-install-pkg-dialog-title (string-constant install-pkg-dialog-title))<br>
-  (define sc-install-pkg-source-label (string-constant install-pkg-source-label))<br>
-  (define sc-install-pkg-type-label (string-constant install-pkg-type-label))<br>
-  (define sc-install-pkg-infer (string-constant install-pkg-infer))<br>
-  (define sc-install-pkg-file (string-constant install-pkg-file))<br>
-  (define sc-install-pkg-dir (string-constant install-pkg-dir))<br>
-  (define sc-install-pkg-dir-url (string-constant install-pkg-dir-url))<br>
-  (define sc-install-pkg-file-url (string-constant install-pkg-file-url))<br>
-  (define sc-install-pkg-github (string-constant install-pkg-github))<br>
-  (define sc-install-pkg-name (string-constant install-pkg-name))<br>
-  (define sc-install-pkg-inferred-as (string-constant install-pkg-inferred-as))<br>
-  (define sc-install-pkg-force? (string-constant install-pkg-force?))<br>
-  (define sc-install-pkg-command-line (string-constant install-pkg-command-line))<br>
-<br>
-  (define sc-install-pkg-action-label (string-constant install-pkg-action-label))<br>
-  (define sc-install-pkg-install (string-constant install-pkg-install))<br>
-  (define sc-install-pkg-update (string-constant install-pkg-update))<br>
-  (define sc-action-inferred-to-be-update (string-constant install-pkg-action-inferred-to-be-update))<br>
-  (define sc-action-inferred-to-be-install (string-constant install-pkg-action-inferred-to-be-install))<br>
-<br>
-  (preferences:set-default &#39;drracket:gui-installer-pkg-source &quot;&quot; string?)<br>
-<br>
-  (define (install-pkg parent)<br>
-    (define dlg (new dialog%<br>
-                     [parent parent]<br>
-                     [label sc-install-pkg-dialog-title]<br>
-                     [alignment &#39;(right center)]))<br>
-    (define tf (new text-field%<br>
-                    [parent dlg]<br>
-                    [min-width 600]<br>
-                    [label sc-install-pkg-source-label]<br>
-                    [callback (λ (_1 _2)<br>
-                                (preferences:set &#39;drracket:gui-installer-pkg-source (send tf get-value))<br>
-                                (adjust-all))]))<br>
-    (send tf set-value (preferences:get &#39;drracket:gui-installer-pkg-source))<br>
-<br>
-    (define details-parent (new vertical-panel% [parent dlg]))<br>
-    (define details-panel (new group-box-panel%<br>
-                               [label (string-constant autosave-details)]<br>
-                               [parent details-parent]<br>
-                               [alignment &#39;(left center)]))<br>
-    (define button-panel (new horizontal-panel%<br>
-                              [parent dlg]<br>
-                              [stretchable-height #f]<br>
-                              [alignment &#39;(right center)]))<br>
-<br>
<br>
-    (define details-shown? #f)<br>
-    (define details-button (new button%<br>
-                                [label (string-constant show-details-button-label)]<br>
-                                [parent button-panel]<br>
-                                [callback<br>
-                                 (λ (a b)<br>
-                                   (set! details-shown? (not details-shown?))<br>
-                                   (adjust-all))]))<br>
-    (new horizontal-panel% [parent button-panel])<br>
-    (define-values (ok-button cancel-button)<br>
-      (gui-utils:ok/cancel-buttons button-panel<br>
-                                   (λ (_1 _2)<br>
-                                     (set! ok? #t)<br>
-                                     (send dlg show #f))<br>
-                                   (λ (_1 _2) (send dlg show #f))))<br>
-    (send details-parent change-children (λ (l) &#39;()))<br>
-    (define choice (new choice%<br>
-                        [label sc-install-pkg-type-label]<br>
-                        [parent details-panel]<br>
-                        [stretchable-width #t]<br>
-                        [callback (λ (x y) (adjust-all))]<br>
-                        [choices (list sc-install-pkg-infer<br>
-                                       sc-install-pkg-file<br>
-                                       sc-install-pkg-dir<br>
-                                       sc-install-pkg-file-url<br>
-                                       sc-install-pkg-dir-url<br>
-                                       sc-install-pkg-github<br>
-                                       sc-install-pkg-name)]))<br>
-<br>
-    (define inferred-msg-parent (new horizontal-panel%<br>
-                                     [parent details-panel]<br>
-                                     [stretchable-height #f]<br>
-                                     [alignment &#39;(right center)]))<br>
-    (define inferred-msg (new message% [label &quot;&quot;] [parent inferred-msg-parent] [auto-resize #t]))<br>
-<br>
-    (define action-choice (new choice%<br>
-                               [label sc-install-pkg-action-label]<br>
-                               [parent details-panel]<br>
-                               [stretchable-width #t]<br>
-                               [callback (λ (x y) (adjust-all))]<br>
-                               [choices (list sc-install-pkg-infer<br>
-                                              sc-install-pkg-install<br>
-                                              sc-install-pkg-update)]))<br>
-    (define inferred-action-msg-parent (new horizontal-panel%<br>
-                                            [parent details-panel]<br>
-                                            [stretchable-height #f]<br>
-                                            [alignment &#39;(right center)]))<br>
-    (define inferred-action-msg (new message% [label &quot;&quot;] [parent inferred-action-msg-parent] [auto-resize #t]))<br>
-<br>
-    (define cb (new check-box%<br>
-                    [label sc-install-pkg-force?]<br>
-                    [parent details-panel]<br>
-                    [callback (λ (a b) (adjust-all))]))<br>
-<br>
-    (new message% [parent details-panel] [label sc-install-pkg-command-line])<br>
-    (define cmdline-panel (new horizontal-panel% [parent details-panel] [stretchable-height #f]))<br>
-    (new horizontal-panel% [parent cmdline-panel] [min-width 12] [stretchable-width #f])<br>
-    (define cmdline-msg (new message%<br>
-                             [parent cmdline-panel]<br>
-                             [stretchable-width #t]<br>
-                             [label &quot;&quot;]<br>
-                             [font (send (send (editor:get-standard-style-list)<br>
-                                               find-named-style<br>
-                                               &quot;Standard&quot;)<br>
-                                         get-font)]))<br>
-<br>
-    (define (selected-type)<br>
-      (case (send choice get-selection)<br>
-        [(0) #f]<br>
-        [(1) &#39;file]<br>
-        [(2) &#39;dir]<br>
-        [(3) &#39;file-url]<br>
-        [(4) &#39;dir-url]<br>
-        [(5) &#39;github]<br>
-        [(6) &#39;name]))<br>
-<br>
-    (define (type-&gt;str type)<br>
-      (case type<br>
-        [(file) sc-install-pkg-file]<br>
-        [(name) sc-install-pkg-name]<br>
-        [(dir) sc-install-pkg-dir]<br>
-        [(github) sc-install-pkg-github]<br>
-        [(file-url) sc-install-pkg-file-url]<br>
-        [(dir-url) sc-install-pkg-dir-url]<br>
-        [else (error &#39;type-&gt;str &quot;unknown type ~s\n&quot; type)]))<br>
-<br>
-    (define currently-installed-pkgs (installed-pkg-names))<br>
-    (define (get-current-action)<br>
-      (case (send action-choice get-selection)<br>
-        [(0)<br>
-         (define current-name (package-source-&gt;name (send tf get-value)))<br>
-         (cond<br>
-           [(and current-name (member current-name currently-installed-pkgs))<br>
-            &#39;update]<br>
-           [else<br>
-            &#39;install])]<br>
-        [(1) &#39;install]<br>
-        [(2) &#39;update]))<br>
-<br>
-<br>
-    (define (adjust-all)<br>
-      (adjust-inferred)<br>
-      (adjust-inferred-action)<br>
-      (adjust-checkbox)<br>
-      (adjust-cmd-line)<br>
-      (adjust-details-shown)<br>
-      (adjust-ok/cancel))<br>
-<br>
-    (define (adjust-checkbox)<br>
-      (send cb enable (equal? &#39;install (get-current-action))))<br>
-<br>
-    (define (adjust-inferred-action)<br>
-      (define action (get-current-action))<br>
-      (define new-lab<br>
-        (cond<br>
-          [(equal? 0 (send action-choice get-selection))<br>
-           (case (get-current-action)<br>
-             [(install) sc-action-inferred-to-be-install]<br>
-             [(update) sc-action-inferred-to-be-update])]<br>
-          [else &quot;&quot;]))<br>
-      (send inferred-action-msg set-label new-lab))<br>
-<br>
-    (define (adjust-ok/cancel)<br>
-      (send ok-button enable (compute-cmd-line)))<br>
-<br>
-    (define (adjust-details-shown)<br>
-      (define current-details-shown-state?<br>
-        (and (member details-panel (send details-parent get-children))<br>
-             #t))<br>
-      (unless (equal? current-details-shown-state?<br>
-                      details-shown?)<br>
-        (cond<br>
-          [details-shown?<br>
-           (send details-button set-label (string-constant hide-details-button-label))<br>
-           (send details-parent change-children<br>
-                 (λ (l) (list details-panel)))]<br>
-          [else<br>
-           (send details-button set-label (string-constant show-details-button-label))<br>
-           (send details-parent change-children<br>
-                 (λ (l) &#39;()))])))<br>
-<br>
-    (define (adjust-inferred)<br>
-      (define new-lab<br>
-        (and (equal? #f (selected-type))<br>
-             (let-values ([(_ actual-type)<br>
-                           (package-source-&gt;name+type (send tf get-value) #f)])<br>
-               (and actual-type<br>
-                    (format sc-install-pkg-inferred-as (type-&gt;str actual-type))))))<br>
-      (send inferred-msg set-label (or new-lab &quot;&quot;)))<br>
-<br>
-    (define (adjust-cmd-line)<br>
-      (define (convert-to-string s)<br>
-        (cond<br>
-          [(string? s)<br>
-           (if (regexp-match #rx&quot; &quot; s)<br>
-               (string-append &quot;\&quot;&quot; s &quot;\&quot;&quot;)<br>
-               s)]<br>
-          [(keyword? s) (regexp-replace #rx&quot;^#:&quot; (format &quot;~a&quot; s) &quot;--&quot;)]<br>
-          [(symbol? s) (symbol-&gt;string s)]<br>
-          [(boolean? s) #f]<br>
-          [else (error &#39;convert-to-string &quot;unk ~s&quot; s)]))<br>
-      (define cmd-line (compute-cmd-line))<br>
-      (send cmdline-msg set-label<br>
-            (if cmd-line<br>
-                (string-append<br>
-                 (if (eq? (system-type) &#39;windows)<br>
-                     &quot;raco.exe&quot;<br>
-                     &quot;raco&quot;)<br>
-                 &quot; pkg &quot;<br>
-                 (apply string-append<br>
-                        (add-between<br>
-                         (filter values (map convert-to-string cmd-line))<br>
-                         &quot; &quot;)))<br>
-                &quot;&quot;)))<br>
-<br>
-    (define (compute-cmd-line)<br>
-      (define the-pkg<br>
-        (cond<br>
-          [(and (equal? &#39;update (get-current-action))<br>
-                (package-source-&gt;name (send tf get-value)))<br>
-           =&gt;<br>
-           values]<br>
-          [else (send tf get-value)]))<br>
-      (and (not (equal? the-pkg &quot;&quot;))<br>
-           (cons (get-current-action)<br>
-                 (append<br>
-                  (if (send cb get-value)<br>
-                      &#39;(#:force #t)<br>
-                      &#39;())<br>
-                  (if (selected-type)<br>
-                      (list &#39;#:type (selected-type))<br>
-                      &#39;())<br>
-                  (list the-pkg)))))<br>
-<br>
-    (adjust-all)<br>
-<br>
-    (define ok? #f)<br>
-<br>
-    (send dlg show #t)<br>
-    (and ok? (compute-cmd-line))))<br>
+  (define pkg-gui #f)<br>
+<br>
+  (define (install-pkg parent wrap-terminal-action)<br>
+    (if pkg-gui<br>
+        (send pkg-gui show #t)<br>
+        (set! pkg-gui (make-pkg-gui #:wrap-terminal-action wrap-terminal-action)))))<br>
<br>
 (module main racket<br>
   (require (submod &quot;..&quot; install-pkg))<br>
@@ -450,17 +204,11 @@<br>
              [label (string-constant install-pkg-menu-item...)]<br>
              [parent file-menu]<br>
              [callback<br>
-              (λ (item evt)<br>
-                (define res (install-pkg this))<br>
-                (when res<br>
-                  (parameterize ([error-display-handler drracket:init:original-error-display-handler])<br>
-                    (in-terminal<br>
-                     #:title (string-constant install-pkg-dialog-title)<br>
-                     (λ (cust parent)<br>
-                       (define action (case (car res)<br>
-                                        [(install) install]<br>
-                                        [(update) update]))<br>
-                       (apply action (cdr res)))))))])<br>
+              (λ (item evt)<br>
+                 (install-pkg this<br>
+                              (lambda (thunk)<br>
+                                (parameterize ([error-display-handler drracket:init:original-error-display-handler])<br>
+                                  (thunk)))))])<br>
         (super file-menu:between-open-and-revert file-menu))<br>
<br>
       (define/override (file-menu:between-print-and-close menu)<br>
<br>
collects/pkg/gui/main.rkt<br>
~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/pkg/gui/main.rkt<br>
+++ NEW/collects/pkg/gui/main.rkt<br>
@@ -8,51 +8,62 @@<br>
          mrlib/terminal<br>
          string-constants)<br>
<br>
-(define frame<br>
-  (new frame:basic%<br>
-       [label &quot;Package Manager&quot;]<br>
-       [width 800]<br>
-       [height 600]))<br>
-<br>
-(define sel-tab<br>
-  (new tab-panel%<br>
-       [parent (send frame get-area-container)]<br>
-       [choices (list (string-constant install-pkg-install-by-source)<br>
-                      (string-constant install-pkg-install-from-list)<br>
-                      (string-constant install-pkg-install-installed))]<br>
-       [callback (lambda (t e)<br>
-                   (define old (send sel-panel active-child))<br>
-                   (define new (list-ref panels (send t get-selection)))<br>
-                   (unless (eq? new old)<br>
-                     (send sel-panel active-child new)))]))<br>
-<br>
-(define sel-panel<br>
-  (new panel:single%<br>
-       [parent sel-tab]))<br>
-<br>
-(define terminal #f)<br>
-(define (in-terminal-panel abort-label thunk)<br>
-  (when terminal<br>
-    (send terminal close))<br>
-  (define t (in-terminal<br>
-             #:abort-label abort-label<br>
-             #:container (send frame get-area-container)<br>
-             (λ (cust parent) (thunk))))<br>
-  (set! terminal t)<br>
-  (send sel-tab enable #f)<br>
-  (yield (send t can-close-evt))<br>
-  (send sel-tab enable #t))<br>
-<br>
-(define panels<br>
-  (list<br>
-   (new by-source-panel%<br>
-        [parent sel-panel]<br>
-        [in-terminal in-terminal-panel])<br>
-   (new by-list-panel%<br>
-        [parent sel-panel]<br>
-        [in-terminal in-terminal-panel])<br>
-   (new by-installed-panel%<br>
-        [parent sel-panel]<br>
-        [in-terminal in-terminal-panel])))<br>
-<br>
-(send frame show #t)<br>
+(provide make-pkg-gui)<br>
+<br>
+(define (make-pkg-gui #:wrap-terminal-action [wrap-terminal-action (lambda (thunk) (thunk))])<br>
+  (define frame<br>
+    (new (class frame:standard-menus%<br>
+           (super-new)<br>
+           ;; no menu separator:<br>
+           (define/override (edit-menu:between-select-all-and-find m) (void)))<br>
+         [label &quot;Package Manager&quot;]<br>
+         [width 800]<br>
+         [height 600]))<br>
+<br>
+  (define sel-tab<br>
+    (new tab-panel%<br>
+         [parent (send frame get-area-container)]<br>
+         [choices (list (string-constant install-pkg-install-by-source)<br>
+                        (string-constant install-pkg-install-from-list)<br>
+                        (string-constant install-pkg-install-installed))]<br>
+         [callback (lambda (t e)<br>
+                     (define old (send sel-panel active-child))<br>
+                     (define new (list-ref panels (send t get-selection)))<br>
+                     (unless (eq? new old)<br>
+                       (send sel-panel active-child new)))]))<br>
+<br>
+  (define sel-panel<br>
+    (new panel:single%<br>
+         [parent sel-tab]))<br>
+<br>
+  (define terminal #f)<br>
+  (define (in-terminal-panel abort-label thunk)<br>
+    (when terminal<br>
+      (send terminal close))<br>
+    (define t (in-terminal<br>
+               #:abort-label abort-label<br>
+               #:container (send frame get-area-container)<br>
+               (λ (cust parent) (wrap-terminal-action thunk))))<br>
+    (set! terminal t)<br>
+    (send sel-tab enable #f)<br>
+    (yield (send t can-close-evt))<br>
+    (send sel-tab enable #t))<br>
+<br>
+  (define panels<br>
+    (list<br>
+     (new by-source-panel%<br>
+          [parent sel-panel]<br>
+          [in-terminal in-terminal-panel])<br>
+     (new by-list-panel%<br>
+          [parent sel-panel]<br>
+          [in-terminal in-terminal-panel])<br>
+     (new by-installed-panel%<br>
+          [parent sel-panel]<br>
+          [in-terminal in-terminal-panel])))<br>
+<br>
+  (send frame show #t)<br>
+<br>
+  frame)<br>
+<br>
+(module+ main<br>
+  (void (make-pkg-gui)))<br>
<br>
collects/scribblings/reference/contracts.scrbl<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/scribblings/reference/contracts.scrbl<br>
+++ NEW/collects/scribblings/reference/contracts.scrbl<br>
@@ -68,7 +68,11 @@ failed, and anything else to indicate it passed.}<br>
<br>
 ]<br>
<br>
+@deftech{Contract combinators} are functions such as @racket[-&gt;] and<br>
+@racket[listof] that take contarcts and produce other contracts.<br>
+<br>
 Contracts in Racket are subdivided into three different categories:<br>
+@;<br>
 @itemlist[@item{@deftech{Flat contract}s can be fully checked immediately for<br>
                  a given value. These kinds of contracts are essentially<br>
                  predicate functions. Using @racket[flat-contract-predicate],<br>
@@ -95,8 +99,7 @@ Contracts in Racket are subdivided into three different categories:<br>
<br>
 For more about this hierarchy, see @tech{chaperones} and<br>
 a research paper on chaperones, impersonators, and how they can be used to<br>
-implement contracts @cite{Strickland12}.<br>
-<br>
+implement contracts~@cite{Strickland12}.<br>
<br>
 @local-table-of-contents[]<br>
<br>
<br>
collects/scribblings/reference/eval-model.scrbl<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/scribblings/reference/eval-model.scrbl<br>
+++ NEW/collects/scribblings/reference/eval-model.scrbl<br>
@@ -517,7 +517,7 @@ access the same @tech{location}.<br>
<br>
 @margin-note/ref{See @secref[&quot;module&quot;] for the syntax of modules.}<br>
<br>
-Most definitions in Racket are in modules. In terms of evaluation,<br>
+Most definitions in Racket are in @deftech{modules}. In terms of evaluation,<br>
 a module is essentially a prefix on a defined name, so that different<br>
 modules can define the name. That is, a @deftech{module-level<br>
 variable} is like a @tech{top-level variable} from the perspective of<br>
<br>
collects/scribblings/reference/reference.scrbl<br>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/collects/scribblings/reference/reference.scrbl<br>
+++ NEW/collects/scribblings/reference/reference.scrbl<br>
@@ -57,7 +57,7 @@ The @racketmodname[racket] library combines<br>
<br>
 @table-of-contents[]<br>
<br>
-@include-section[&quot;intro.scrbl&quot;]<br>
+@include-section[&quot;notation.scrbl&quot;]<br>
 @include-section[&quot;model.scrbl&quot;]<br>
 @include-section[&quot;syntax.scrbl&quot;]<br>
 @include-section[&quot;data.scrbl&quot;]<br>
<br>
src/racket/src/eval.c<br>
~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/src/racket/src/eval.c<br>
+++ NEW/src/racket/src/eval.c<br>
@@ -3390,7 +3390,7 @@ scheme_do_eval(Scheme_Object *obj, int num_rands, Scheme_Object **rands,<br>
<br>
          arg = app-&gt;rand2;<br>
<br>
-         switch ((SCHEME_APPN_FLAGS(app) &gt;&gt; 6) &amp; 0x7) {<br>
+         switch ((flags &gt;&gt; 6) &amp; 0x7) {<br>
          case SCHEME_EVAL_CONSTANT:<br>
            break;<br>
          case SCHEME_EVAL_GLOBAL:<br>
<br>
src/racket/src/schpriv.h<br>
~~~~~~~~~~~~~~~~~~~~~~~~<br>
--- OLD/src/racket/src/schpriv.h<br>
+++ NEW/src/racket/src/schpriv.h<br>
@@ -2801,12 +2801,15 @@ int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env);<br>
 typedef struct SFS_Info {<br>
   MZTAG_IF_REQUIRED<br>
   int for_mod, pass;<br>
-  int tail_pos;<br>
-  int depth, stackpos, tlpos;<br>
-  int selfpos, selfstart, selflen;<br>
-  int ip, seqn, max_nontail;<br>
-  int min_touch, max_touch;<br>
-  int *max_used, *max_calls;<br>
+  int tail_pos; /* in tail position? */<br>
+  int depth, stackpos, tlpos; /* stack shape */<br>
+  int selfpos, selfstart, selflen; /* tracks self calls */<br>
+  int ip; /* &quot;instruction pointer&quot; --- counts up during traversal of expressions */<br>
+  int seqn; /* tracks nesting */<br>
+  int max_nontail; /* ip of last non-tail call in the body */<br>
+  int min_touch, max_touch; /* tracks range of `macx_used&#39; values changed */<br>
+  int *max_used; /* maps stack position (i.e., variable) to ip of the variable&#39;s last use */<br>
+  int *max_calls; /* maps stack position to ip of last non-tail call in variable&#39;s scope */<br>
   Scheme_Object *saved;<br>
 } SFS_Info;<br>
<br>
<br>
*** See above for renames and copies ***<br>
</blockquote></div><br></div>