;; This is for a TYPE block, not a variable of derived TYPE.
;; Hence no need to add CLASS for F2003.
+;; Note that this also matches "type is", so you might need to use
+;; f90-typeis-re as well.
(defconst f90-type-def-re
- ;; type word
+ ;; type word (includes "type is")
;; type :: word
;; type, attr-list :: word
;; where attr-list = attr [, attr ...]
;; Avoid F2003 "type is" in "select type",
;; and also variables of derived type "type (foo)".
;; "type, foo" must be a block (?).
- "type[ \t,]\\("
+ "\\(?:type\\|class\\)[ \t,]\\("
"[^i(!\n\"& \t]\\|" ; not-i(
"i[^s!\n\"& \t]\\|" ; i not-s
"is\\(?:\\sw\\|\\s_\\)\\)\\|"
(not (or (looking-at "end")
(looking-at "\\(do\\|if\\|else\\(if\\|where\\)?\
\\|select[ \t]*\\(case\\|type\\)\\|case\\|where\\|forall\\|\
+\\(?:class\\|type\\)[ \t]*is\\|\
block\\|critical\\|enum\\|associate\\)\\_>")
(looking-at "\\(program\\|\\(?:sub\\)?module\\|\
\\(?:abstract[ \t]*\\)?interface\\|block[ \t]*data\\)\\_>")
(forward-line -2)
(should (= 5 (current-indentation)))))
+(ert-deftest f90-test-bug25039 ()
+ "Test for http://debbugs.gnu.org/25039 ."
+ (with-temp-buffer
+ (f90-mode)
+ (insert "program prog
+select type (a)
+class is (c1)
+x = 1
+type is (t1)
+x = 2
+end select
+end program prog")
+ (f90-indent-subprogram)
+ (forward-line -3)
+ (should (= 2 (current-indentation))) ; type is
+ (forward-line -2)
+ (should (= 2 (current-indentation))))) ; class is
+
;;; f90.el ends here