Skip to content

Commit ddf135e

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

File tree

8 files changed

+77
-3
lines changed

8 files changed

+77
-3
lines changed

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

Lines changed: 2 additions & 2 deletions
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 1 C unknown identifier
4+
Y unknown no yes 2 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 1 C unknown identifier
25+
Y unknown no yes 2 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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ Automake d/directory script on directory for SCRIPT
1919
Basic f/function decl on declared
2020
Bats S/script loaded on script loaed with "load" command
2121
C Y/unknown ref off referenced anyhow
22+
C Y/unknown value on used as right side value
2223
C d/macro condition off used in part of #if/#ifdef/#elif conditions
2324
C d/macro undef on undefined
2425
C h/header local on local header
2526
C h/header system on system header
2627
C m/member initialized on initialized with form '.member = ...'
2728
C++ Y/unknown ref off referenced anyhow
29+
C++ Y/unknown value on used as right side value
2830
C++ d/macro condition off used in part of #if/#ifdef/#elif conditions
2931
C++ d/macro undef on undefined
3032
C++ h/header local on local header
@@ -35,6 +37,7 @@ CPreProcessor d/macro undef on undefined
3537
CPreProcessor h/header local on local header
3638
CPreProcessor h/header system on system header
3739
CUDA Y/unknown ref off referenced anyhow
40+
CUDA Y/unknown value on used as right side value
3841
CUDA d/macro condition off used in part of #if/#ifdef/#elif conditions
3942
CUDA d/macro undef on undefined
4043
CUDA h/header local on local header
@@ -144,12 +147,14 @@ Automake d/directory script on directory for SCRIPT
144147
Basic f/function decl on declared
145148
Bats S/script loaded on script loaed with "load" command
146149
C Y/unknown ref off referenced anyhow
150+
C Y/unknown value on used as right side value
147151
C d/macro condition off used in part of #if/#ifdef/#elif conditions
148152
C d/macro undef on undefined
149153
C h/header local on local header
150154
C h/header system on system header
151155
C m/member initialized on initialized with form '.member = ...'
152156
C++ Y/unknown ref off referenced anyhow
157+
C++ Y/unknown value on used as right side value
153158
C++ d/macro condition off used in part of #if/#ifdef/#elif conditions
154159
C++ d/macro undef on undefined
155160
C++ h/header local on local header
@@ -160,6 +165,7 @@ CPreProcessor d/macro undef on undefined
160165
CPreProcessor h/header local on local header
161166
CPreProcessor h/header system on system header
162167
CUDA Y/unknown ref off referenced anyhow
168+
CUDA Y/unknown value on used as right side value
163169
CUDA d/macro condition off used in part of #if/#ifdef/#elif conditions
164170
CUDA d/macro undef on undefined
165171
CUDA h/header local on local header
@@ -254,6 +260,7 @@ Zsh s/script loaded on loaded
254260
#
255261
#KIND(L/N) NAME ENABLED DESCRIPTION
256262
Y/unknown ref off referenced anyhow
263+
Y/unknown value on used as right side value
257264
d/macro condition off used in part of #if/#ifdef/#elif conditions
258265
d/macro undef on undefined
259266
h/header local on local header
@@ -293,6 +300,7 @@ s/script loaded on loaded
293300
#
294301
#KIND(L/N) NAME ENABLED DESCRIPTION
295302
Y/unknown ref off referenced anyhow
303+
Y/unknown value off used as right side value
296304
d/macro condition off used in part of #if/#ifdef/#elif conditions
297305
d/macro undef off undefined
298306
h/header local off local header
@@ -304,6 +312,7 @@ m/member initialized off initialized with form '.member = ...'
304312
#
305313
#KIND(L/N) NAME ENABLED DESCRIPTION
306314
Y/unknown ref off referenced anyhow
315+
Y/unknown value off used as right side value
307316
d/macro condition off used in part of #if/#ifdef/#elif conditions
308317
d/macro undef off undefined
309318
h/header local off local header
@@ -316,6 +325,7 @@ m/member initialized off initialized with form '.member = ...'
316325
#
317326
#KIND(L/N) NAME ENABLED DESCRIPTION
318327
Y/unknown ref on referenced anyhow
328+
Y/unknown value on used as right side value
319329
d/macro condition on used in part of #if/#ifdef/#elif conditions
320330
d/macro undef on undefined
321331
h/header local on local header
@@ -328,6 +338,7 @@ m/member initialized on initialized with form '.member = ...'
328338
#
329339
#KIND(L/N) NAME ENABLED DESCRIPTION
330340
Y/unknown ref on referenced anyhow
341+
Y/unknown value on used as right side value
331342
d/macro condition on used in part of #if/#ifdef/#elif conditions
332343
d/macro undef on undefined
333344
h/header local on local header
@@ -339,6 +350,7 @@ m/member initialized on initialized with form '.member = ...'
339350
#
340351
#KIND(L/N) NAME ENABLED DESCRIPTION
341352
Y/unknown ref off referenced anyhow
353+
Y/unknown value off used as right side value
342354
d/macro condition off used in part of #if/#ifdef/#elif conditions
343355
d/macro undef off undefined
344356
h/header local off local header
@@ -357,6 +369,7 @@ s/script loaded on loaded
357369
#
358370
#KIND(L/N) NAME ENABLED DESCRIPTION
359371
Y/unknown ref off referenced anyhow
372+
Y/unknown value off used as right side value
360373
d/macro condition off used in part of #if/#ifdef/#elif conditions
361374
d/macro undef off undefined
362375
h/header local off local header
@@ -376,6 +389,7 @@ s/script loaded on loaded
376389
#
377390
#KIND(L/N) NAME ENABLED DESCRIPTION
378391
Y/unknown ref on referenced anyhow
392+
Y/unknown value on used as right side value
379393
d/macro condition on used in part of #if/#ifdef/#elif conditions
380394
d/macro undef on undefined
381395
h/header local on local header
@@ -396,6 +410,7 @@ s/script loaded off loaded
396410
#
397411
#KIND(L/N) NAME ENABLED DESCRIPTION
398412
Y/unknown ref on referenced anyhow
413+
Y/unknown value on used as right side value
399414
d/macro condition on used in part of #if/#ifdef/#elif conditions
400415
d/macro undef on undefined
401416
h/header local on local header
@@ -415,6 +430,7 @@ s/script loaded off loaded
415430
#
416431
#KIND(L/N) NAME ENABLED DESCRIPTION
417432
Y/unknown ref off referenced anyhow
433+
Y/unknown value on used as right side value
418434
d/macro condition off used in part of #if/#ifdef/#elif conditions
419435
d/macro undef on undefined
420436
h/header local off local header
@@ -433,6 +449,7 @@ s/script loaded on loaded
433449
#
434450
#KIND(L/N) NAME ENABLED DESCRIPTION
435451
Y/unknown ref off referenced anyhow
452+
Y/unknown value on used as right side value
436453
d/macro condition off used in part of #if/#ifdef/#elif conditions
437454
d/macro undef on undefined
438455
h/header local off local header
@@ -452,6 +469,7 @@ s/script loaded on loaded
452469
#
453470
#KIND(L/N) NAME ENABLED DESCRIPTION
454471
Y/unknown ref off referenced anyhow
472+
Y/unknown value off used as right side value
455473
d/macro condition off used in part of #if/#ifdef/#elif conditions
456474
d/macro undef off undefined
457475
h/header local on local header
@@ -472,6 +490,7 @@ s/script loaded off loaded
472490
#
473491
#KIND(L/N) NAME ENABLED DESCRIPTION
474492
Y/unknown ref off referenced anyhow
493+
Y/unknown value off used as right side value
475494
d/macro condition off used in part of #if/#ifdef/#elif conditions
476495
d/macro undef off undefined
477496
h/header local on local header
@@ -491,6 +510,7 @@ s/script loaded off loaded
491510
#
492511
#KIND(L/N) NAME ENABLED DESCRIPTION
493512
Y/unknown ref off referenced anyhow
513+
Y/unknown value on used as right side value
494514
d/macro condition off used in part of #if/#ifdef/#elif conditions
495515
d/macro undef on undefined
496516
h/header local on local header
@@ -502,6 +522,7 @@ m/member initialized on initialized with form '.member = ...'
502522
#
503523
#KIND(L/N) NAME ENABLED DESCRIPTION
504524
Y/unknown ref off referenced anyhow
525+
Y/unknown value on used as right side value
505526
d/macro condition off used in part of #if/#ifdef/#elif conditions
506527
d/macro undef on undefined
507528
h/header local on local header
@@ -513,6 +534,7 @@ m/member initialized on initialized with form '.member = ...'
513534
#
514535
#KIND(L/N) NAME ENABLED DESCRIPTION
515536
Y/unknown ref off referenced anyhow
537+
Y/unknown value on used as right side value
516538
d/macro condition off used in part of #if/#ifdef/#elif conditions
517539
d/macro undef on undefined
518540
h/header local on local header
@@ -524,6 +546,7 @@ m/member initialized on initialized with form '.member = ...'
524546
#
525547
#KIND(L/N) NAME ENABLED DESCRIPTION
526548
Y/unknown ref off referenced anyhow
549+
Y/unknown value on used as right side value
527550
d/macro condition off used in part of #if/#ifdef/#elif conditions
528551
d/macro undef on undefined
529552
h/header local on local header
@@ -535,6 +558,7 @@ m/member initialized on initialized with form '.member = ...'
535558
#
536559
#KIND(L/N) NAME ENABLED DESCRIPTION
537560
Y/unknown ref off referenced anyhow
561+
Y/unknown value on used as right side value
538562
d/macro condition off used in part of #if/#ifdef/#elif conditions
539563
d/macro undef on undefined
540564
h/header local off local header
@@ -546,6 +570,7 @@ m/member initialized on initialized with form '.member = ...'
546570
#
547571
#KIND(L/N) NAME ENABLED DESCRIPTION
548572
Y/unknown ref off referenced anyhow
573+
Y/unknown value on used as right side value
549574
d/macro condition off used in part of #if/#ifdef/#elif conditions
550575
d/macro undef on undefined
551576
h/header local off local header
@@ -558,6 +583,7 @@ m/member initialized on initialized with form '.member = ...'
558583
#
559584
#KIND(L/N) NAME ENABLED DESCRIPTION
560585
Y/unknown ref off referenced anyhow
586+
Y/unknown value off used as right side value
561587
d/macro condition off used in part of #if/#ifdef/#elif conditions
562588
d/macro undef off undefined
563589
h/header local on local header
@@ -570,6 +596,7 @@ m/member initialized off initialized with form '.member = ...'
570596
#
571597
#KIND(L/N) NAME ENABLED DESCRIPTION
572598
Y/unknown ref off referenced anyhow
599+
Y/unknown value off used as right side value
573600
d/macro condition off used in part of #if/#ifdef/#elif conditions
574601
d/macro undef off undefined
575602
h/header local on local header
@@ -581,6 +608,7 @@ m/member initialized off initialized with form '.member = ...'
581608
#
582609
#KIND(L/N) NAME ENABLED DESCRIPTION
583610
Y/unknown ref off referenced anyhow
611+
Y/unknown value on used as right side value
584612
d/macro condition off used in part of #if/#ifdef/#elif conditions
585613
d/macro undef off undefined
586614
h/header local off local header
@@ -592,6 +620,7 @@ m/member initialized on initialized with form '.member = ...'
592620
#
593621
#KIND(L/N) NAME ENABLED DESCRIPTION
594622
Y/unknown ref off referenced anyhow
623+
Y/unknown value on used as right side value
595624
d/macro condition off used in part of #if/#ifdef/#elif conditions
596625
d/macro undef on undefined
597626
h/header local on local header
@@ -603,6 +632,7 @@ m/member initialized on initialized with form '.member = ...'
603632
#
604633
#KIND(L/N) NAME ENABLED DESCRIPTION
605634
Y/unknown ref off referenced anyhow
635+
Y/unknown value off used as right side value
606636
d/macro condition off used in part of #if/#ifdef/#elif conditions
607637
d/macro undef off undefined
608638
h/header local on local header
@@ -614,6 +644,7 @@ m/member initialized off initialized with form '.member = ...'
614644
#
615645
#KIND(L/N) NAME ENABLED DESCRIPTION
616646
Y/unknown ref off referenced anyhow
647+
Y/unknown value off used as right side value
617648
d/macro condition off used in part of #if/#ifdef/#elif conditions
618649
d/macro undef off undefined
619650
h/header local on local header

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

Lines changed: 1 addition & 1 deletion
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 1 C unknown identifier
40+
Y unknown no yes 2 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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
--fields=+rKZ
44
--kinds-C=*
55
--roles-C.{member}=*
6+
--roles-C.{unknown}=+{value}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
file_ops input.c /^static struct ops file_ops = {$/;" variable typeref:struct:ops file: roles:def
22
read input.c /^ .read = file_read_fn,$/;" member scope:variable:file_ops roles:initialized
3+
file_read_fn input.c /^ .read = file_read_fn,$/;" unknown scope:variable:file_ops roles:value
34
write input.c /^ .write = file_write_fn,$/;" member scope:variable:file_ops roles:initialized
5+
file_write_fn input.c /^ .write = file_write_fn,$/;" unknown scope:variable:file_ops roles:value

parsers/cxx/cxx_parser_variable.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,44 @@ static void cxxParserExtractMembersInitialization(CXXTokenChain * pChain, int iS
118118
}
119119
// Point t to the assignment.
120120
t = t->pNext->pNext->pNext;
121+
122+
// Looking for the pattern:
123+
//
124+
// = unknown,
125+
//
126+
// or
127+
//
128+
// = unknown}
129+
//
130+
if(t->pNext &&
131+
cxxTokenTypeIs(t->pNext, CXXTokenTypeIdentifier) &&
132+
t->pNext->pNext &&
133+
cxxTokenTypeIsOneOf(t->pNext->pNext,
134+
CXXTokenTypeComma|CXXTokenTypeClosingBracket))
135+
136+
{
137+
CXXToken *pIdentifier = t->pNext;
138+
if(pIdentifier->iCorkIndex != CORK_NIL && pIdentifier->bCorkIndexForReftag)
139+
{
140+
cxxTagResetRefTag(pIdentifier->iCorkIndex, iScopeCorkIndex,
141+
CXXTagKindUNKNOWN, CXXTagUnknownRoleVALUE);
142+
}
143+
else if(pIdentifier->iCorkIndex == CORK_NIL)
144+
{
145+
tagEntryInfo oEntry;
146+
initRefTagEntry(&oEntry, vStringValue(pIdentifier->pszWord),
147+
CXXTagKindUNKNOWN, CXXTagUnknownRoleVALUE);
148+
oEntry.lineNumber = pIdentifier->iLineNumber;
149+
oEntry.filePosition = pIdentifier->oFilePosition;
150+
oEntry.isFileScope = false;
151+
// TODO: Other scope field must be filled.
152+
oEntry.extensionFields.scopeIndex = iScopeCorkIndex;
153+
pIdentifier->iCorkIndex = makeTagEntry(&oEntry);
154+
registerEntry(pIdentifier->iCorkIndex);
155+
pIdentifier->bCorkIndexForReftag = 1;
156+
}
157+
t = t->pNext;
158+
}
121159
}
122160
}
123161
return;

parsers/cxx/cxx_tag.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#define CXX_COMMON_UNKNOWN_ROLES(__langPrefix) \
2323
static roleDefinition __langPrefix##UnknownRoles [] = { \
2424
{ false, "ref", "referenced anyhow" }, \
25+
{ true, "value", "used as right side value" }, \
2526
}
2627

2728
CXX_COMMON_UNKNOWN_ROLES(C);

parsers/cxx/cxx_tag.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ enum CXXTagCommonKind
4343
enum CXXTagUnknownRole
4444
{
4545
CXXTagUnknownRoleREFERENCED,
46+
CXXTagUnknownRoleVALUE,
4647
};
4748

4849
enum CXXTagMemberRole

0 commit comments

Comments
 (0)