<div dir="ltr"><span style="font-family:monospace">"contarcts". I think DrRacket's spell checker would have caught that one (but I really need to fix indentation for scribble files before I'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"><<a href="mailto:mflatt@racket-lang.org" target="_blank">mflatt@racket-lang.org</a>></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' 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 <<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>> 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 <<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>> 2013-04-28 09:32<br>
:<br>
| switch DrRacket's "Install Package..." 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 <<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>> 2013-04-28 10:09<br>
:<br>
| adjust the new "notation" 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 => notation.scrbl} (71%)<br>
M collects/scribblings/reference/reference.scrbl | 2 +-<br>
<br>
~~~~~~~~~~<br>
<br>
60610b7 Matthew Flatt <<a href="mailto:mflatt@racket-lang.org">mflatt@racket-lang.org</a>> 2013-04-28 15:19<br>
:<br>
| add some comments to help explain the compiler'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 'drracket:gui-installer-pkg-source "" string?)<br>
-<br>
- (define (install-pkg parent)<br>
- (define dlg (new dialog%<br>
- [parent parent]<br>
- [label sc-install-pkg-dialog-title]<br>
- [alignment '(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 'drracket:gui-installer-pkg-source (send tf get-value))<br>
- (adjust-all))]))<br>
- (send tf set-value (preferences:get '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 '(left center)]))<br>
- (define button-panel (new horizontal-panel%<br>
- [parent dlg]<br>
- [stretchable-height #f]<br>
- [alignment '(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) '()))<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 '(right center)]))<br>
- (define inferred-msg (new message% [label ""] [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 '(right center)]))<br>
- (define inferred-action-msg (new message% [label ""] [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 ""]<br>
- [font (send (send (editor:get-standard-style-list)<br>
- find-named-style<br>
- "Standard")<br>
- get-font)]))<br>
-<br>
- (define (selected-type)<br>
- (case (send choice get-selection)<br>
- [(0) #f]<br>
- [(1) 'file]<br>
- [(2) 'dir]<br>
- [(3) 'file-url]<br>
- [(4) 'dir-url]<br>
- [(5) 'github]<br>
- [(6) 'name]))<br>
-<br>
- (define (type->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 'type->str "unknown type ~s\n" 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->name (send tf get-value)))<br>
- (cond<br>
- [(and current-name (member current-name currently-installed-pkgs))<br>
- 'update]<br>
- [else<br>
- 'install])]<br>
- [(1) 'install]<br>
- [(2) '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? '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 ""]))<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) '()))])))<br>
-<br>
- (define (adjust-inferred)<br>
- (define new-lab<br>
- (and (equal? #f (selected-type))<br>
- (let-values ([(_ actual-type)<br>
- (package-source->name+type (send tf get-value) #f)])<br>
- (and actual-type<br>
- (format sc-install-pkg-inferred-as (type->str actual-type))))))<br>
- (send inferred-msg set-label (or new-lab "")))<br>
-<br>
- (define (adjust-cmd-line)<br>
- (define (convert-to-string s)<br>
- (cond<br>
- [(string? s)<br>
- (if (regexp-match #rx" " s)<br>
- (string-append "\"" s "\"")<br>
- s)]<br>
- [(keyword? s) (regexp-replace #rx"^#:" (format "~a" s) "--")]<br>
- [(symbol? s) (symbol->string s)]<br>
- [(boolean? s) #f]<br>
- [else (error 'convert-to-string "unk ~s" 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) 'windows)<br>
- "raco.exe"<br>
- "raco")<br>
- " pkg "<br>
- (apply string-append<br>
- (add-between<br>
- (filter values (map convert-to-string cmd-line))<br>
- " ")))<br>
- "")))<br>
-<br>
- (define (compute-cmd-line)<br>
- (define the-pkg<br>
- (cond<br>
- [(and (equal? 'update (get-current-action))<br>
- (package-source->name (send tf get-value)))<br>
- =><br>
- values]<br>
- [else (send tf get-value)]))<br>
- (and (not (equal? the-pkg ""))<br>
- (cons (get-current-action)<br>
- (append<br>
- (if (send cb get-value)<br>
- '(#:force #t)<br>
- '())<br>
- (if (selected-type)<br>
- (list '#:type (selected-type))<br>
- '())<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 ".." 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 "Package Manager"]<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 "Package Manager"]<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[->] 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["module"] 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["intro.scrbl"]<br>
+@include-section["notation.scrbl"]<br>
@include-section["model.scrbl"]<br>
@include-section["syntax.scrbl"]<br>
@include-section["data.scrbl"]<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->rand2;<br>
<br>
- switch ((SCHEME_APPN_FLAGS(app) >> 6) & 0x7) {<br>
+ switch ((flags >> 6) & 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; /* "instruction pointer" --- 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' values changed */<br>
+ int *max_used; /* maps stack position (i.e., variable) to ip of the variable's last use */<br>
+ int *max_calls; /* maps stack position to ip of last non-tail call in variable's scope */<br>
Scheme_Object *saved;<br>
} SFS_Info;<br>
<br>
<br>
*** See above for renames and copies ***<br>
</blockquote></div><br></div>