FUEL: Fix bug whereby true display-stacks? could hang the listener.

db4
Jose A. Ortega Ruiz 2008-12-19 00:20:56 +01:00
parent 670cbbfc9f
commit 35039d0149
5 changed files with 28 additions and 19 deletions

View File

@ -13,7 +13,7 @@ IN: fuel
! Evaluation status:
TUPLE: fuel-status in use ds? restarts ;
TUPLE: fuel-status in use restarts ;
SYMBOL: fuel-status-stack
V{ } clone fuel-status-stack set-global
@ -37,7 +37,7 @@ t clone fuel-eval-res-flag set-global
f fuel-eval-res-flag set-global ; inline
: push-fuel-status ( -- )
in get use get clone display-stacks? get restarts get-global clone
in get use get clone restarts get-global clone
fuel-status boa
fuel-status-stack get push ;
@ -46,7 +46,6 @@ t clone fuel-eval-res-flag set-global
fuel-status-stack get pop {
[ in>> in set ]
[ use>> clone use set ]
[ ds?>> display-stacks? swap [ on ] [ off ] if ]
[
restarts>> fuel-eval-restartable? [ drop ] [
clone restarts set-global
@ -112,7 +111,7 @@ M: source-file fuel-pprint path>> fuel-pprint ;
error get
fuel-eval-result get-global
fuel-eval-output get-global
3array fuel-pprint flush nl "EOT:" write ;
3array fuel-pprint flush nl "<~FUEL~>" write nl flush ;
: fuel-forget-error ( -- ) f error set-global ; inline
: fuel-forget-result ( -- ) f fuel-eval-result set-global ; inline
@ -120,14 +119,13 @@ M: source-file fuel-pprint path>> fuel-pprint ;
: (fuel-begin-eval) ( -- )
push-fuel-status
display-stacks? off
fuel-forget-error
fuel-forget-result
fuel-forget-output ;
: (fuel-end-eval) ( quot -- )
with-string-writer fuel-eval-output set-global
fuel-retort pop-fuel-status ; inline
with-string-writer fuel-eval-output set-global fuel-retort
pop-fuel-status ; inline
: (fuel-eval) ( lines -- )
[ [ parse-lines ] with-compilation-unit call ] curry

View File

@ -17,6 +17,9 @@
(autoload 'run-factor "fuel-listener.el"
"Start a Factor listener, or switch to a running one." t)
(autoload 'switch-to-factor "fuel-listener.el"
"Start a Factor listener, or switch to a running one." t)
(autoload 'fuel-autodoc-mode "fuel-help.el"
"Minor mode showing in the minibuffer a synopsis of Factor word at point."
t)

View File

@ -133,21 +133,27 @@
(fuel-con--connection-start-timer conn))))
(defconst fuel-con--prompt-regex "( .+ ) ")
(defconst fuel-con--eot-marker "EOT:")
(defconst fuel-con--init-stanza (format "USE: fuel %S write" fuel-con--eot-marker))
(defconst fuel-con--eot-marker "<~FUEL~>")
(defconst fuel-con--init-stanza "USE: fuel f fuel-eval")
(defconst fuel-con--comint-finished-regex
(format "^%s%s$" fuel-con--eot-marker fuel-con--prompt-regex))
(format "^%s$" fuel-con--eot-marker))
(defun fuel-con--setup-comint ()
(comint-redirect-cleanup)
(set (make-local-variable 'comint-redirect-insert-matching-regexp) t)
(add-hook 'comint-redirect-filter-functions
'fuel-con--comint-preoutput-filter nil t)
(add-hook 'comint-redirect-hook
'fuel-con--comint-redirect-hook nil t))
(defadvice comint-redirect-setup (after fuel-con--advice activate)
(setq comint-redirect-finished-regexp fuel-con--comint-finished-regex))
(defun fuel-con--comint-preoutput-filter (str)
(when (string-match fuel-con--comint-finished-regex str)
(setq comint-redirect-finished-regexp fuel-con--prompt-regex))
str)
;;; Requests handling:

View File

@ -76,6 +76,7 @@ buffer."
(make-comint-in-buffer "fuel listener" (current-buffer) factor nil
"-run=listener" (format "-i=%s" image))
(fuel-listener--wait-for-prompt 10000)
(fuel-con--setup-connection (current-buffer))
(fuel-con--send-string/wait (current-buffer)
fuel-con--init-stanza
'(lambda (s) (message "FUEL listener up and running!"))
@ -130,10 +131,12 @@ buffer."
;;; Fuel listener mode:
;;;###autoload
(define-derived-mode fuel-listener-mode comint-mode "Fuel Listener"
"Major mode for interacting with an inferior Factor listener process.
\\{fuel-listener-mode-map}"
(set (make-local-variable 'comint-prompt-regexp) fuel-con--prompt-regex)
(set (make-local-variable 'comint-use-prompt-regexp) t)
(set (make-local-variable 'comint-prompt-read-only) t)
(fuel-listener--setup-completion))

View File

@ -14,15 +14,14 @@
;;; Code:
(require 'factor-mode)
(require 'fuel-base)
(require 'fuel-syntax)
(require 'fuel-font-lock)
(require 'fuel-debug)
(require 'fuel-help)
(require 'fuel-eval)
(require 'fuel-completion)
(require 'fuel-listener)
(require 'fuel-completion)
(require 'fuel-eval)
(require 'fuel-help)
(require 'fuel-debug)
(require 'fuel-font-lock)
(require 'fuel-syntax)
(require 'fuel-base)
;;; Customization: