;ELC ;;; Compiled ;;; in Emacs version 26.3 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (byte-code "\300\301!\210\300\302!\210\300\303!\210\304\305\306\307\310\311\312\302&\210\313\314\315\316\317\320\312\305&\210\313\321\322\323\317\324\312\305&\210\313\325\326\327\317\330\312\305&\207" [require thingatpt f90 etags custom-declare-group f90-iface nil "Static parser for Fortran 90 code" :prefix "f90-" :group custom-declare-variable f90-file-extensions (list "f90" "F90" "fpp") "Extensions to consider when looking for Fortran 90 files." :type (repeat string) f90-file-name-check-functions '(f90-check-fluidity-refcount) "List of functions to call to check if a file should be parsed.\n\nIn addition to checking if a file exists and is readable, you can\nadd extra checks before deciding to parse a file. Each function\nwill be called with one argument, the fully qualified name of the\nfile to test, it should return non-nil if the file should be\nparsed. For an example test function see\n`f90-check-fluidity-refcount'." (repeat function) f90-extra-file-functions '(f90-insert-fluidity-refcount) "List of functions to call to insert extra files to parse.\n\nEach function should be a function of two arguments, the first is the\nfully qualified filename (with directory) the second is the\nunqualified filename." (repeat function)] 8) (defvar f90-interface-type nil) (make-variable-buffer-local 'f90-interface-type) (defvar f90-buffer-to-switch-to nil) (make-variable-buffer-local 'f90-buffer-to-switch-to) (defvar f90-invocation-marker nil) (make-variable-buffer-local 'f90-invocation-marker) #@48 compiler-macro for inlining `f90-interface-p'. (defalias 'f90-interface-p--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-interface-p (and (memq (type-of cl-x) cl-struct-f90-interface-tags) t)) nil] 7 (#$ . 1924)]) (put 'f90-interface-p 'compiler-macro 'f90-interface-p--cmacro) (defalias 'f90-interface-p #[(cl-x) "\302! >\205 \303\207" [cl-x cl-struct-f90-interface-tags type-of t] 2]) (byte-code "\300\301\302\303#\304\305\306\301#\207" [function-put f90-interface-p side-effect-free error-free put f90-interface cl-deftype-satisfies] 5) #@51 compiler-macro for inlining `f90-interface-name'. (defalias 'f90-interface-name--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-interface-name (or (f90-interface-p cl-x) (signal 'wrong-type-argument (list 'f90-interface cl-x))) (aref cl-x 1)) nil] 7 (#$ . 2537)]) (put 'f90-interface-name 'compiler-macro 'f90-interface-name--cmacro) #@52 Access slot "name" of `f90-interface' struct CL-X. (defalias 'f90-interface-name #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-interface-tags type-of signal wrong-type-argument f90-interface 1] 4 (#$ . 2941)]) (byte-code "\300\301\302\303#\300\301\304\305#\300\207" [function-put f90-interface-name side-effect-free t gv-expander #[(_cl-do _cl-x) "\300\301\302\"\207" [error "%s is a read-only slot" f90-interface-name] 3]] 5) #@54 compiler-macro for inlining `f90-interface-publicp'. (defalias 'f90-interface-publicp--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-interface-publicp (or (f90-interface-p cl-x) (signal 'wrong-type-argument (list 'f90-interface cl-x))) (aref cl-x 2)) nil] 7 (#$ . 3404)]) (put 'f90-interface-publicp 'compiler-macro 'f90-interface-publicp--cmacro) #@55 Access slot "publicp" of `f90-interface' struct CL-X. (defalias 'f90-interface-publicp #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-interface-tags type-of signal wrong-type-argument f90-interface 2] 4 (#$ . 3823)]) (byte-code "\300\301\302\303#\300\207" [function-put f90-interface-publicp side-effect-free t] 4) #@59 compiler-macro for inlining `f90-interface-specialisers'. (defalias 'f90-interface-specialisers--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-interface-specialisers (or (f90-interface-p cl-x) (signal 'wrong-type-argument (list 'f90-interface cl-x))) (aref cl-x 3)) nil] 7 (#$ . 4173)]) (put 'f90-interface-specialisers 'compiler-macro 'f90-interface-specialisers--cmacro) #@60 Access slot "specialisers" of `f90-interface' struct CL-X. (defalias 'f90-interface-specialisers #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-interface-tags type-of signal wrong-type-argument f90-interface 3] 4 (#$ . 4617)]) (byte-code "\300\301\302\303#\304\305\306\"\207" [function-put f90-interface-specialisers side-effect-free t defalias copy-f90-interface copy-sequence] 4) #@107 compiler-macro for inlining `make-f90-interface'. (fn CL-WHOLE &cl-quote &key NAME PUBLICP SPECIALISERS) (defalias 'make-f90-interface--cmacro #[(cl-whole &rest #1=#:--cl-rest--) "\306\307\"\206\310A@\306\311\"A@\306\312\"A@\f\203E\f@\313>\203.\fAA\211\202\314>A@\203<\315\211\202\316\317\f@\"\210\202)\320\321\322\315 \315 \n &+\207" [#1# name publicp specialisers #2=#:--cl-keys-- cl-whole plist-member :name (nil "") :publicp :specialisers (:name :publicp :specialisers :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:name :publicp :specialisers)" cl--defsubst-expand (name publicp specialisers) (cl-block make-f90-interface (record 'f90-interface name publicp specialisers))] 10 (#$ . 5035)]) (put 'make-f90-interface 'compiler-macro 'make-f90-interface--cmacro) #@87 Constructor for objects of type `f90-interface'. (fn &key NAME PUBLICP SPECIALISERS) (defalias 'make-f90-interface #[(&rest #1=#:--cl-rest--) "\305\306\"\206\307A@\305\310\"A@\305\311\"A@\f\203E\f@\312>\203.\fAA\211\202\313>A@\203<\314\211\202\315\316\f@\"\210\202)\317\320 \n $+\207" [#1# name publicp specialisers #2=#:--cl-keys-- plist-member :name (nil "") :publicp :specialisers (:name :publicp :specialisers :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:name :publicp :specialisers)" record f90-interface] 6 (#$ . 5865)]) (byte-code "\300\301\302\303#\304\305\306\307\310\306\311\312\305\303& \207" [function-put make-f90-interface side-effect-free t cl-struct-define f90-interface nil cl-structure-object record ((cl-tag-slot) (name "" :read-only t) (publicp nil) (specialisers)) cl-struct-f90-interface-tags] 11) #@50 compiler-macro for inlining `f90-specialiser-p'. (defalias 'f90-specialiser-p--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-specialiser-p (and (memq (type-of cl-x) cl-struct-f90-specialiser-tags) t)) nil] 7 (#$ . 6750)]) (put 'f90-specialiser-p 'compiler-macro 'f90-specialiser-p--cmacro) (defalias 'f90-specialiser-p #[(cl-x) "\302! >\205 \303\207" [cl-x cl-struct-f90-specialiser-tags type-of t] 2]) (byte-code "\300\301\302\303#\304\305\306\301#\207" [function-put f90-specialiser-p side-effect-free error-free put f90-specialiser cl-deftype-satisfies] 5) #@53 compiler-macro for inlining `f90-specialiser-name'. (defalias 'f90-specialiser-name--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-specialiser-name (or (f90-specialiser-p cl-x) (signal 'wrong-type-argument (list 'f90-specialiser cl-x))) (aref cl-x 1)) nil] 7 (#$ . 7383)]) (put 'f90-specialiser-name 'compiler-macro 'f90-specialiser-name--cmacro) #@54 Access slot "name" of `f90-specialiser' struct CL-X. (defalias 'f90-specialiser-name #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-specialiser-tags type-of signal wrong-type-argument f90-specialiser 1] 4 (#$ . 7801)]) (byte-code "\300\301\302\303#\300\301\304\305#\300\207" [function-put f90-specialiser-name side-effect-free t gv-expander #[(_cl-do _cl-x) "\300\301\302\"\207" [error "%s is a read-only slot" f90-specialiser-name] 3]] 5) #@53 compiler-macro for inlining `f90-specialiser-type'. (defalias 'f90-specialiser-type--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-specialiser-type (or (f90-specialiser-p cl-x) (signal 'wrong-type-argument (list 'f90-specialiser cl-x))) (aref cl-x 2)) nil] 7 (#$ . 8276)]) (put 'f90-specialiser-type 'compiler-macro 'f90-specialiser-type--cmacro) #@54 Access slot "type" of `f90-specialiser' struct CL-X. (defalias 'f90-specialiser-type #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-specialiser-tags type-of signal wrong-type-argument f90-specialiser 2] 4 (#$ . 8694)]) (byte-code "\300\301\302\303#\300\207" [function-put f90-specialiser-type side-effect-free t] 4) #@56 compiler-macro for inlining `f90-specialiser-arglist'. (defalias 'f90-specialiser-arglist--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-specialiser-arglist (or (f90-specialiser-p cl-x) (signal 'wrong-type-argument (list 'f90-specialiser cl-x))) (aref cl-x 3)) nil] 7 (#$ . 9045)]) (put 'f90-specialiser-arglist 'compiler-macro 'f90-specialiser-arglist--cmacro) #@57 Access slot "arglist" of `f90-specialiser' struct CL-X. (defalias 'f90-specialiser-arglist #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-specialiser-tags type-of signal wrong-type-argument f90-specialiser 3] 4 (#$ . 9478)]) (byte-code "\300\301\302\303#\300\207" [function-put f90-specialiser-arglist side-effect-free t] 4) #@57 compiler-macro for inlining `f90-specialiser-location'. (defalias 'f90-specialiser-location--cmacro #[(_cl-whole-arg cl-x) "\301\302\303\304\211\211&\207" [cl-x cl--defsubst-expand (cl-x) (cl-block f90-specialiser-location (or (f90-specialiser-p cl-x) (signal 'wrong-type-argument (list 'f90-specialiser cl-x))) (aref cl-x 4)) nil] 7 (#$ . 9838)]) (put 'f90-specialiser-location 'compiler-macro 'f90-specialiser-location--cmacro) #@58 Access slot "location" of `f90-specialiser' struct CL-X. (defalias 'f90-specialiser-location #[(cl-x) "\302! >\204\303\304\305D\"\210\306H\207" [cl-x cl-struct-f90-specialiser-tags type-of signal wrong-type-argument f90-specialiser 4] 4 (#$ . 10276)]) (byte-code "\300\301\302\303#\304\305\306\"\207" [function-put f90-specialiser-location side-effect-free t defalias copy-f90-specialiser copy-sequence] 4) #@110 compiler-macro for inlining `make-f90-specialiser'. (fn CL-WHOLE &cl-quote &key NAME TYPE ARGLIST LOCATION) (defalias 'make-f90-specialiser--cmacro #[(cl-whole &rest #1=#:--cl-rest--) "\306\307\"\206\310A@\306\311\"\206\312A@\306\313\"\206\314A@\306\315\"A@ \203T @\316>\203= AA\211\202+\317>A@\203K\320\211\202+\321\322 @\"\210\202*)\323\324\325\320\320 \n \f& ,\207" [#1# name type arglist location #2=#:--cl-keys-- plist-member :name (nil #3="") :type (nil #3#) :arglist (nil #3#) :location (:name :type :arglist :location :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:name :type :arglist :location)" cl--defsubst-expand (name type arglist location) (cl-block make-f90-specialiser (record 'f90-specialiser name type arglist location)) cl-whole] 11 (#$ . 10695)]) (put 'make-f90-specialiser 'compiler-macro 'make-f90-specialiser--cmacro) #@90 Constructor for objects of type `f90-specialiser'. (fn &key NAME TYPE ARGLIST LOCATION) (defalias 'make-f90-specialiser #[(&rest #1=#:--cl-rest--) "\306\307\"\206\310A@\306\311\"\206\312A@\306\313\"\206\314A@\306\315\"A@ \203T @\316>\203= AA\211\202+\317>A@\203K\320\211\202+\321\322 @\"\210\202*)\323\324 \n \f%,\207" [#1# name type arglist location #2=#:--cl-keys-- plist-member :name (nil #3="") :type (nil #3#) :arglist (nil #3#) :location (:name :type :arglist :location :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:name :type :arglist :location)" record f90-specialiser] 7 (#$ . 11604)]) (byte-code "\300\301\302\303#\304\305\306\307\310\306\311\312\305\303& \207" [function-put make-f90-specialiser side-effect-free t cl-struct-define f90-specialiser nil cl-structure-object record ((cl-tag-slot) (name #1="" :read-only t) (type #1#) (arglist #1#) (location)) cl-struct-f90-specialiser-tags] 11) #@53 Hash table populated with all known f90 interfaces. (defvar f90-all-interfaces (make-hash-table :test 'equal) (#$ . 12575)) #@56 Hash table populated with all known f90 derived types. (defvar f90-types (make-hash-table :test 'equal) (#$ . 12705)) #@49 Return all specialisers for NAME in INTERFACES. (defalias 'f90-specialisers #[(name interfaces) "\304 \"\305\n! >\204\306\307\310\nD\"\210\n\311H)\207" [name interfaces cl-x cl-struct-f90-interface-tags f90-get-interface type-of signal wrong-type-argument f90-interface 3] 4 (#$ . 12829)]) (put 'f90-specialisers 'byte-optimizer 'byte-compile-inline-expand) #@46 Return non-nil if NAME is an interface name. (defalias 'f90-valid-interface-name #[(name) "\302 \"\207" [name f90-all-interfaces gethash] 3 (#$ . 13197)]) (put 'f90-valid-interface-name 'byte-optimizer 'byte-compile-inline-expand) #@149 Count commas in STR. If LEVEL is non-nil, only count commas up to the specified nesting level. For example, a LEVEL of 0 counts top-level commas. (defalias 'f90-count-commas #[(str &optional level) "\302 \"GS\207" [str level f90-split-arglist] 3 (#$ . 13436)]) (put 'f90-count-commas 'byte-optimizer 'byte-compile-inline-expand) #@35 Return the variable name of TYPE. (defalias 'f90-get-parsed-type-varname #[(type) "@\207" [type] 1 (#$ . 13774)]) (put 'f90-get-parsed-type-varname 'byte-optimizer 'byte-compile-inline-expand) #@31 Return the type name of TYPE. (defalias 'f90-get-parsed-type-typename #[(type) "A@\207" [type] 1 (#$ . 13974)]) (put 'f90-get-parsed-type-typename 'byte-optimizer 'byte-compile-inline-expand) #@31 Return the modifiers of TYPE. (defalias 'f90-get-parsed-type-modifiers #[(type) "AA\207" [type] 1 (#$ . 14173)]) (put 'f90-get-parsed-type-modifiers 'byte-optimizer 'byte-compile-inline-expand) #@53 Return the struct definition corresponding to TYPE. (defalias 'f90-get-type #[(type) "\302\211A@) \"\207" [type f90-types gethash] 4 (#$ . 14374)]) (put 'f90-get-type 'byte-optimizer 'byte-compile-inline-expand) #@31 Get the type of SLOT in TYPE. (defalias 'f90-get-slot-type #[(slot type) "\304\305\306\211A@) #!\211\205\n\307\211A@) \")!)\207" [type slot fn f90-types intern-soft format "f90-type.%s.%s" gethash] 6 (#$ . 14594)]) (put 'f90-get-slot-type 'byte-optimizer 'byte-compile-inline-expand) #@68 Lazily produce a completion table of all interfaces and tag names. (defalias 'f90-lazy-completion-table #[nil "\302\303!\211\211pL\210)\304\305\306\307\310D\311D\312FE)\207" [#1=#:--cl-buf-- #2=#:v make-symbol "--buf--" lambda (&rest --cl-rest--) apply function #[(#3=#:G3 string pred action) "rJq\210\212\306\307 \210)\310\n\311 !\f $*\207" [#3# enable-recursive-minibuffers action f90-all-interfaces string pred t visit-tags-table-buffer complete-with-action f90-merge-into-tags-completion-table] 5] quote --cl-rest--] 7 (#$ . 14893)]) #@61 Merge completions in CTABLE into the tags completion table. (defalias 'f90-merge-into-tags-completion-table #[(ctable) "\204 \203\304 \305\306 \"\210\n)\207 \207" [tags-file-name tags-table-list table ctable tags-completion-table maphash #[(k v) "\210\303 \n\"\207" [v k table intern] 3]] 3 (#$ . 15442)]) (put 'f90-merge-into-tags-completion-table 'byte-optimizer 'byte-compile-inline-expand) #@102 Return the typename from NAME. If NAME is like type(TYPENAME) return TYPENAME, otherwise just NAME. (defalias 'f90-extract-type-name #[(name) "\203\301\302\"\203\303\304\"\207\207" [name string-match "\\`type(\\([^)]+\\))\\'" match-string 1] 3 (#$ . 15850)]) (put 'f90-extract-type-name 'byte-optimizer 'byte-compile-inline-expand) #@280 Parse all interfaces found in DIR and its subdirectories. Recurse over all (non-hidden) directories below DIR and parse interfaces found within them using `f90-parse-interfaces-in-dir', a directory is considered hidden if it's name doesn't start with an alphanumeric character. (defalias 'f90-parse-all-interfaces #[(dir) "\306\211\211\307!C \203g \211A\242\fB\211@\310 ! \311\312 !\233\211\n\235\204c \nB\306\211\203b@\313\314\"\203Y\315!\203Y \307!C\244A\211\204=*+\202 \316\317\f\",\207" [dir pending seen attrs dirs this-dir nil expand-file-name directory-files 10 file-attributes string-match "\\`[[:alnum:]]" file-directory-p mapc f90-parse-interfaces-in-dir contents default-directory file --dolist-tail--] 6 (#$ . 16198) "DParse files in tree: "]) #@69 Parse all Fortran 90 files in DIR to populate `f90-all-interfaces'. (defalias 'f90-parse-interfaces-in-dir #[(dir) "\305\306\307\310\311\312 B\313BBB\306\"#\314\n:\203'\n@\315 \f\"\210\nA\211\202*\314\207" [dir f90-file-extensions #1=#:--cl-var-- file f90-all-interfaces directory-files t rx-to-string and "." or (eos) nil f90-parse-interfaces] 9 (#$ . 17003) "DParse files in directory: "]) #@310 List all interfaces matching NAME. Restricts list to those matching the (possibly typed) arglist of the word at point. If MATCH-SUBLIST is non-nil, only check if the arglist is a sublist of the specialiser's arglist. For more details see `f90-approx-arglist-match' and `f90-browse-interface-specialisers'. (defalias 'f90-find-tag-interface #[(name &optional match-sublist) "\303 \")\203\304\305 \n\306 $\207\307\n\"\207" [name f90-all-interfaces match-sublist gethash f90-browse-interface-specialisers f90-arglist-types point-marker find-tag] 5 (#$ . 17410) (let ((def (word-at-point))) (list (completing-read (format "Find interface/tag (default %s): " def) (f90-lazy-completion-table) nil t nil nil def) current-prefix-arg))]) #@387 Browse all interfaces matching NAME. If ARGLIST-TO-MATCH is non-nil restrict to those interfaces that match it. If MATCH-SUBLIST is non-nil only restrict to those interfaces for which ARGLIST-TO-MATCH is a sublist of the specialiser's arglist. If INVOCATION-POINT is non-nil it should be a `point-marker' indicating where we were called from, for jumping back to with `pop-tag-mark'. (defalias 'f90-browse-interface-specialisers #[(name &optional arglist-to-match match-sublist invocation-point) "p \204 \306 r\307\310!q\210\311\n \"\312\313\312\314 \210\313\315\316\317! >\2046\320\321\322D\"\210\323H\"\210)eb\210\324\325\317! >\204W\320\321\322D\"\210\326H\"c\210!\203w\324\327\f\313U\203o\330\202p\331\332!!#c\210\333 \210\" # $\334p!-\207" [buf invocation-point name f90-all-interfaces n-specs type point-marker get-buffer-create "*Interface Browser*" f90-get-interface nil 0 erase-buffer maphash #[(#1=#:--cl-var-- s) "\306! >\204\307\310\311D\"\210\312H \203\313 \f#\205\272\314\211\315\316\314\306! >\2043\307\310\311D\"\210\317H\320\321#\306! >\204H\307\310\311D\"\210\322H@\315\323\324\325\326 !!!\324 !#)\327\306! >\204k\307\310\311D\"\210\330H!$\331\306! >\204\200\307\310\311D\"\210\322H\332\306! >\204\223\307\310\311D\"\210\317H\333\334\335\336& \337P\340\306! >\204\256\307\310\311D\"\210\317H#c\210!T\211!\207" [s cl-struct-f90-specialiser-tags type arglist-to-match match-sublist f type-of signal wrong-type-argument f90-specialiser 2 f90-approx-arglist-match propertize format "%s [defined in %s]\n (%s)\n" 1 face bold 4 "%s/%s" file-name-nondirectory directory-file-name file-name-directory f90-fontify-arglist 3 f90-specialiser-location f90-specialiser-name mouse-face highlight help-echo "mouse-1: find definition in other window" "\n" f90-specialiser-extent #2=#:--cl-var--] 11] type-of signal wrong-type-argument f90-interface 3 format "Interfaces for %s:\n\n" 1 "%s\n%s\n\n" "No interfaces matching arglist (intrinsic?):" "Only showing interfaces matching arglist:" f90-fontify-arglist f90-interface-browser-mode pop-to-buffer interface buffer-read-only #2# cl-struct-f90-interface-tags arglist-to-match f90-buffer-to-switch-to f90-interface-type f90-invocation-marker] 6 (#$ . 18156) (let ((def (word-at-point))) (list (completing-read (format "Interface%s: " (if def (format " (default %s)" def) "")) f90-all-interfaces nil t nil nil def)))]) #@47 Go to the next ARG'th specialiser definition. (defalias 'f90-next-definition #[(&optional arg) "\204\301\302V\205\303`\304\305d$b\210S\211\202\207" [arg 1 0 next-single-property-change f90-specialiser-extent nil] 6 (#$ . 20613) "p"]) #@51 Go to the previous ARG'th specialiser definition. (defalias 'f90-previous-definition #[(&optional arg) "\204\302\303V\205.\304 S\211\303Y\203\"\305`\306\307e$b\210\202)\310\302!\210S\211\202\207" [arg #1=#:--cl-var-- 1 0 2 previous-single-property-change f90-specialiser-extent nil f90-next-definition] 6 (#$ . 20864) "p"]) #@54 Visit the definition at the position of the event E. (defalias 'f90-mouse-find-definition #[(e) "\303!\211@\262\304\303!!\305\n!\204\306\307!\210r\310\n!q\210 b\210\311 +\207" [e point win event-end posn-point windowp error "No definition here" window-buffer f90-find-definition] 4 (#$ . 21209) "e"]) #@29 Quit the interface browser. (defalias 'f90-quit-browser #[nil "\302p!\210\303 !)\207" [f90-buffer-to-switch-to buf kill-buffer pop-to-buffer] 2 (#$ . 21523) nil]) #@34 Visit the definition at `point'. (defalias 'f90-find-definition #[nil "\306`\307\"\306`\310\"p\311\211\203O\312\"\210\313 @!\210p A@b\210\314\315\316 \f#\311\317#\204=\320\315\316 \f#\311\317#\210\321 \210\322\323!\210\324\n!\210 \211\202R\325\326!-\207" [f90-interface-type buf-to buf type name location get-text-property f90-specialiser-location f90-specialiser-name nil ring-insert find-file-other-window re-search-forward format "%s[ ]+%s[ ]*(" t re-search-backward beginning-of-line recenter 0 pop-to-buffer error "No definition at point" find-tag-marker-ring f90-invocation-marker f90-buffer-to-switch-to] 6 (#$ . 21694) nil]) #@42 Keymap for `f90-interface-browser-mode'. (defvar f90-interface-browser-mode-map (byte-code "\301 \302\303\304#\210\302\305\306#\210\302\307\306#\210\302\310\311#\210\302\312\311#\210\302\313\314#\210\302\315\316#\210)\207" [map make-sparse-keymap define-key " " f90-find-definition [down] f90-next-definition " " [up] f90-previous-definition [backtab] "q" f90-quit-browser [mouse-1] f90-mouse-find-definition] 4) (#$ . 22351)) (defvar f90-interface-browser-mode-hook nil) (byte-code "\300\301N\204\f\302\300\301\303#\210\304\305!\204\302\305\306\307#\210\300\207" [f90-interface-browser-mode-hook variable-documentation put "Hook run after entering IBrowse mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it. (This is true for all hook variables.)" boundp f90-interface-browser-mode-map definition-name f90-interface-browser-mode] 4) (defvar f90-interface-browser-mode-map (make-sparse-keymap)) (byte-code "\301\302N\204\303\301\302\304\305!#\210\306\307!\204\303\307\310\311#\210\312\313 !\210\307\302N\204-\303\307\302\304\314!#\210\306\300!\204B\303\300\310\311#\210\315\316\300\317\"\210!\210\300\302N\204P\303\300\302\304\320!#\210\303\311\321\317#\207" [f90-interface-browser-mode-abbrev-table f90-interface-browser-mode-map variable-documentation put purecopy "Keymap for `f90-interface-browser-mode'." boundp f90-interface-browser-mode-syntax-table definition-name f90-interface-browser-mode (lambda (#1=#:def-tmp-var) (defvar f90-interface-browser-mode-syntax-table #1#)) make-syntax-table "Syntax table for `f90-interface-browser-mode'." (lambda (#1#) (defvar f90-interface-browser-mode-abbrev-table #1#)) define-abbrev-table nil "Abbrev table for `f90-interface-browser-mode'." derived-mode-parent] 5) #@192 Major mode for browsing f90 interfaces. This mode runs the hook `f90-interface-browser-mode-hook', as the final or penultimate step during initialization. \{f90-interface-browser-mode-map} (defalias 'f90-interface-browser-mode #[nil "\306\300!\210\307\310 \210\311\312\313 !\210\314\f!\210 \307\315\316!\210)\317\320!\207" [delay-mode-hooks major-mode mode-name f90-interface-browser-mode-map f90-interface-browser-mode-syntax-table f90-interface-browser-mode-abbrev-table make-local-variable t kill-all-local-variables f90-interface-browser-mode "IBrowse" use-local-map set-syntax-table set-buffer-modified-p nil run-mode-hooks f90-interface-browser-mode-hook local-abbrev-table buffer-read-only] 2 (#$ . 24133) nil]) #@270 Return a guess for the type of the thing at `point'. If `point' is currently on a line containing a variable declaration, return the typename of the declaration. Otherwise try and figure out the typename of the variable at point (possibly including slot references). (defalias 'f90-type-at-point #[nil "\212\306y\210\307 )\2060\212\310!\311\312\313 #\210\314 p\315\216\316 !\210\317\313!\210\320\321`\322\313!\210`\"C!-\211@\211A@)\211\203K\323\324\f\"\203K\325\326\f\"\202L\f*\207" [f90-mode-syntax-table syntax #1=#:buffer #2=#:table name type 0 f90-parse-single-type-declaration copy-syntax-table modify-syntax-entry 37 "w" syntax-table #[nil "rq\210\302 !)\207" [#1# #2# set-syntax-table] 2] set-syntax-table skip-syntax-backward f90-arg-types buffer-substring-no-properties skip-syntax-forward string-match "\\`type(\\([^)]+\\))\\'" match-string 1] 6 (#$ . 24868)]) #@381 Show the definition of TYPE. This formats the parsed definition of TYPE, rather than jumping to the existing definition. When called interactively, default to the type of the thing at `point'. If `point' is on a type declaration line, the default is the declaration type. If `point' is on a variable name (possibly with slot references) the default is the type of the variable. (defalias 'f90-show-type-definition #[(type) "r\306\307!q\210\310\311 \210\312 \210\313\314 \"\310\nD\315 \211A@) \")\310\f\203^\316\313\317\n\"!\f!\310\211:\203Y@\316\313\320\n#!BA\211\202:\237+\f\204k\313\321 \"c\210\202\276\313\322 \"c\210 \310\211\323 :\203\264@ \203\224\f!\202\230\f!\313\324\325!\211@)#c\210A\310 \202},\313\326 \"c\210\327 \210eb\210\330 \210\331p!,\207" [buffer-read-only type tname f90-types type-struct fns get-buffer-create "*Type definition*" nil fundamental-mode erase-buffer format "type(%s)" gethash intern-soft "f90-type.%s.-varnames" "f90-type.%s.%s" "The type %s is not a known derived type." "type %s\n" t " %s :: %s\n" f90-format-parsed-slot-type "end type %s\n" f90-mode view-mode pop-to-buffer #1=#:--cl-var-- name #2=#:--cl-var-- #3=#:--cl-var-- fn parsed #4=#:--cl-var--] 6 (#$ . 25760) (list (let ((def (f90-type-at-point))) (completing-read (if def (format "Type (default %s): " def) "Type: ") (let* ((#5=#:--cl-var-- nil)) (maphash #'(lambda (type #6=#:--cl-var--) (setq #5# (cons (f90-extract-type-name type) #5#))) f90-types) (nreverse #5#)) nil t nil nil def)))]) #@55 Turn a parsed TYPE into a valid f90 type declaration. (defalias 'f90-format-parsed-slot-type #[(type) "\204\304\207A\305\306\307\211 :\203I @\211:\2037\n@\310\230\2037\311\312\305\306\313\nA\314\"\315#\" B\202B\316\317\n\"\204B\n B A\211\202 \237+\320#\207" [type #1=#:--cl-var-- a #2=#:--cl-var-- "UNION-TYPE" mapconcat identity nil "dimension" format "dimension(%s)" make-list ":" "," string-match "\\`intent(\\(?:in\\|out\\|inout\\))" ", "] 10 (#$ . 27328)]) #@35 Fontify ARGLIST using `f90-mode'. (defalias 'f90-fontify-arglist #[(arglist) "\303\304!rq\210\305\216 ;\203\306\307 \"c\210\202\310\311 \312#c\210\313 \210\314 \210eb\210\310\315\316m\204A\317 \320 \321GZ{\nB\322y\210\202,\n\237)\323#+\207" [#1=#:temp-buffer arglist #2=#:--cl-var-- generate-new-buffer " *temp*" #[nil "\301!\205 \302!\207" [#1# buffer-name kill-buffer] 2] format "%s :: foo\n" mapconcat #[(x) "\301\302\303!\"\207" [x format "%s :: foo" f90-format-parsed-slot-type] 4] "\n" f90-mode font-lock-fontify-buffer identity nil line-beginning-position line-end-position " :: foo" 1 "; "] 5 (#$ . 27816)]) #@37 Count non-optional args in ARGLIST. (defalias 'f90-count-non-optional-args #[(arglist) "\305\306 :\203# @\307\n\211AA)\235\204 T A\211\202 +\207" [arglist #1=#:--cl-var-- arg #2=#:--cl-var-- type nil 0 "optional"] 3 (#$ . 28452)]) #@175 Return non-nil if ARGLIST matches the arglist of SPECIALISER. If MATCH-SUB-LIST is non-nil just require that ARGLIST matches the first (length ARGLIST) args of SPECIALISER. (defalias 'f90-approx-arglist-match #[(arglist specialiser &optional match-sub-list) "G\306\n! >\204\307\310\311\nD\"\210\n\312H\211G\313\f!\2040 X\205\207 X\205\207\3142\207\315\f\315\211:\203\204@:\203\204@\203w\211A@)\211A@)\230\204w\316\314\315\"\210AA\202C-\3170,\207" [arglist n-passed-args specialiser cl-struct-f90-specialiser-tags spec-arglist n-spec-args type-of signal wrong-type-argument f90-specialiser 3 f90-count-non-optional-args --cl-block-nil-- nil throw t n-required-args match-sub-list #1=#:--cl-var-- arg #2=#:--cl-var-- spec-arg match type] 5 (#$ . 28703)]) #@52 Clean Fortran 90 comments from the current buffer. (defalias 'f90-clean-comments #[nil "\212eb\210\301!\210\302\303\304\305#\205&\306\307\310 `\"8\203`S\310 ]\311 |\210\202)\207" [f90-mode-syntax-table set-syntax-table search-forward "!" nil t 4 parse-partial-sexp line-beginning-position line-end-position] 4 (#$ . 29526)]) #@71 Splat Fortran continuation lines in the current buffer onto one line. (defalias 'f90-clean-continuation-lines #[nil "\212eb\210\300\301\302\303#\205\304\305\302\303#\210\202)\207" [re-search-forward "&[ ]*\n[ ]*&?" nil t replace-match ""] 4 (#$ . 29863)]) #@49 Return a suitably normalised version of STRING. (defalias 'f90-normalise-string #[(string) "\302 \303\216\304\305 \"\203\306\307\310\211 $\304\311 \"\203!\306\307\310\211 $ \227*\207" [save-match-data-internal string match-data #[nil "\301\302\"\207" [save-match-data-internal set-match-data evaporate] 3] string-match "\\`[ ]+" replace-match "" t "[ ]+\\'"] 5 (#$ . 30131)]) #@102 Get the interface with NAME from INTERFACES. If INTERFACES is nil use `f90-all-interfaces' instead. (defalias 'f90-get-interface #[(name &optional interfaces) "\303 \206\n\"\207" [name interfaces f90-all-interfaces gethash] 3 (#$ . 30523)]) (byte-code "\300\301\302\303#\300\207" [function-put f90-get-interface gv-expander #[(do &rest args) "\302\303\304 $\207" [do args gv--defsetter f90-get-interface #[(val name &optional interfaces) "\303\304\305 \306BBE\nE\207" [name interfaces val setf gethash or (f90-all-interfaces)] 6]] 5]] 4) #@168 Return non-nil if FILE should be parsed. This checks that FILE exists and is readable, and then calls additional test functions from `f90-file-name-check-functions'. (defalias 'f90-parse-file-p #[(file) "\304!\2051\305!\2051\30621 \307\n:\203.\n@\211!\204'\310\306\307\"\210\nA\211\202*\3110\207" [file f90-file-name-check-functions #1=#:--cl-var-- test file-exists-p file-readable-p --cl-block-nil-- nil throw t] 4 (#$ . 31074)]) #@61 Return nil if FILE is that of a Fluidity refcount template. (defalias 'f90-check-fluidity-refcount #[(file) "\302!\303\304 \"?\205 \305\230?\205 \306\230?)\207" [file fname file-name-nondirectory string-match "\\`Reference_count_interface" "Refcount_interface_templates.F90" "Refcount_templates.F90"] 3 (#$ . 31526)]) #@217 Maybe insert extra files corresponding to FILE when parsing. To actually insert extra files, customize the variable `f90-extra-file-functions'. For an example insertion function see `f90-insert-fluidity-refcount'. (defalias 'f90-maybe-insert-extra-files #[(file) "\305!\n\306 :\203 @\211 \"\210 A\211\202 +\306\207" [file fname f90-extra-file-functions #1=#:--cl-var-- fn file-name-nondirectory nil] 4 (#$ . 31857)]) #@165 Insert a Fluidity reference count template for FILE. If FNAME matches \\`Reference_count_.*\\.F90 then this file needs a reference count interface, so insert one. (defalias 'f90-insert-fluidity-refcount #[(file fname) "\302\303\"\205\304\305\306\307\310\311\"\"\312 !\"!\207" [fname file string-match "\\`Reference_count_\\([^\\.]+\\)\\.F90" insert-file-contents-literally expand-file-name format "Reference_count_interface_%s.F90" match-string 1 file-name-directory] 7 (#$ . 32293)]) #@66 Parse interfaces in FILE and merge into EXISTING interface data. (defalias 'f90-parse-interfaces #[(file existing) "\306\307!rq\210\310\216\311\312\313\"\314\n!\205\272\315\n!\210\316\n!\210\317 \210\320 \210eb\210\321\322\323\324#\203\201\325\326\327!!\323 \330\230\204}\331\332 \323\211$\214`\321\333\334 \"\323\324#}\210\335\f!\210)\336 \"\203c\337\f \"\210\202}  + ,+\206r-.\340,\f.#\210,*\202&eb\210\212\321\341\323\324#\203\253\342\224/\321\343\323\324#\204\235\344\345!\210\214/\342\224}\210\346 \210*\202\205)\347 !\210\350\351 \"\210\352 0\",\207" [#1=#:temp-buffer interfaces file name interface #2=#:v generate-new-buffer " *temp*" #[nil "\301!\205 \302!\207" [#1# buffer-name kill-buffer] 2] make-hash-table :test equal f90-parse-file-p insert-file-contents-literally f90-maybe-insert-extra-files f90-clean-comments f90-clean-continuation-lines re-search-forward "^[ ]*interface[ ]+\\([^ \n]+\\)[ ]*$" nil t f90-normalise-string match-string 1 "" record f90-interface format "[ ]*end interface\\(?:[ ]+%s\\)?[ ]*$" f90-populate-specialisers f90-get-interface f90-merge-interface puthash "^[ ]*type[ ]+\\(?:[^ \n]+\\)[ ]*$" 0 "^[ ]*end[ ]+type.*$" error "Unable to find end of type definition" f90-parse-type-definition f90-set-public-attribute maphash #[(#3=#:--cl-var-- interface) "\302! >\204\303\304\305D\"\210\306H\205*\307\310\302! >\204&\303\304\305D\"\210\306H\"\207" [interface cl-struct-f90-interface-tags type-of signal wrong-type-argument f90-interface 3 maphash #[(specialiser val) "\212eb\210\306!\307\n! >\204\310\311\312\nD\"\210\n\211\313 A@I\210)\307\n! >\2040\310\311\312\nD\"\210\n\211\314 AA@DI\210)\307\n! >\204M\310\311\312\nD\"\210\n\211\315 @I+\207" [specialiser thing val cl-struct-f90-specialiser-tags #4=#:v #5=#:v f90-argument-list type-of signal wrong-type-argument f90-specialiser 3 4 2 file #6=#:v] 5]] 6] f90-merge-interfaces #7=#:v #8=#:v f90-all-interfaces #9=#:v beg existing] 5 (#$ . 32789)]) #@54 Merge INTERFACE into the existing set of INTERFACES. (defalias 'f90-merge-interface #[(interface interfaces) "\304! >\204\305\306\307D\"\210\310H\311\304! >\204$\305\306\307D\"\210\312H\205A\313\314\304! >\204;\305\306\307D\"\210\312H\"\210\311*\207" [interface cl-struct-f90-interface-tags spec-name name type-of signal wrong-type-argument f90-interface 1 nil 3 maphash #[(#1=#:--cl-var-- val) "\306! >\204\307\310\311D\"\210\312H\211\f \313\f \"\306!>\2041\307\310\314D\"\210\315H+\316 #*\207" [val cl-struct-f90-specialiser-tags spec-name #2=#:v name interfaces type-of signal wrong-type-argument f90-specialiser 1 f90-get-interface f90-interface 3 puthash cl-x cl-struct-f90-interface-tags #3=#:v] 5]] 6 (#$ . 34802)]) #@42 Merge NEW interfaces into EXISTING ones. (defalias 'f90-merge-interfaces #[(new existing) "\301\302\"\207" [new maphash #[(name val) "\305 \"\203\f\306\n \"\207 \307 \n\f#*\207" [name existing val #1=#:v #2=#:v gethash f90-merge-interface puthash] 4]] 3 (#$ . 35572)]) #@38 Find all specialisers for INTERFACE. (defalias 'f90-populate-specialisers #[(interface) "\212eb\210\304! >\204\305\306\307D\"\210\211\310\311\312\313\"I\210)\314\315\316\317#\2059\320`\321 \"\322\323\324 \325\317#\"\210)\202)\207" [interface cl-struct-f90-interface-tags #1=#:v names type-of signal wrong-type-argument f90-interface 3 make-hash-table :test equal search-forward "module procedure" nil t buffer-substring-no-properties line-end-position mapc #[(x) "\305!\211\306\n! >\204\307\310\311\nD\"\210\n\312H\313 \314\315\316\211\317%\f#*\207" [x #2=#:v interface cl-struct-f90-interface-tags #3=#:v f90-normalise-string type-of signal wrong-type-argument f90-interface 3 puthash record f90-specialiser "" nil] 9] split-string "[, \n]+"] 7 (#$ . 35853)]) #@44 Set public/private flag on all INTERFACES. (defalias 'f90-set-public-attribute #[(interfaces) "\212\212\303\304\305\306#)?\303\307\310\203\311\202\312\"\305\306#\2056\313\314\225\315 \"\316\317\n\"\210\320\321\322 \323\306#\"\210)\202\n*\207" [public names interfaces re-search-forward "^[ ]*private[ ]*$" nil t format "^[ ]*%s[ ]+" "private" "public" buffer-substring-no-properties 0 line-end-position maphash #[(k v) "\210\305 !\n>\204\306\307\310 D\"\210 \211\311\fI)\207" [k v cl-struct-f90-interface-tags #1=#:v public type-of signal wrong-type-argument f90-interface 2] 5] mapc #[(name) "\306 \"\211\205 \307\n! >\204\310\311\312\nD\"\210\n\211\313 ?I))\207" [name interfaces interface cl-struct-f90-interface-tags #2=#:v public f90-get-interface type-of signal wrong-type-argument f90-interface 2] 5] split-string "[, ]"] 6 (#$ . 36637)]) #@60 Return typed argument list of function or subroutine NAME. (defalias 'f90-argument-list #[(name) "\212\304\305\306\"\307\310#\205\"\311\224\312\313!\314\315`\316 \"!\n\317 ! E+)\207" [name point type args re-search-forward format "\\(function\\|subroutine\\)[ ]+%s[ ]*(" nil t 0 match-string 1 f90-split-arglist buffer-substring-no-properties f90-end-of-arglist f90-arg-types] 4 (#$ . 37513)]) #@54 Parse a type definition at (or in front of) `point'. (defalias 'f90-parse-type-definition #[nil "\306\211\211\211eb\210\307\310\306\311#\204\312\313!\210\314\315\316\317\320!!\"m\2045\321 \211\203/ \n\244\320y\210\202 \322\323 \n\"!\210\324\314\325 \"!\211\204L\312\326 \"\210  \327\f #.\207" [fn slot slots type #1=#:v f90-types nil re-search-forward "^[ ]*type[ ]+\\(.+?\\)[ ]*$" t error "Trying parse a type but no type found" format "type(%s)" f90-normalise-string match-string 1 f90-parse-single-type-declaration eval f90-make-type-struct intern-soft "make-f90-type.%s" "Something bad went wrong parsing type definition %s" puthash #2=#:v] 6 (#$ . 37920)]) #@45 Create a struct describing TYPE with SLOTS. (defalias 'f90-make-type-struct #[(type slots) "\306\307\310\"!\311\312\313 \"!\314 \315\306\307\316\"!DD\317\320\nD\321BB \322\211\322\f:\203U\f@\211\211A\242\306!\323\320D\320 DE\324BBB\fA\211\202+\237.BBB\207" [type slots varnames struct-name #1=#:--cl-var-- rest make-symbol format "f90-type.%s" reverse mapcar #[(x) "@\301\302\"\203\303\304\"\207\207" [x string-match "\\([^(]+\\)(" match-string 1] 3] defstruct :conc-name "f90-type.%s." -varnames quote (:read-only t) nil cons (:read-only t) name #2=#:--cl-var--] 9 (#$ . 38612)]) #@63 Return the types of the arguments to the function at `point'. (defalias 'f90-arglist-types #[nil "\212\212\306 \210`)\212\307 \210`)\310 \"`\311\312\313!r q\210\314\216\315 p\316\216\317!\210\nc\210 Zb\210\320 \321 \210 b\210\322\323!\210\324`\325 {!eb\210\326\f!.\f\207" [e b str p names #1=#:temp-buffer f90-end-of-subprogram f90-beginning-of-subprogram buffer-substring-no-properties nil generate-new-buffer " *temp*" #[nil "\301!\205 \302!\207" [#1# buffer-name kill-buffer] 2] syntax-table #[nil "rq\210\302 !)\207" [#2=#:buffer #3=#:table set-syntax-table] 2] set-syntax-table point-marker f90-clean-continuation-lines search-forward "(" f90-split-arglist f90-end-of-arglist f90-arg-types #2# #3# f90-mode-syntax-table] 3 (#$ . 39234)]) #@76 Pop up a buffer showing all variables in scope in the procedure at `point' (defalias 'f90-list-in-scope-vars #[nil "\212\306 \210`)\212\307 \210`)\310 \"\311\312\313!r\fq\210\314\216\315 p#\316\216\317$!\210\nc\210eb\210\320 \210\321 \210\322y\210\323\311%&&\203|m\204|\324\325!\203S\322y\210\324\326!\204v\3271c\330 0\202e\210\311\211%\203s% B\202v\311&\322y\210\202A.r\331\332!q\210\311'\333 \210\334 \210\335 \336\"\211(\311\211%)\311*(:\203\317(@\211*\211A*\242%*@)\337\340\341%!%\211%@)#c\210(A\211(\202\240,\342p!\210eb\210\323\211'-\207" [e b str types #1=#:temp-buffer #2=#:buffer f90-end-of-subprogram f90-beginning-of-subprogram buffer-substring-no-properties nil generate-new-buffer " *temp*" #[nil "\301!\205 \302!\207" [#1# buffer-name kill-buffer] 2] syntax-table #[nil "rq\210\302 !)\207" [#2# #3=#:table set-syntax-table] 2] set-syntax-table f90-clean-comments f90-clean-continuation-lines 1 t looking-at "\\s-*implicit\\s-+none" "^\\s-*$" (error) f90-parse-single-type-declaration get-buffer-create "*Variables in scope*" erase-buffer f90-mode sort #[(x y) "@A@ @A@\231\207" [x y] 2] format "%s :: %s\n" f90-format-parsed-slot-type pop-to-buffer #3# f90-mode-syntax-table type not-done buffer-read-only #4=#:--cl-var-- name #5=#:--cl-var--] 5 (#$ . 40003) nil]) #@178 Given NAMES of arguments return their types. This works even with derived type subtypes (e.g. if A is a type(foo) with slot B of type REAL, then A%B is returned being a REAL). (defalias 'f90-arg-types #[(names) "\306\211\306 :\203N @\306\307\n!\310\311\n\"\203'\312\313\n\"\312\314\n\"\212\214\315\316\317\n\"\306\320#\205C\321\224b\210\322\n\323 \"\324 \")*\fB A\211\202 \f\237,\207" [names #1=#:--cl-var-- arg subspec #2=#:--cl-var-- type nil f90-normalise-string string-match "\\`\\([^%]+?\\)[ ]*%\\(.+\\)\\'" match-string 2 1 re-search-forward format "^[ ]*\\([^!\n].+?\\)[ ]*::.*\\<%s\\>" t 0 assoc f90-parse-single-type-declaration f90-get-type-subtype] 5 (#$ . 41341)]) #@72 Return the type of TYPE possibly including slot references in SUBSPEC. (defalias 'f90-get-type-subtype #[(type subspec) "\204 \207\305\306\"\203;\307\310\311\" \312\313\314 \211A@)\n#!\211\2054 \315 \211A@)\f\")!+\310\316\"\"\207 \312\313\314 \211A@)\n#!\211\205^ \315 \211A@)\f\")!+\207" [subspec type slot fn f90-types string-match "\\`\\([^%]+?\\)[ ]*%\\(.+\\)\\'" f90-get-type-subtype match-string 1 intern-soft format "f90-type.%s.%s" gethash 2] 6 (#$ . 42046)]) #@332 Split ARGLIST into words. Split based on top-level commas. For example (f90-split-arglist "foo, bar, baz(quux, zot)") => ("foo" "bar" "baz(quux, zot)"). If LEVEL is non-nil split on commas up to and including LEVEL. For example: (f90-split-arglist "foo, bar, baz(quux, zot)" 1) => ("foo" "bar" "baz(quux" "zot)"). (defalias 'f90-split-arglist #[(arglist &optional level) "\206\306 \307\310\211\306\211 G\310\311 T\211\nGW\203\217\n H\2035\306\2027 T\f\312=\203FT\202Q\f\313=\203QSX\203n\f\314=\203n\315  O!B TX\203\211 TU\203\211\315 \310O!B\310\202\237. \207" [level arglist #1=#:--cl-vec-- #2=#:--cl-idx-- c i 0 -1 nil t 40 41 44 f90-normalise-string cur-level b len #3=#:--cl-var-- #4=#:--cl-var--] 5 (#$ . 42546)]) #@41 Find the end of the arglist at `point'. (defalias 'f90-end-of-arglist #[nil "\212\301\302V\203&\303f\304=\203T\202 \303f\305=\203 S\303u\210\202)`S)\207" [level 0 -1 nil 40 41] 2 (#$ . 43357)]) #@63 Return a list of NAMES from the RHS of a :: type declaration. (defalias 'f90-parse-names-list #[(names) "\305!\211\306\211\n:\2032\n@\307\310 \"\203%\311\312\313 \"!\fB\202+\311 !\fB\nA\211\202 \f\237,\207" [names names-list #1=#:--cl-var-- name #2=#:--cl-var-- f90-split-arglist nil string-match "\\`\\([^=]+\\)[ ]*=.*\\'" f90-normalise-string match-string 1] 5 (#$ . 43570)]) #@214 Parse a single f90 type declaration at `point'. Assumes that this has the form TYPENAME[, MODIFIERS]* :: NAME[, NAMES]* NAMES can optionally have initialisation attached to them which is dealt with correctly. (defalias 'f90-parse-single-type-declaration #[nil "\306\307!\205\236\310\311!\312\310\313!!\314\211\314\315\n:\203\232\n@\203.\316 !\2021\316 !\317\320 \"\203\213\321\322\f\"\203\\\321\322\f\"\310\313 \"\314\323\"GS*T\241\210\202\206\322\310\313 \"\314\323\"GS*TB\211\f\235\203~\f\210\202\205\324\fC\")\310\311 \" \fB B\nA\314\202 \237.\207" [names dec-orig #1=#:--cl-var-- name dec #2=#:--cl-var-- looking-at "^[ ]*\\(.*?\\)[ ]*::[ ]*\\(.*\\)$" match-string 1 f90-parse-names-list 2 nil t f90-split-declaration string-match "\\([^(]+\\)(\\([^)]+\\))" assoc "dimension" f90-split-arglist append #3=#:--cl-var-- level str #4=#:x] 5 (#$ . 43969)]) #@129 Split and parse a type declaration DEC. This takes the bit before the :: and returns a list of the typename and any modifiers. (defalias 'f90-split-declaration #[(dec) "\306!\307\310 @\"\203\311\312 @\"\202 @ A\313\211\n:\203P\n@\307\314 \"\203E\315\311\312 \"\313\306 \"GS*TB\fB\202I \fB\nA\211\202\f\237,B\207" [dec things #1=#:--cl-var-- thing #2=#:--cl-var-- level f90-split-arglist string-match "\\([^(]+?\\)[ ]*([ ]*\\(:?len\\|kind\\)[ ]*=[^)]+)" match-string 1 nil "dimension[ ]*(\\(.+\\))" "dimension" str] 6 (#$ . 44890)]) (provide 'f90-interface-browser)