Function: f90-typedec-matcher
f90-typedec-matcher is a byte-compiled function defined in f90.el.gz.
Signature
(f90-typedec-matcher LIMIT)
Documentation
Search for the declaration of variables of derived type, up to LIMIT.
Set the match data so that subexpression 1,2 are the TYPE(...), and variable-name parts, respectively.
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/f90.el.gz
;; NB not explicitly handling this, yet it seems to work.
;; type(...) function foo()
(defun f90-typedec-matcher (limit)
"Search for the declaration of variables of derived type, up to LIMIT.
Set the match data so that subexpression 1,2 are the TYPE(...),
and variable-name parts, respectively."
;; Matcher functions must return nil only when there are no more
;; matches within the search range.
(let (found l)
(while (and (re-search-forward "\\_<\\(type\\|class\\)[ \t]*(" limit t)
(not
(setq found
(condition-case nil
(progn
;; Set l after this to just highlight
;; the "type" part.
(backward-char 1)
;; Needed for: type( foo(...) ) :: bar
(forward-sexp)
(setq l (list (match-beginning 0) (point)))
(skip-chars-forward " \t")
(when
(re-search-forward
;; type (foo) bar, qux
(if (looking-at "\\(?:\\sw\\|\\s_\\)+")
"\\([^&!\n]+\\)"
;; type (foo), stuff :: bar, qux
"::[ \t]*\\([^&!\n]+\\)")
(line-end-position) t)
(set-match-data
(append (list (car l) (match-end 1))
l (list (match-beginning 1)
(match-end 1))))
t))
(error nil))))))
found))