Allow { and } on mupltiple lines with any indentation

This commit is contained in:
Sam Vervaeck 2023-05-31 14:22:35 +02:00
parent b64b18216a
commit 25928c288b
Signed by: samvv
SSH key fingerprint: SHA256:dIg0ywU1OP+ZYifrYxy8c5esO72cIKB+4/9wkZj1VaY
2 changed files with 30 additions and 11 deletions

View file

@ -54,6 +54,7 @@ namespace bolt {
enum class FrameType {
Block,
LineFold,
Fallthrough,
};
class Punctuator : public BufferedStream<Token*> {

View file

@ -378,22 +378,40 @@ after_string_contents:
auto T0 = Tokens.peek();
if (llvm::isa<EndOfFile>(T0)) {
if (Frames.size() == 1) {
return T0;
}
auto Frame = Frames.top();
Frames.pop();
switch (Frame) {
case FrameType::Block:
return new BlockEnd(T0->getStartLoc());
case FrameType::LineFold:
return new LineFoldEnd(T0->getStartLoc());
switch (T0->getKind()) {
case NodeKind::LBrace:
Frames.push(FrameType::Fallthrough);
break;
case NodeKind::EndOfFile:
{
if (Frames.size() == 1) {
return T0;
}
auto Frame = Frames.top();
Frames.pop();
switch (Frame) {
case FrameType::Fallthrough:
break;
case FrameType::Block:
return new BlockEnd(T0->getStartLoc());
case FrameType::LineFold:
return new LineFoldEnd(T0->getStartLoc());
}
}
default:
break;
}
auto RefLoc = Locations.top();
switch (Frames.top()) {
case FrameType::Fallthrough:
{
if (T0->getKind() == NodeKind::RBrace) {
Frames.pop();
}
Tokens.get();
return T0;
}
case FrameType::LineFold:
{
if (T0->getStartLine() > RefLoc.Line