Skip to content

Commit 142277c

Browse files
committed
Cxx: add "defvar" role to "unknown" kind
struct opt file_ops { .read = file_read, .write = file_write, }; The parser with this change extracts "opt" with "defvar" role of "unknown" kind. Signed-off-by: Masatake YAMATO <[email protected]>
1 parent b2556c2 commit 142277c

File tree

13 files changed

+75
-15
lines changed

13 files changed

+75
-15
lines changed

Tmain/list-kinds-full.d/stdout-expected.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#LETTER NAME ENABLED REFONLY NROLES MASTER DESCRIPTION
22
D macroparam no no 0 C parameters inside macro definitions
33
L label no no 0 C goto labels
4-
Y unknown no yes 2 C unknown identifier
4+
Y unknown no yes 3 C unknown identifier
55
d macro yes no 2 C macro definitions
66
e enumerator yes no 0 C enumerators (values inside an enumeration)
77
f function yes no 0 C function definitions
@@ -22,7 +22,7 @@ D macroparam no no 0 C parameters inside macro definitions
2222
L label no no 0 C goto labels
2323
N name no no 0 NONE names imported via using scope::symbol
2424
U using no no 0 NONE using namespace statements
25-
Y unknown no yes 2 C unknown identifier
25+
Y unknown no yes 3 C unknown identifier
2626
Z tparam no no 0 NONE template parameters
2727
c class yes no 0 NONE classes
2828
d macro yes no 2 C macro definitions

Tmain/list-roles.d/stdout-expected.txt

+31
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ Automake d/directory program on directory for PROGRA
1818
Automake d/directory script on directory for SCRIPTS primary
1919
Basic f/function decl on declared
2020
Bats S/script loaded on script loaed with "load" command
21+
C Y/unknown defvar on (maybe type) used for defining variables
2122
C Y/unknown ref off referenced anyhow
2223
C Y/unknown value on used as right side value
2324
C d/macro condition off used in part of #if/#ifdef/#elif conditions
2425
C d/macro undef on undefined
2526
C h/header local on local header
2627
C h/header system on system header
2728
C m/member initialized on initialized with form '.member = ...'
29+
C++ Y/unknown defvar on (maybe type) used for defining variables
2830
C++ Y/unknown ref off referenced anyhow
2931
C++ Y/unknown value on used as right side value
3032
C++ d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -36,6 +38,7 @@ CPreProcessor d/macro condition off used in part of #if/
3638
CPreProcessor d/macro undef on undefined
3739
CPreProcessor h/header local on local header
3840
CPreProcessor h/header system on system header
41+
CUDA Y/unknown defvar on (maybe type) used for defining variables
3942
CUDA Y/unknown ref off referenced anyhow
4043
CUDA Y/unknown value on used as right side value
4144
CUDA d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -146,13 +149,15 @@ Automake d/directory program on directory for PROGRA
146149
Automake d/directory script on directory for SCRIPTS primary
147150
Basic f/function decl on declared
148151
Bats S/script loaded on script loaed with "load" command
152+
C Y/unknown defvar on (maybe type) used for defining variables
149153
C Y/unknown ref off referenced anyhow
150154
C Y/unknown value on used as right side value
151155
C d/macro condition off used in part of #if/#ifdef/#elif conditions
152156
C d/macro undef on undefined
153157
C h/header local on local header
154158
C h/header system on system header
155159
C m/member initialized on initialized with form '.member = ...'
160+
C++ Y/unknown defvar on (maybe type) used for defining variables
156161
C++ Y/unknown ref off referenced anyhow
157162
C++ Y/unknown value on used as right side value
158163
C++ d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -164,6 +169,7 @@ CPreProcessor d/macro condition off used in part of #if/
164169
CPreProcessor d/macro undef on undefined
165170
CPreProcessor h/header local on local header
166171
CPreProcessor h/header system on system header
172+
CUDA Y/unknown defvar on (maybe type) used for defining variables
167173
CUDA Y/unknown ref off referenced anyhow
168174
CUDA Y/unknown value on used as right side value
169175
CUDA d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -259,6 +265,7 @@ Zsh s/script loaded on loaded
259265
# C.*
260266
#
261267
#KIND(L/N) NAME ENABLED DESCRIPTION
268+
Y/unknown defvar on (maybe type) used for defining variables
262269
Y/unknown ref off referenced anyhow
263270
Y/unknown value on used as right side value
264271
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -299,6 +306,7 @@ s/script loaded on loaded
299306
# C.* with disabling all roles of all languages
300307
#
301308
#KIND(L/N) NAME ENABLED DESCRIPTION
309+
Y/unknown defvar off (maybe type) used for defining variables
302310
Y/unknown ref off referenced anyhow
303311
Y/unknown value off used as right side value
304312
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -311,6 +319,7 @@ m/member initialized off initialized with form '.member = ...'
311319
# C.* with disabling all roles of all kinds of all languages
312320
#
313321
#KIND(L/N) NAME ENABLED DESCRIPTION
322+
Y/unknown defvar off (maybe type) used for defining variables
314323
Y/unknown ref off referenced anyhow
315324
Y/unknown value off used as right side value
316325
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -324,6 +333,7 @@ m/member initialized off initialized with form '.member = ...'
324333
# after disabling system role of header kind of C language
325334
#
326335
#KIND(L/N) NAME ENABLED DESCRIPTION
336+
Y/unknown defvar on (maybe type) used for defining variables
327337
Y/unknown ref on referenced anyhow
328338
Y/unknown value on used as right side value
329339
d/macro condition on used in part of #if/#ifdef/#elif conditions
@@ -337,6 +347,7 @@ m/member initialized on initialized with form '.member = ...'
337347
# after disabling system role of header kind of C language
338348
#
339349
#KIND(L/N) NAME ENABLED DESCRIPTION
350+
Y/unknown defvar on (maybe type) used for defining variables
340351
Y/unknown ref on referenced anyhow
341352
Y/unknown value on used as right side value
342353
d/macro condition on used in part of #if/#ifdef/#elif conditions
@@ -349,6 +360,7 @@ m/member initialized on initialized with form '.member = ...'
349360
# C.* with disabling all roles in C language
350361
#
351362
#KIND(L/N) NAME ENABLED DESCRIPTION
363+
Y/unknown defvar off (maybe type) used for defining variables
352364
Y/unknown ref off referenced anyhow
353365
Y/unknown value off used as right side value
354366
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -368,6 +380,7 @@ s/script loaded on loaded
368380
# C.* with disabling all roles of all kinds in C language
369381
#
370382
#KIND(L/N) NAME ENABLED DESCRIPTION
383+
Y/unknown defvar off (maybe type) used for defining variables
371384
Y/unknown ref off referenced anyhow
372385
Y/unknown value off used as right side value
373386
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -388,6 +401,7 @@ s/script loaded on loaded
388401
# after disabling all roles in all languages
389402
#
390403
#KIND(L/N) NAME ENABLED DESCRIPTION
404+
Y/unknown defvar on (maybe type) used for defining variables
391405
Y/unknown ref on referenced anyhow
392406
Y/unknown value on used as right side value
393407
d/macro condition on used in part of #if/#ifdef/#elif conditions
@@ -409,6 +423,7 @@ s/script loaded off loaded
409423
# after disabling all roles in all languages
410424
#
411425
#KIND(L/N) NAME ENABLED DESCRIPTION
426+
Y/unknown defvar on (maybe type) used for defining variables
412427
Y/unknown ref on referenced anyhow
413428
Y/unknown value on used as right side value
414429
d/macro condition on used in part of #if/#ifdef/#elif conditions
@@ -429,6 +444,7 @@ s/script loaded off loaded
429444
# C.* with disabling all roles of {header} kind in C language
430445
#
431446
#KIND(L/N) NAME ENABLED DESCRIPTION
447+
Y/unknown defvar on (maybe type) used for defining variables
432448
Y/unknown ref off referenced anyhow
433449
Y/unknown value on used as right side value
434450
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -448,6 +464,7 @@ s/script loaded on loaded
448464
# C.* with disabling all roles of h kind in C language
449465
#
450466
#KIND(L/N) NAME ENABLED DESCRIPTION
467+
Y/unknown defvar on (maybe type) used for defining variables
451468
Y/unknown ref off referenced anyhow
452469
Y/unknown value on used as right side value
453470
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -468,6 +485,7 @@ s/script loaded on loaded
468485
# after disabling all roles in all languages
469486
#
470487
#KIND(L/N) NAME ENABLED DESCRIPTION
488+
Y/unknown defvar off (maybe type) used for defining variables
471489
Y/unknown ref off referenced anyhow
472490
Y/unknown value off used as right side value
473491
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -489,6 +507,7 @@ s/script loaded off loaded
489507
# after disabling all roles in all languages
490508
#
491509
#KIND(L/N) NAME ENABLED DESCRIPTION
510+
Y/unknown defvar off (maybe type) used for defining variables
492511
Y/unknown ref off referenced anyhow
493512
Y/unknown value off used as right side value
494513
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -509,6 +528,7 @@ s/script loaded off loaded
509528
# C.* with disabling system role of h kind
510529
#
511530
#KIND(L/N) NAME ENABLED DESCRIPTION
531+
Y/unknown defvar on (maybe type) used for defining variables
512532
Y/unknown ref off referenced anyhow
513533
Y/unknown value on used as right side value
514534
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -521,6 +541,7 @@ m/member initialized on initialized with form '.member = ...'
521541
# C.* with disabling system role of {header} kind
522542
#
523543
#KIND(L/N) NAME ENABLED DESCRIPTION
544+
Y/unknown defvar on (maybe type) used for defining variables
524545
Y/unknown ref off referenced anyhow
525546
Y/unknown value on used as right side value
526547
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -533,6 +554,7 @@ m/member initialized on initialized with form '.member = ...'
533554
# C.* with enabling system role of h kind after disabling the role
534555
#
535556
#KIND(L/N) NAME ENABLED DESCRIPTION
557+
Y/unknown defvar on (maybe type) used for defining variables
536558
Y/unknown ref off referenced anyhow
537559
Y/unknown value on used as right side value
538560
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -545,6 +567,7 @@ m/member initialized on initialized with form '.member = ...'
545567
# C.* with enabling system role of {header} kind after disabling the role
546568
#
547569
#KIND(L/N) NAME ENABLED DESCRIPTION
570+
Y/unknown defvar on (maybe type) used for defining variables
548571
Y/unknown ref off referenced anyhow
549572
Y/unknown value on used as right side value
550573
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -557,6 +580,7 @@ m/member initialized on initialized with form '.member = ...'
557580
# C.* with disabling system and local roles of h kind
558581
#
559582
#KIND(L/N) NAME ENABLED DESCRIPTION
583+
Y/unknown defvar on (maybe type) used for defining variables
560584
Y/unknown ref off referenced anyhow
561585
Y/unknown value on used as right side value
562586
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -569,6 +593,7 @@ m/member initialized on initialized with form '.member = ...'
569593
# C.* with disabling system and local roles of {header} kind
570594
#
571595
#KIND(L/N) NAME ENABLED DESCRIPTION
596+
Y/unknown defvar on (maybe type) used for defining variables
572597
Y/unknown ref off referenced anyhow
573598
Y/unknown value on used as right side value
574599
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -582,6 +607,7 @@ m/member initialized on initialized with form '.member = ...'
582607
# after disabling all roles in all languages
583608
#
584609
#KIND(L/N) NAME ENABLED DESCRIPTION
610+
Y/unknown defvar off (maybe type) used for defining variables
585611
Y/unknown ref off referenced anyhow
586612
Y/unknown value off used as right side value
587613
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -595,6 +621,7 @@ m/member initialized off initialized with form '.member = ...'
595621
# after disabling all roles in all languages
596622
#
597623
#KIND(L/N) NAME ENABLED DESCRIPTION
624+
Y/unknown defvar off (maybe type) used for defining variables
598625
Y/unknown ref off referenced anyhow
599626
Y/unknown value off used as right side value
600627
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -607,6 +634,7 @@ m/member initialized off initialized with form '.member = ...'
607634
# C.* with disabling local role of h kind and undef role of d kind
608635
#
609636
#KIND(L/N) NAME ENABLED DESCRIPTION
637+
Y/unknown defvar on (maybe type) used for defining variables
610638
Y/unknown ref off referenced anyhow
611639
Y/unknown value on used as right side value
612640
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -619,6 +647,7 @@ m/member initialized on initialized with form '.member = ...'
619647
# C.* with enabling all roles of header kinds after disabling all roles of the kind
620648
#
621649
#KIND(L/N) NAME ENABLED DESCRIPTION
650+
Y/unknown defvar on (maybe type) used for defining variables
622651
Y/unknown ref off referenced anyhow
623652
Y/unknown value on used as right side value
624653
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -631,6 +660,7 @@ m/member initialized on initialized with form '.member = ...'
631660
# C.* with enabling all roles of header kinds after disabling all roles of the kinds of C language
632661
#
633662
#KIND(L/N) NAME ENABLED DESCRIPTION
663+
Y/unknown defvar off (maybe type) used for defining variables
634664
Y/unknown ref off referenced anyhow
635665
Y/unknown value off used as right side value
636666
d/macro condition off used in part of #if/#ifdef/#elif conditions
@@ -643,6 +673,7 @@ m/member initialized off initialized with form '.member = ...'
643673
# C.* with enabling all roles of header kinds after disabling all roles of the kinds of C language (short notation)
644674
#
645675
#KIND(L/N) NAME ENABLED DESCRIPTION
676+
Y/unknown defvar off (maybe type) used for defining variables
646677
Y/unknown ref off referenced anyhow
647678
Y/unknown value off used as right side value
648679
d/macro condition off used in part of #if/#ifdef/#elif conditions

Tmain/nested-subparsers.d/stdout-expected.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ n name
3737
#LETTER NAME ENABLED REFONLY NROLES MASTER DESCRIPTION
3838
D macroparam no no 0 C parameters inside macro definitions
3939
L label no no 0 C goto labels
40-
Y unknown no yes 2 C unknown identifier
40+
Y unknown no yes 3 C unknown identifier
4141
d macro yes no 2 C macro definitions
4242
e enumerator yes no 0 C enumerators (values inside an enumeration)
4343
f function yes no 0 C function definitions

Units/parser-c.r/c-reftag-member.d/args.ctags

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
--fields=+rKZ
44
--kinds-C=*
55
--roles-C.{member}=*
6-
--roles-C.{unknown}=+{value}
6+
--roles-C.{unknown}=+{value}{defvar}

Units/parser-c.r/c-reftag-member.d/expected.tags

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
ops input.c /^static struct ops file_ops = {$/;" unknown roles:defvar
12
file_ops input.c /^static struct ops file_ops = {$/;" variable typeref:struct:ops file: roles:def
23
read input.c /^ .read = file_read_fn,$/;" member scope:variable:file_ops roles:initialized
34
file_read_fn input.c /^ .read = file_read_fn,$/;" unknown scope:variable:file_ops roles:value

parsers/cxx/cxx_parser.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ bool cxxParserParseEnum(void)
873873
if(pTypeEnd)
874874
{
875875
CXX_DEBUG_ASSERT(pTypeBegin,"Type begin should be also set here");
876-
pTypeName = cxxTagCheckAndSetTypeField(pTypeBegin,pTypeEnd);
876+
pTypeName = cxxTagCheckAndSetTypeField(pTypeBegin,pTypeEnd, false);
877877
}
878878

879879
if(bIsScopedEnum)

parsers/cxx/cxx_parser_function.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -1654,7 +1654,7 @@ int cxxParserEmitFunctionTags(
16541654
CXXToken * pTokenBeforeParenthesis = pInfo->pParenthesis->pPrev;
16551655
cxxTokenChainTake(pInfo->pParenthesisContainerChain,pInfo->pParenthesis);
16561656

1657-
pTypeName = cxxTagCheckAndSetTypeField(pInfo->pTypeStart,pInfo->pTypeEnd);
1657+
pTypeName = cxxTagCheckAndSetTypeField(pInfo->pTypeStart,pInfo->pTypeEnd, false);
16581658

16591659
cxxTokenChainInsertAfter(
16601660
pInfo->pParenthesisContainerChain,
@@ -1665,7 +1665,7 @@ int cxxParserEmitFunctionTags(
16651665
pTypeName = NULL;
16661666
}
16671667
} else {
1668-
pTypeName = cxxTagCheckAndSetTypeField(pInfo->pTypeStart,pInfo->pTypeEnd);
1668+
pTypeName = cxxTagCheckAndSetTypeField(pInfo->pTypeStart,pInfo->pTypeEnd, false);
16691669
}
16701670
} else {
16711671
pTypeName = NULL;
@@ -1921,7 +1921,8 @@ void cxxParserEmitFunctionParameterTags(CXXTypedVariableSet * pInfo)
19211921

19221922
pTypeName = cxxTagCheckAndSetTypeField(
19231923
pTypeStart,
1924-
pTypeEnd
1924+
pTypeEnd,
1925+
false
19251926
);
19261927
} else {
19271928
// The declaration contains only the identifier!

parsers/cxx/cxx_parser_lambda.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ bool cxxParserHandleLambda(CXXToken * pParenthesis)
239239
markTagExtraBit (tag, XTAG_ANONYMOUS);
240240

241241
if(pTypeStart)
242-
pTypeName = cxxTagCheckAndSetTypeField(pTypeStart,pTypeEnd);
242+
pTypeName = cxxTagCheckAndSetTypeField(pTypeStart,pTypeEnd, false);
243243
else
244244
pTypeName = NULL;
245245

parsers/cxx/cxx_parser_template.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,8 @@ void cxxParserEmitTemplateParameterTags(void)
825825

826826
CXXToken * pTypeToken = cxxTagCheckAndSetTypeField(
827827
g_cxx.oTemplateParameters.aTypeStarts[i],
828-
g_cxx.oTemplateParameters.aTypeEnds[i]
828+
g_cxx.oTemplateParameters.aTypeEnds[i],
829+
false
829830
);
830831

831832
cxxTagCommit(NULL);

parsers/cxx/cxx_parser_typedef.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,8 @@ void cxxParserExtractTypedef(
433433

434434
pTypeName = cxxTagCheckAndSetTypeField(
435435
cxxTokenChainFirst(pChain),
436-
pComma ? pComma->pPrev : cxxTokenChainLast(pChain)
436+
pComma ? pComma->pPrev : cxxTokenChainLast(pChain),
437+
false
437438
);
438439
}
439440

parsers/cxx/cxx_parser_variable.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,7 @@ bool cxxParserExtractVariableDeclarations(CXXTokenChain * pChain,unsigned int uF
816816
}
817817

818818
// anything that remains is part of type
819-
CXXToken * pTypeToken = cxxTagCheckAndSetTypeField(cxxTokenChainFirst(pChain),t->pPrev);
819+
CXXToken * pTypeToken = cxxTagCheckAndSetTypeField(cxxTokenChainFirst(pChain),t->pPrev, true);
820820

821821
tag->isFileScope = bKnRStyleParameters ?
822822
true :

0 commit comments

Comments
 (0)