Skip to content

Commit 243bfd5

Browse files
committed
Thrift: extract C++ headers specified with cpp_include
Signed-off-by: Masatake YAMATO <[email protected]>
1 parent 4483ed9 commit 243bfd5

File tree

6 files changed

+29
-5
lines changed

6 files changed

+29
-5
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
--sort=no
2+
--extras=+r
3+
--fields=+rln
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
iostream input.thrift /^cpp_include "iostream"$/;" h line:1 language:C++ roles:local
2+
vector input.thrift /^cpp_include 'vector'$/;" h line:2 language:C++ roles:local
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
cpp_include "iostream"
2+
cpp_include 'vector'

peg/thrift.peg

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,22 @@ Grammar <- __ ( Statement __ )* (EOF / SyntaxError)
5555
SyntaxError <- .
5656

5757
# MODIFIED
58-
if ($1[0] == 'i')
5958
Include <- <( "include" / "cpp_include" )> _ <Literal> EOS {
59+
vString *f = unliteral ($2);
60+
if (vStringLength(f) > 0)
6061
{
61-
vString *f = unliteral ($2);
62-
if (vStringLength(f) > 0)
62+
if ($1[0] == 'i')
6363
makeThriftTagFull (auxil, vStringValue (f), $2s, K_THRIFTFILE, THRIFT_THRIFT_FILE_INCLUDED, false);
64-
vStringDelete (f);
64+
else
65+
{
66+
tagEntryInfo e;
67+
initForeignRefTagEntry (&e, vStringValue(f), getNamedLanguage ("C++", 0), CXXTagKindINCLUDE, CR_HEADER_LOCAL);
68+
e.lineNumber = getInputLineNumberForFileOffset ($2s);
69+
e.filePosition = getInputFilePositionForLine (e.lineNumber);
70+
makeTagEntry (&e);
71+
}
6572
}
66-
/* TODO: cpp_include */
73+
vStringDelete (f);
6774
}
6875

6976
Statement <- Include / Namespace / Const / Enum / TypeDef / Struct / Exception / Union / Service

peg/thrift_post.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "options.h"
1515
#include "parse.h"
1616
#include "routines.h"
17+
#include "dependency.h"
1718

1819
static int makeThriftTagFull (struct parserCtx *auxil, const char *name, long offset, int kind, int role,
1920
bool pushScope)
@@ -99,11 +100,18 @@ extern parserDefinition* ThriftParser (void)
99100
{
100101
static const char *const extensions [] = { "thrift", NULL };
101102
parserDefinition* def = parserNew ("Thrift");
103+
104+
static parserDependency dependencies [] = {
105+
[0] = { DEPTYPE_FOREIGNER, "C++", NULL },
106+
};
107+
102108
def->kindTable = ThriftKinds;
103109
def->kindCount = ARRAY_SIZE (ThriftKinds);
104110
def->fieldTable = ThriftFields;
105111
def->fieldCount = ARRAY_SIZE (ThriftFields);
106112
def->extensions = extensions;
113+
def->dependencies = dependencies;
114+
def->dependencyCount = ARRAY_SIZE (dependencies);
107115
def->parser = findThriftTags;
108116
def->useCork = true;
109117
def->enabled = true;

peg/thrift_pre.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
#include "field.h"
1616
#include "peg_common.h"
1717

18+
#include "parsers/cxx/cxx_tag.h"
19+
1820
/*
1921
* MACROS
2022
*/

0 commit comments

Comments
 (0)