Allow { and } on mupltiple lines with any indentation
This commit is contained in:
parent
b64b18216a
commit
25928c288b
2 changed files with 30 additions and 11 deletions
|
@ -54,6 +54,7 @@ namespace bolt {
|
||||||
enum class FrameType {
|
enum class FrameType {
|
||||||
Block,
|
Block,
|
||||||
LineFold,
|
LineFold,
|
||||||
|
Fallthrough,
|
||||||
};
|
};
|
||||||
|
|
||||||
class Punctuator : public BufferedStream<Token*> {
|
class Punctuator : public BufferedStream<Token*> {
|
||||||
|
|
|
@ -378,22 +378,40 @@ after_string_contents:
|
||||||
|
|
||||||
auto T0 = Tokens.peek();
|
auto T0 = Tokens.peek();
|
||||||
|
|
||||||
if (llvm::isa<EndOfFile>(T0)) {
|
switch (T0->getKind()) {
|
||||||
if (Frames.size() == 1) {
|
case NodeKind::LBrace:
|
||||||
return T0;
|
Frames.push(FrameType::Fallthrough);
|
||||||
}
|
break;
|
||||||
auto Frame = Frames.top();
|
case NodeKind::EndOfFile:
|
||||||
Frames.pop();
|
{
|
||||||
switch (Frame) {
|
if (Frames.size() == 1) {
|
||||||
case FrameType::Block:
|
return T0;
|
||||||
return new BlockEnd(T0->getStartLoc());
|
}
|
||||||
case FrameType::LineFold:
|
auto Frame = Frames.top();
|
||||||
return new LineFoldEnd(T0->getStartLoc());
|
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();
|
auto RefLoc = Locations.top();
|
||||||
switch (Frames.top()) {
|
switch (Frames.top()) {
|
||||||
|
case FrameType::Fallthrough:
|
||||||
|
{
|
||||||
|
if (T0->getKind() == NodeKind::RBrace) {
|
||||||
|
Frames.pop();
|
||||||
|
}
|
||||||
|
Tokens.get();
|
||||||
|
return T0;
|
||||||
|
}
|
||||||
case FrameType::LineFold:
|
case FrameType::LineFold:
|
||||||
{
|
{
|
||||||
if (T0->getStartLine() > RefLoc.Line
|
if (T0->getStartLine() > RefLoc.Line
|
||||||
|
|
Loading…
Reference in a new issue