Fortran: add support for "len" and "kind" qualifiers
Test cases contributed by Adam Hirst, thanks.
This commit is contained in:
parent
ed1dc50062
commit
d8954bbf67
@ -100,6 +100,8 @@ typedef enum eKeywordId {
|
||||
KEYWORD_intent,
|
||||
KEYWORD_interface,
|
||||
KEYWORD_intrinsic,
|
||||
KEYWORD_kind,
|
||||
KEYWORD_len,
|
||||
KEYWORD_logical,
|
||||
KEYWORD_map,
|
||||
KEYWORD_module,
|
||||
@ -280,6 +282,8 @@ static const keywordDesc FortranKeywordTable [] = {
|
||||
{ "intent", KEYWORD_intent },
|
||||
{ "interface", KEYWORD_interface },
|
||||
{ "intrinsic", KEYWORD_intrinsic },
|
||||
{ "kind", KEYWORD_kind },
|
||||
{ "len", KEYWORD_len },
|
||||
{ "logical", KEYWORD_logical },
|
||||
{ "map", KEYWORD_map },
|
||||
{ "module", KEYWORD_module },
|
||||
@ -1331,6 +1335,8 @@ static void parseQualifierSpecList (tokenInfo *const token)
|
||||
case KEYWORD_allocatable:
|
||||
case KEYWORD_external:
|
||||
case KEYWORD_intrinsic:
|
||||
case KEYWORD_kind:
|
||||
case KEYWORD_len:
|
||||
case KEYWORD_optional:
|
||||
case KEYWORD_private:
|
||||
case KEYWORD_pointer:
|
||||
|
||||
@ -179,6 +179,7 @@ test_sources = \
|
||||
matlab_backtracking.m \
|
||||
matlab_test.m \
|
||||
maze.erl \
|
||||
members.f90 \
|
||||
misc_types.f90 \
|
||||
misc_types.f \
|
||||
mode.php \
|
||||
@ -202,6 +203,7 @@ test_sources = \
|
||||
prototype.h \
|
||||
pure_elem.f95 \
|
||||
py_constructor_arglist.py \
|
||||
qualified_types.f90 \
|
||||
random.sql \
|
||||
readlob.sql \
|
||||
readlong.sql \
|
||||
|
||||
19
tests/ctags/members.f90
Normal file
19
tests/ctags/members.f90
Normal file
@ -0,0 +1,19 @@
|
||||
module Members
|
||||
implicit none
|
||||
|
||||
type HasMembers
|
||||
! a "derived type" in Fortran is analagous to a "class" in other languages
|
||||
integer, kind :: kind_member
|
||||
integer, len :: len_member
|
||||
integer :: member
|
||||
contains
|
||||
procedure :: MyMethod
|
||||
end type HasMembers
|
||||
|
||||
contains
|
||||
|
||||
subroutine MySubroutine(arg)
|
||||
! ...
|
||||
end subroutine MySubroutine
|
||||
|
||||
end module Members
|
||||
8
tests/ctags/members.f90.tags
Normal file
8
tests/ctags/members.f90.tags
Normal file
@ -0,0 +1,8 @@
|
||||
# format=tagmanager
|
||||
HasMembersÌ1ÎMembersÖ0
|
||||
MembersÌ256Ö0
|
||||
MyMethodÌ64ÎHasMembersÖ0
|
||||
MySubroutineÌ128ÎMembersÖ0
|
||||
kind_memberÌ64ÎHasMembersÖ0
|
||||
len_memberÌ64ÎHasMembersÖ0
|
||||
memberÌ64ÎHasMembersÖ0
|
||||
12
tests/ctags/qualified_types.f90
Normal file
12
tests/ctags/qualified_types.f90
Normal file
@ -0,0 +1,12 @@
|
||||
module test
|
||||
implicit none
|
||||
type goodtype(p1, p2, p3, p4) ! the stuff in brackets after the name of the type shouldn't appear in the type's name
|
||||
! this is already correctly handled, so that's fine
|
||||
integer, kind :: p1, p3
|
||||
integer, len :: p2, p4 ! the question is whether or not these "kind" and "len"s should be shown as members
|
||||
real(kind=p1) :: c1
|
||||
character(len=p2) :: c2
|
||||
complex :: c3(p3)
|
||||
integer :: c4 = p1
|
||||
contains
|
||||
end module test
|
||||
11
tests/ctags/qualified_types.f90.tags
Normal file
11
tests/ctags/qualified_types.f90.tags
Normal file
@ -0,0 +1,11 @@
|
||||
# format=tagmanager
|
||||
c1フ64ホgoodtypeヨ0
|
||||
c2フ64ホgoodtypeヨ0
|
||||
c3フ64ホgoodtypeヨ0
|
||||
c4フ64ホgoodtypeヨ0
|
||||
goodtypeフ1ホtestヨ0
|
||||
p1フ64ホgoodtypeヨ0
|
||||
p2フ64ホgoodtypeヨ0
|
||||
p3フ64ホgoodtypeヨ0
|
||||
p4フ64ホgoodtypeヨ0
|
||||
testフ256ヨ0
|
||||
Loading…
x
Reference in New Issue
Block a user