Merge branch 'emacs' of http://git.hacks-galore.org/jao/factor
commit
3cc8915193
|
@ -36,24 +36,22 @@ t clone fuel-eval-res-flag set-global
|
||||||
: fuel-eval-non-restartable ( -- )
|
: fuel-eval-non-restartable ( -- )
|
||||||
f fuel-eval-res-flag set-global ; inline
|
f fuel-eval-res-flag set-global ; inline
|
||||||
|
|
||||||
: push-fuel-status ( -- )
|
: fuel-push-status ( -- )
|
||||||
in get use get clone restarts get-global clone
|
in get use get clone restarts get-global clone
|
||||||
fuel-status boa
|
fuel-status boa
|
||||||
fuel-status-stack get push ;
|
fuel-status-stack get push ;
|
||||||
|
|
||||||
: pop-fuel-status ( -- )
|
: fuel-pop-restarts ( restarts -- )
|
||||||
|
fuel-eval-restartable? [ drop ] [ clone restarts set-global ] if ; inline
|
||||||
|
|
||||||
|
: fuel-pop-status ( -- )
|
||||||
fuel-status-stack get empty? [
|
fuel-status-stack get empty? [
|
||||||
fuel-status-stack get pop
|
fuel-status-stack get pop
|
||||||
[ in>> in set ]
|
[ in>> in set ]
|
||||||
[ use>> clone use set ]
|
[ use>> clone use set ]
|
||||||
[
|
[ restarts>> fuel-pop-restarts ] tri
|
||||||
restarts>> fuel-eval-restartable? [ drop ] [
|
|
||||||
clone restarts set-global
|
|
||||||
] if
|
|
||||||
] tri
|
|
||||||
] unless ;
|
] unless ;
|
||||||
|
|
||||||
|
|
||||||
! Lispy pretty printing
|
! Lispy pretty printing
|
||||||
|
|
||||||
GENERIC: fuel-pprint ( obj -- )
|
GENERIC: fuel-pprint ( obj -- )
|
||||||
|
@ -67,11 +65,7 @@ M: integer fuel-pprint pprint ; inline
|
||||||
M: string fuel-pprint pprint ; inline
|
M: string fuel-pprint pprint ; inline
|
||||||
|
|
||||||
M: sequence fuel-pprint
|
M: sequence fuel-pprint
|
||||||
dup empty? [ drop f fuel-pprint ] [
|
"(" write [ " " write ] [ fuel-pprint ] interleave ")" write ; inline
|
||||||
"(" write
|
|
||||||
[ " " write ] [ fuel-pprint ] interleave
|
|
||||||
")" write
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
M: tuple fuel-pprint tuple>array fuel-pprint ; inline
|
M: tuple fuel-pprint tuple>array fuel-pprint ; inline
|
||||||
|
|
||||||
|
@ -117,14 +111,13 @@ M: source-file fuel-pprint path>> fuel-pprint ;
|
||||||
: fuel-forget-output ( -- ) f fuel-eval-output set-global ; inline
|
: fuel-forget-output ( -- ) f fuel-eval-output set-global ; inline
|
||||||
|
|
||||||
: (fuel-begin-eval) ( -- )
|
: (fuel-begin-eval) ( -- )
|
||||||
push-fuel-status
|
fuel-push-status
|
||||||
fuel-forget-error
|
fuel-forget-error
|
||||||
fuel-forget-result
|
fuel-forget-result
|
||||||
fuel-forget-output ;
|
fuel-forget-output ;
|
||||||
|
|
||||||
: (fuel-end-eval) ( result -- )
|
: (fuel-end-eval) ( output -- )
|
||||||
fuel-eval-output set-global fuel-retort
|
fuel-eval-output set-global fuel-retort fuel-pop-status ; inline
|
||||||
pop-fuel-status ; inline
|
|
||||||
|
|
||||||
: (fuel-eval) ( lines -- )
|
: (fuel-eval) ( lines -- )
|
||||||
[ [ parse-lines ] with-compilation-unit call ] curry
|
[ [ parse-lines ] with-compilation-unit call ] curry
|
||||||
|
@ -155,16 +148,23 @@ M: source-file fuel-pprint path>> fuel-pprint ;
|
||||||
: fuel-get-edit-location ( defspec -- )
|
: fuel-get-edit-location ( defspec -- )
|
||||||
where fuel-normalize-loc 2array fuel-eval-set-result ; inline
|
where fuel-normalize-loc 2array fuel-eval-set-result ; inline
|
||||||
|
|
||||||
|
: fuel-get-vocab-location ( vocab -- )
|
||||||
|
>vocab-link fuel-get-edit-location ; inline
|
||||||
|
|
||||||
: fuel-get-doc-location ( defspec -- )
|
: fuel-get-doc-location ( defspec -- )
|
||||||
props>> "help-loc" swap at
|
props>> "help-loc" swap at
|
||||||
fuel-normalize-loc 2array fuel-eval-set-result ;
|
fuel-normalize-loc 2array fuel-eval-set-result ;
|
||||||
|
|
||||||
: fuel-format-xrefs ( seq -- seq )
|
! Cross-references
|
||||||
[ word? ] filter [
|
|
||||||
[ name>> ]
|
: fuel-word>xref ( word -- xref )
|
||||||
[ vocabulary>> ]
|
[ name>> ] [ vocabulary>> ] [ where fuel-normalize-loc ] tri 4array ;
|
||||||
[ where fuel-normalize-loc ] tri 4array
|
|
||||||
] map [ [ first ] dip first <=> ] sort ; inline
|
: fuel-sort-xrefs ( seq -- seq' )
|
||||||
|
[ [ first ] dip first <=> ] sort ; inline
|
||||||
|
|
||||||
|
: fuel-format-xrefs ( seq -- seq' )
|
||||||
|
[ word? ] filter [ fuel-word>xref ] map fuel-sort-xrefs ;
|
||||||
|
|
||||||
: fuel-callers-xref ( word -- )
|
: fuel-callers-xref ( word -- )
|
||||||
usage fuel-format-xrefs fuel-eval-set-result ; inline
|
usage fuel-format-xrefs fuel-eval-set-result ; inline
|
||||||
|
@ -172,9 +172,6 @@ M: source-file fuel-pprint path>> fuel-pprint ;
|
||||||
: fuel-callees-xref ( word -- )
|
: fuel-callees-xref ( word -- )
|
||||||
uses fuel-format-xrefs fuel-eval-set-result ; inline
|
uses fuel-format-xrefs fuel-eval-set-result ; inline
|
||||||
|
|
||||||
: fuel-get-vocab-location ( vocab -- )
|
|
||||||
>vocab-link fuel-get-edit-location ; inline
|
|
||||||
|
|
||||||
! Completion support
|
! Completion support
|
||||||
|
|
||||||
: fuel-filter-prefix ( seq prefix -- seq )
|
: fuel-filter-prefix ( seq prefix -- seq )
|
||||||
|
|
|
@ -78,15 +78,15 @@
|
||||||
`(,@fuel-font-lock--parsing-lock-keywords
|
`(,@fuel-font-lock--parsing-lock-keywords
|
||||||
(,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
|
(,fuel-syntax--stack-effect-regex . 'factor-font-lock-stack-effect)
|
||||||
(,fuel-syntax--parsing-words-ext-regex . 'factor-font-lock-parsing-word)
|
(,fuel-syntax--parsing-words-ext-regex . 'factor-font-lock-parsing-word)
|
||||||
(,fuel-syntax--declaration-words-regex 1 'factor-font-lock-declaration)
|
(,fuel-syntax--declaration-words-regex . 'factor-font-lock-declaration)
|
||||||
(,fuel-syntax--word-definition-regex 2 'factor-font-lock-word)
|
(,fuel-syntax--word-definition-regex 2 'factor-font-lock-word)
|
||||||
(,fuel-syntax--type-definition-regex 2 'factor-font-lock-type-name)
|
(,fuel-syntax--type-definition-regex 2 'factor-font-lock-type-name)
|
||||||
(,fuel-syntax--method-definition-regex (1 'factor-font-lock-type-name)
|
(,fuel-syntax--method-definition-regex (1 'factor-font-lock-type-name)
|
||||||
(2 'factor-font-lock-word))
|
(2 'factor-font-lock-word))
|
||||||
(,fuel-syntax--parent-type-regex 1 'factor-font-lock-type-name)
|
(,fuel-syntax--parent-type-regex 1 'factor-font-lock-type-name)
|
||||||
(,fuel-syntax--constructor-regex . 'factor-font-lock-constructor)
|
(,fuel-syntax--constructor-regex . 'factor-font-lock-constructor)
|
||||||
(,fuel-syntax--setter-regex 2 'factor-font-lock-setter-word)
|
(,fuel-syntax--setter-regex . 'factor-font-lock-setter-word)
|
||||||
(,fuel-syntax--getter-regex 2 'factor-font-lock-getter-word)
|
(,fuel-syntax--getter-regex . 'factor-font-lock-getter-word)
|
||||||
(,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
|
(,fuel-syntax--symbol-definition-regex 2 'factor-font-lock-symbol)
|
||||||
(,fuel-syntax--use-line-regex 1 'factor-font-lock-vocabulary-name))
|
(,fuel-syntax--use-line-regex 1 'factor-font-lock-vocabulary-name))
|
||||||
"Font lock keywords definition for Factor mode.")
|
"Font lock keywords definition for Factor mode.")
|
||||||
|
|
|
@ -147,6 +147,10 @@ buffer."
|
||||||
|
|
||||||
;;; Fuel listener mode:
|
;;; Fuel listener mode:
|
||||||
|
|
||||||
|
(defun fuel-listener--bol ()
|
||||||
|
(interactive)
|
||||||
|
(when (= (point) (comint-bol)) (beginning-of-line)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(define-derived-mode fuel-listener-mode comint-mode "Fuel Listener"
|
(define-derived-mode fuel-listener-mode comint-mode "Fuel Listener"
|
||||||
"Major mode for interacting with an inferior Factor listener process.
|
"Major mode for interacting with an inferior Factor listener process.
|
||||||
|
@ -160,6 +164,7 @@ buffer."
|
||||||
|
|
||||||
(define-key fuel-listener-mode-map "\C-cz" 'run-factor)
|
(define-key fuel-listener-mode-map "\C-cz" 'run-factor)
|
||||||
(define-key fuel-listener-mode-map "\C-c\C-z" 'run-factor)
|
(define-key fuel-listener-mode-map "\C-c\C-z" 'run-factor)
|
||||||
|
(define-key fuel-listener-mode-map "\C-a" 'fuel-listener--bol)
|
||||||
(define-key fuel-listener-mode-map "\C-ca" 'fuel-autodoc-mode)
|
(define-key fuel-listener-mode-map "\C-ca" 'fuel-autodoc-mode)
|
||||||
(define-key fuel-listener-mode-map "\C-ch" 'fuel-help)
|
(define-key fuel-listener-mode-map "\C-ch" 'fuel-help)
|
||||||
(define-key fuel-listener-mode-map "\C-cs" 'fuel-stack-mode)
|
(define-key fuel-listener-mode-map "\C-cs" 'fuel-stack-mode)
|
||||||
|
|
|
@ -62,8 +62,7 @@
|
||||||
'("flushable" "foldable" "inline" "parsing" "recursive"))
|
'("flushable" "foldable" "inline" "parsing" "recursive"))
|
||||||
|
|
||||||
(defconst fuel-syntax--declaration-words-regex
|
(defconst fuel-syntax--declaration-words-regex
|
||||||
(format "%s\\($\\| \\)"
|
(regexp-opt fuel-syntax--declaration-words 'words))
|
||||||
(regexp-opt fuel-syntax--declaration-words 'words)))
|
|
||||||
|
|
||||||
(defsubst fuel-syntax--second-word-regex (prefixes)
|
(defsubst fuel-syntax--second-word-regex (prefixes)
|
||||||
(format "^%s +\\([^ \r\n]+\\)" (regexp-opt prefixes t)))
|
(format "^%s +\\([^ \r\n]+\\)" (regexp-opt prefixes t)))
|
||||||
|
@ -81,8 +80,8 @@
|
||||||
|
|
||||||
(defconst fuel-syntax--constructor-regex "<[^ >]+>")
|
(defconst fuel-syntax--constructor-regex "<[^ >]+>")
|
||||||
|
|
||||||
(defconst fuel-syntax--getter-regex "\\( \\|^\\)\\([^ ]+>>\\)\\( \\|$\\)")
|
(defconst fuel-syntax--getter-regex "\\(^\\|\\_<\\)[^ ]+?>>\\_>")
|
||||||
(defconst fuel-syntax--setter-regex "\\( \\|^\\)\\(>>[^ ]+\\)\\( \\|$\\)")
|
(defconst fuel-syntax--setter-regex "\\_<>>.+?\\_>")
|
||||||
|
|
||||||
(defconst fuel-syntax--symbol-definition-regex
|
(defconst fuel-syntax--symbol-definition-regex
|
||||||
(fuel-syntax--second-word-regex '("SYMBOL:" "VAR:")))
|
(fuel-syntax--second-word-regex '("SYMBOL:" "VAR:")))
|
||||||
|
@ -104,7 +103,7 @@
|
||||||
(format "^\\(%s:\\) " fuel-syntax--definition-starters-regex))
|
(format "^\\(%s:\\) " fuel-syntax--definition-starters-regex))
|
||||||
|
|
||||||
(defconst fuel-syntax--definition-end-regex
|
(defconst fuel-syntax--definition-end-regex
|
||||||
(format "\\(\\(^\\| +\\);\\( +%s\\)*\\($\\| +\\)\\)"
|
(format "\\(\\(^\\| +\\);\\( *%s\\)*\\($\\| +\\)\\)"
|
||||||
fuel-syntax--declaration-words-regex))
|
fuel-syntax--declaration-words-regex))
|
||||||
|
|
||||||
(defconst fuel-syntax--single-liner-regex
|
(defconst fuel-syntax--single-liner-regex
|
||||||
|
@ -124,45 +123,33 @@
|
||||||
(format "\\(%s\\)\\|\\(%s .*\\)"
|
(format "\\(%s\\)\\|\\(%s .*\\)"
|
||||||
fuel-syntax--end-of-def-line-regex
|
fuel-syntax--end-of-def-line-regex
|
||||||
fuel-syntax--single-liner-regex))
|
fuel-syntax--single-liner-regex))
|
||||||
|
|
||||||
|
(defconst fuel-syntax--defun-signature-regex
|
||||||
|
(format "\\(%s\\|%s\\)"
|
||||||
|
(format ":[^ ]* [^ ]+\\(%s\\)*" fuel-syntax--stack-effect-regex)
|
||||||
|
"M[^:]*: [^ ]+ [^ ]+"))
|
||||||
|
|
||||||
|
|
||||||
;;; Factor syntax table
|
;;; Factor syntax table
|
||||||
|
|
||||||
(defvar fuel-syntax--syntax-table
|
(defvar fuel-syntax--syntax-table
|
||||||
(let ((i 0)
|
(let ((table (make-syntax-table)))
|
||||||
(table (make-syntax-table)))
|
;; Default is word constituent
|
||||||
;; Default is atom-constituent
|
(dotimes (i 256)
|
||||||
(while (< i 256)
|
(modify-syntax-entry i "w" table))
|
||||||
(modify-syntax-entry i "_ " table)
|
|
||||||
(setq i (1+ i)))
|
|
||||||
|
|
||||||
;; Word components.
|
|
||||||
(setq i ?0)
|
|
||||||
(while (<= i ?9)
|
|
||||||
(modify-syntax-entry i "w " table)
|
|
||||||
(setq i (1+ i)))
|
|
||||||
(setq i ?A)
|
|
||||||
(while (<= i ?Z)
|
|
||||||
(modify-syntax-entry i "w " table)
|
|
||||||
(setq i (1+ i)))
|
|
||||||
(setq i ?a)
|
|
||||||
(while (<= i ?z)
|
|
||||||
(modify-syntax-entry i "w " table)
|
|
||||||
(setq i (1+ i)))
|
|
||||||
|
|
||||||
;; Whitespace
|
;; Whitespace
|
||||||
(modify-syntax-entry ?\t " " table)
|
(modify-syntax-entry ?\t " " table)
|
||||||
(modify-syntax-entry ?\f " " table)
|
(modify-syntax-entry ?\f " " table)
|
||||||
(modify-syntax-entry ?\r " " table)
|
(modify-syntax-entry ?\r " " table)
|
||||||
(modify-syntax-entry ? " " table)
|
(modify-syntax-entry ?\ " " table)
|
||||||
|
(modify-syntax-entry ?\n " " table)
|
||||||
;; (end of) Comments
|
|
||||||
(modify-syntax-entry ?\n ">" table)
|
|
||||||
|
|
||||||
;; Parenthesis
|
;; Parenthesis
|
||||||
(modify-syntax-entry ?\[ "(] " table)
|
(modify-syntax-entry ?\[ "(]" table)
|
||||||
(modify-syntax-entry ?\] ")[ " table)
|
(modify-syntax-entry ?\] ")[" table)
|
||||||
(modify-syntax-entry ?{ "(} " table)
|
(modify-syntax-entry ?{ "(}" table)
|
||||||
(modify-syntax-entry ?} "){ " table)
|
(modify-syntax-entry ?} "){" table)
|
||||||
|
|
||||||
(modify-syntax-entry ?\( "()" table)
|
(modify-syntax-entry ?\( "()" table)
|
||||||
(modify-syntax-entry ?\) ")(" table)
|
(modify-syntax-entry ?\) ")(" table)
|
||||||
|
@ -170,13 +157,11 @@
|
||||||
;; Strings
|
;; Strings
|
||||||
(modify-syntax-entry ?\" "\"" table)
|
(modify-syntax-entry ?\" "\"" table)
|
||||||
(modify-syntax-entry ?\\ "/" table)
|
(modify-syntax-entry ?\\ "/" table)
|
||||||
table)
|
table))
|
||||||
"Syntax table used while in Factor mode.")
|
|
||||||
|
|
||||||
(defconst fuel-syntax--syntactic-keywords
|
(defconst fuel-syntax--syntactic-keywords
|
||||||
`(("\\(#!\\)" (1 "<"))
|
`(("\\(#!\\) .*\\(\n\\)" (1 "<") (2 ">"))
|
||||||
(" \\(!\\)" (1 "<"))
|
("\\( \\|^\\)\\(!\\) .*\\(\n\\)" (2 "<") (3 ">"))
|
||||||
("^\\(!\\)" (1 "<"))
|
|
||||||
("\\(!(\\) .* \\()\\)" (1 "<") (2 ">"))
|
("\\(!(\\) .* \\()\\)" (1 "<") (2 ">"))
|
||||||
("\\(\\[\\)\\(let\\|wlet\\|let\\*\\)\\( \\|$\\)" (1 "(]"))
|
("\\(\\[\\)\\(let\\|wlet\\|let\\*\\)\\( \\|$\\)" (1 "(]"))
|
||||||
("\\(\\[\\)\\(|\\) +[^|]* \\(|\\)" (1 "(]") (2 "(|") (3 ")|"))
|
("\\(\\[\\)\\(|\\) +[^|]* \\(|\\)" (1 "(]") (2 "(|") (3 ")|"))
|
||||||
|
@ -282,11 +267,6 @@
|
||||||
(re-search-forward fuel-syntax--end-of-def-regex nil t)
|
(re-search-forward fuel-syntax--end-of-def-regex nil t)
|
||||||
(point)))
|
(point)))
|
||||||
|
|
||||||
(defconst fuel-syntax--defun-signature-regex
|
|
||||||
(format "\\(%s\\|%s\\)"
|
|
||||||
(format ":[^ ]* [^ ]+\\(%s\\)*" fuel-syntax--stack-effect-regex)
|
|
||||||
"M[^:]*: [^ ]+ [^ ]+"))
|
|
||||||
|
|
||||||
(defun fuel-syntax--beginning-of-body ()
|
(defun fuel-syntax--beginning-of-body ()
|
||||||
(let ((p (point)))
|
(let ((p (point)))
|
||||||
(and (fuel-syntax--beginning-of-defun)
|
(and (fuel-syntax--beginning-of-defun)
|
||||||
|
|
Loading…
Reference in New Issue