diff --git a/collects/algol60/tool.ss b/collects/algol60/tool.ss index e990917e26..b4c6095c0f 100644 --- a/collects/algol60/tool.ss +++ b/collects/algol60/tool.ss @@ -49,6 +49,7 @@ (define lang% (class* object% (drscheme:language:language<%>) + (define/public (front-end/finished-complete-program settings) (void)) (define/public (extra-repl-information settings port) (void)) (define/public (get-reader-module) #f) (define/public (get-metadata a b) #f) diff --git a/collects/drscheme/private/language.ss b/collects/drscheme/private/language.ss index bd8be4fd07..80188c2acd 100644 --- a/collects/drscheme/private/language.ss +++ b/collects/drscheme/private/language.ss @@ -42,6 +42,7 @@ default-settings? front-end/complete-program + front-end/finished-complete-program front-end/interaction config-panel on-execute @@ -480,6 +481,9 @@ (inherit get-module get-transformer-module use-namespace-require/copy-from-setting? get-init-code use-mred-launcher get-reader) + (define/public (front-end/finished-complete-program settings) (void)) + (define/public (module-based-language->language-mixin settings) (void)) + (define/pubment (capability-value s) (inner (get-capability-default s) capability-value s)) diff --git a/collects/drscheme/private/rep.ss b/collects/drscheme/private/rep.ss index b396636ed0..53dbb4878e 100644 --- a/collects/drscheme/private/rep.ss +++ b/collects/drscheme/private/rep.ss @@ -1103,6 +1103,8 @@ TODO (update-running #f) (cleanup) (flush-output (get-value-port)) + (when complete-program? + (send lang front-end/finished-complete-program settings)) (queue-system-callback/sync (get-user-thread) (λ () ; =Kernel=, =Handler= diff --git a/collects/profj/tool.ss b/collects/profj/tool.ss index 14e80645ca..d507d96288 100644 --- a/collects/profj/tool.ss +++ b/collects/profj/tool.ss @@ -430,6 +430,7 @@ (define (java-lang-mixin level name number one-line dyn? manual-dirname) (when dyn? (dynamic? #t)) (class* object% (drscheme:language:language<%>) + (define/public (front-end/finished-complete-program settings) (void)) (define/public (extra-repl-information settings port) (void)) (define/public (get-reader-module) #f) (define/public (get-metadata a b) #f) diff --git a/collects/scribblings/tools/language.scrbl b/collects/scribblings/tools/language.scrbl index 59a7c2d663..a751290f44 100644 --- a/collects/scribblings/tools/language.scrbl +++ b/collects/scribblings/tools/language.scrbl @@ -682,19 +682,36 @@ or and the use of the expanded code dictates which applies. See also -@method[drscheme:language:language<%> front-end/interaction]. +@method[drscheme:language:language<%> front-end/interaction] +and +@method[drscheme:language:language<%> front-end/finished-complete-program]. +} +@defmethod[(front-end/finished-complete-program [settings settings]) any]{ + This method is called when @onscreen{Run} is clicked, but only after + @method[drscheme:language:language<%> front-end/complete-program] + has been called. Specifically, + @method[drscheme:language:language<%> front-end/complete-program] is + first called to get a thunk that reads from the program. That thunk + is called some number of times, eventually returning @scheme[eof-object], + or raising an exception. Then, this method is called. + + This method is called on the user's main eventspace thread, and without + a prompt or other control delimiter. It must return without raising an + error, or else the DrScheme window will be wedged. } @defmethod[(front-end/interaction [port input-port] [settings settings]) (-> (or/c sexp/c syntax? eof-object?))]{ This method is just like -@method[drscheme:language:language<%> front-end/complete-program] except that it is called with program fragments, -for example the expressions entered in the interactions -window. It is also used in other contexts by -tools to expand single expressions. +@method[drscheme:language:language<%> front-end/complete-program] +except that it is called with program fragments, for example the +expressions entered in the interactions window. It is also used in +other contexts by tools to expand single expressions. +See also +@method[drscheme:langauge:language<%> front-end/finished-complete-program]. } @defmethod[(get-comment-character)