Skip to content

Commit d974373

Browse files
authored
Merge pull request #37240 from ahoppen/pr/syntax-parsing-context-debug-utils
[libSyntax] Add a `dumpStack` method to `SyntaxParsingContext`
2 parents c24b693 + 2abea17 commit d974373

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

include/swift/Parse/SyntaxParsingContext.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ enum class SyntaxContextKind {
4444
Syntax,
4545
};
4646

47+
} // end namespace swift
48+
49+
namespace llvm {
50+
raw_ostream &operator<<(raw_ostream &OS, swift::SyntaxContextKind Kind);
51+
} // end namespace llvm
52+
53+
namespace swift {
54+
4755
enum class SyntaxNodeCreationKind {
4856
/// This is for \c SyntaxParsingContext to collect the syntax data and create
4957
/// a 'recorded' ParsedRawSyntaxNode object, which would be a result of
@@ -355,6 +363,9 @@ class alignas(1 << SyntaxAlignInBits) SyntaxParsingContext {
355363

356364
/// Dump the nodes that are in the storage stack of the SyntaxParsingContext
357365
SWIFT_DEBUG_DUMPER(dumpStorage());
366+
367+
void dumpStack(llvm::raw_ostream &OS) const;
368+
SWIFT_DEBUG_DUMPER(dumpStack()) { dumpStack(llvm::errs()); }
358369
};
359370

360371
} // namespace swift

lib/Parse/SyntaxParsingContext.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,36 @@
2525
#include "swift/Parse/SyntaxParsingCache.h"
2626
#include "swift/Parse/Token.h"
2727
#include "swift/Syntax/SyntaxFactory.h"
28+
#include "llvm/Support/raw_ostream.h"
2829

2930
using namespace swift;
3031
using namespace swift::syntax;
3132

33+
llvm::raw_ostream &llvm::operator<<(llvm::raw_ostream &OS,
34+
SyntaxContextKind Kind) {
35+
switch (Kind) {
36+
case SyntaxContextKind::Decl:
37+
OS << "Decl";
38+
break;
39+
case SyntaxContextKind::Stmt:
40+
OS << "Stmt";
41+
break;
42+
case SyntaxContextKind::Expr:
43+
OS << "Expr";
44+
break;
45+
case SyntaxContextKind::Type:
46+
OS << "Type";
47+
break;
48+
case SyntaxContextKind::Pattern:
49+
OS << "Pattern";
50+
break;
51+
case SyntaxContextKind::Syntax:
52+
OS << "Syntax";
53+
break;
54+
}
55+
return OS;
56+
}
57+
3258
void SyntaxParseActions::_anchor() {}
3359

3460
using RootContextData = SyntaxParsingContext::RootContextData;
@@ -356,6 +382,38 @@ void SyntaxParsingContext::dumpStorage() const {
356382
}
357383
}
358384

385+
void SyntaxParsingContext::dumpStack(llvm::raw_ostream &OS) const {
386+
if (!isRoot()) {
387+
getParent()->dumpStack(OS);
388+
}
389+
switch (Mode) {
390+
case AccumulationMode::CreateSyntax:
391+
llvm::errs() << "CreateSyntax (" << SynKind << ")\n";
392+
break;
393+
case AccumulationMode::DeferSyntax:
394+
llvm::errs() << "DeferSyntax (" << SynKind << ")\n";
395+
break;
396+
case AccumulationMode::CoerceKind:
397+
llvm::errs() << "CoerceKind (" << CtxtKind << ")\n";
398+
break;
399+
case AccumulationMode::Transparent:
400+
llvm::errs() << "Transparent\n";
401+
break;
402+
case AccumulationMode::Discard:
403+
llvm::errs() << "Discard\n";
404+
break;
405+
case AccumulationMode::SkippedForIncrementalUpdate:
406+
llvm::errs() << "SkippedForIncrementalUpdate\n";
407+
break;
408+
case AccumulationMode::Root:
409+
llvm::errs() << "Root\n";
410+
break;
411+
case AccumulationMode::NotSet:
412+
llvm::errs() << "NotSet\n";
413+
break;
414+
}
415+
}
416+
359417
SyntaxParsingContext::~SyntaxParsingContext() {
360418
assert(isTopOfContextStack() && "destructed in wrong order");
361419

0 commit comments

Comments
 (0)