[Syntax] Unify RawSyntax and RawTokenSyntax using union and TrailingObjects

It better matches with SwiftSyntax model.

Using TrailingObjects reduces the number of heap allocation which
gains 18% performance improvement.
This commit is contained in:
Rintaro Ishizaki
2018-01-15 21:13:36 +09:00
parent 4c172037e8
commit 0780c529c4
28 changed files with 557 additions and 627 deletions

View File

@@ -25,8 +25,7 @@ class Token;
class DiagnosticEngine;
namespace syntax {
struct RawTokenSyntax;
struct RawSyntax;
class RawSyntax;
enum class SyntaxKind;
enum class SyntaxContextKind {
@@ -201,7 +200,7 @@ public:
TokenSyntax popToken() {
assert(Storage.size() > Offset);
assert(Storage.back()->Kind == SyntaxKind::Token);
assert(Storage.back()->getKind() == SyntaxKind::Token);
auto Node = make<TokenSyntax>(std::move(Storage.back()));
Storage.pop_back();
return Node;