[libSyntax] Store range in token_data in C lib parse actions

We don't actually need the range for layout nodes, so just store it
for token nodes. This will also make deferred node handling easier
later on, because we don't need to keep track of layout node ranges.
This commit is contained in:
Alex Hoppen
2021-02-26 13:30:01 +01:00
parent 107add7fd7
commit a48713717e
3 changed files with 9 additions and 13 deletions

View File

@@ -58,7 +58,6 @@ NumParses("n", cl::desc("number of invocations"), cl::init(1));
namespace {
struct SPNode {
swiftparse_syntax_kind_t kind;
StringRef nodeText;
Optional<swiftparse_token_kind_t> tokKind;
StringRef leadingTriviaText;
@@ -111,9 +110,9 @@ static swiftparse_client_node_t
makeNode(const swiftparse_syntax_node_t *raw_node, StringRef source) {
SPNode *node = new SPNode();
node->kind = raw_node->kind;
auto range = raw_node->range;
node->nodeText = source.substr(range.offset, range.length);
if (raw_node->kind == 0) {
auto range = raw_node->token_data.range;
auto nodeText = source.substr(range.offset, range.length);
node->tokKind = raw_node->token_data.kind;
size_t leadingTriviaLen =
trivialLen(makeArrayRef(raw_node->token_data.leading_trivia,
@@ -121,11 +120,10 @@ makeNode(const swiftparse_syntax_node_t *raw_node, StringRef source) {
size_t trailingTriviaLen =
trivialLen(makeArrayRef(raw_node->token_data.trailing_trivia,
raw_node->token_data.trailing_trivia_count));
node->leadingTriviaText = node->nodeText.take_front(leadingTriviaLen);
node->tokenText =
node->nodeText.substr(leadingTriviaLen,
range.length-leadingTriviaLen-trailingTriviaLen);
node->trailingTriviaText = node->nodeText.take_back(trailingTriviaLen);
node->leadingTriviaText = nodeText.take_front(leadingTriviaLen);
node->tokenText = nodeText.substr(
leadingTriviaLen, range.length - leadingTriviaLen - trailingTriviaLen);
node->trailingTriviaText = nodeText.take_back(trailingTriviaLen);
} else {
for (unsigned i = 0, e = raw_node->layout_data.nodes_count; i != e; ++i) {
auto subnode = convertClientNode(raw_node->layout_data.nodes[i]);