From 44301769021430773f37d48bf7ef379319a110f9 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 3 Jan 2011 17:14:03 +0300 Subject: [PATCH] Cosmetics --- .../jet/lang/parsing/AbstractJetParsing.java | 8 +-- .../lang/parsing/JetExpressionParsing.java | 50 +++++++++--------- .../jet/lang/parsing/JetParsing.java | 52 +++++++++---------- .../SemanticWhitespaceAwarePsiBuilder.java | 9 ++-- ...anticWhitespaceAwarePsiBuilderAdapter.java | 16 +++--- ...cWhitespaceAwarePsiBuilderForByClause.java | 14 +++-- ...SemanticWhitespaceAwarePsiBuilderImpl.java | 22 ++++---- 7 files changed, 84 insertions(+), 87 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java index 8379330d267..97ec1cb771f 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/AbstractJetParsing.java @@ -69,7 +69,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; IElementType tt = tt(); if (recoverySet == null || recoverySet.contains(tt) || (recoverySet.contains(EOL_OR_SEMICOLON) - && (eof() || tt == SEMICOLON || myBuilder.eolInLastWhitespace()))) { + && (eof() || tt == SEMICOLON || myBuilder.newlineBeforeCurrentToken()))) { error(message); } else { @@ -103,7 +103,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; if (expectation == EOL_OR_SEMICOLON) { if (eof()) return true; if (token == SEMICOLON) return true; - if (myBuilder.eolInLastWhitespace()) return true; + if (myBuilder.newlineBeforeCurrentToken()) return true; } if (token == IDENTIFIER && expectation instanceof JetKeywordToken) { JetKeywordToken expectedKeyword = (JetKeywordToken) expectation; @@ -132,7 +132,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; if (set.contains(EOL_OR_SEMICOLON)) { if (eof()) return true; if (token == SEMICOLON) return true; - if (myBuilder.eolInLastWhitespace()) return true; + if (myBuilder.newlineBeforeCurrentToken()) return true; } if (token == IDENTIFIER) { JetKeywordToken keywordToken = SOFT_KEYWORD_TEXTS.get(myBuilder.getTokenText()); @@ -229,7 +229,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*; } protected boolean eol() { - return myBuilder.eolInLastWhitespace() || eof(); + return myBuilder.newlineBeforeCurrentToken() || eof(); } protected abstract JetParsing create(SemanticWhitespaceAwarePsiBuilder builder); diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 7fe5d1006b7..c2cd70cc42d 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -143,7 +143,7 @@ public class JetExpressionParsing extends AbstractJetParsing { precedence.parseHigherPrecedence(this); - while (!myBuilder.eolInLastWhitespace() && atSet(precedence.getOperations())) { + while (!myBuilder.newlineBeforeCurrentToken() && atSet(precedence.getOperations())) { advance(); // operation precedence.parseRightHandSide(this); expression.done(BINARY_EXPRESSION); @@ -187,7 +187,7 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker expression = mark(); parseAtomicExpression(); while (true) { - if (myBuilder.eolInLastWhitespace()) { + if (myBuilder.newlineBeforeCurrentToken()) { break; } else if (at(LBRACKET)) { parseArrayAccess(); @@ -211,7 +211,7 @@ public class JetExpressionParsing extends AbstractJetParsing { }); if (gtPos >= 0) { myJetParsing.parseTypeArgumentList(); - if (!myBuilder.eolInLastWhitespace() && at(LPAR)) parseValueArgumentList(); + if (!myBuilder.newlineBeforeCurrentToken() && at(LPAR)) parseValueArgumentList(); parseCallWithClosure(); expression.done(CALL_EXPRESSION); } else { @@ -247,7 +247,7 @@ public class JetExpressionParsing extends AbstractJetParsing { * expression functionLiteral? */ protected boolean parseCallWithClosure() { - if (!myBuilder.eolInLastWhitespace() && at(LBRACE)) { + if (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) { parseFunctionLiteral(); return true; } @@ -405,7 +405,7 @@ public class JetExpressionParsing extends AbstractJetParsing { myJetParsing.parseAttributeList(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(CASE_KEYWORD, "Expecting 'case' to start pattern matching", TokenSet.create(RBRACE, IF_KEYWORD, DOUBLE_ARROW)); parsePattern(); @@ -417,7 +417,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } expect(DOUBLE_ARROW, "Expecting '=>'", TokenSet.create(RBRACE)); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); parseExpression(); @@ -517,7 +517,7 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker indices = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LBRACKET while (true) { @@ -532,7 +532,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } expect(RBRACKET, "Expecting ']'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); indices.done(INDICES); } @@ -578,7 +578,7 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker literal = mark(); - myBuilder.enableEols(); + myBuilder.enableNewlines(); advance(); // LBRACE int doubleArrowPos = matchTokenStreamPredicate(new FirstBefore(new At(DOUBLE_ARROW), new At(RBRACE)) { @@ -652,7 +652,7 @@ public class JetExpressionParsing extends AbstractJetParsing { body.done(BODY); expect(RBRACE, "Expecting '}'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); literal.done(FUNCTION_LITERAL); } @@ -664,7 +664,7 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker list = mark(); expect(LPAR, "Expecting a parameter list in parentheses (...)", TokenSet.create(DOUBLE_ARROW, COLON)); - myBuilder.disableEols(); + myBuilder.disableNewlines(); if (!at(RPAR)) { while (true) { @@ -691,7 +691,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } } - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); expect(RPAR, "Expecting ')", TokenSet.create(DOUBLE_ARROW, COLON)); list.done(VALUE_PARAMETER_LIST); @@ -709,7 +709,7 @@ public class JetExpressionParsing extends AbstractJetParsing { while (at(SEMICOLON)) advance(); // SEMICOLON } else if (at(RBRACE)) { break; - } else if (!myBuilder.eolInLastWhitespace()) { + } else if (!myBuilder.newlineBeforeCurrentToken()) { errorUntil("Unexpected tokens (use ';' to separate expressions on the same line", TokenSet.create(EOL_OR_SEMICOLON)); } } @@ -802,7 +802,7 @@ public class JetExpressionParsing extends AbstractJetParsing { advance(); // FOR_KEYWORD - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting '(' to open a loop range", TokenSet.create(RPAR, VAL_KEYWORD, VAR_KEYWORD, IDENTIFIER)); PsiBuilder.Marker parameter = mark(); @@ -821,7 +821,7 @@ public class JetExpressionParsing extends AbstractJetParsing { range.done(LOOP_RANGE); expectNoAdvance(RPAR, "Expecting ')'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); parseControlStructureBody(); @@ -920,7 +920,7 @@ public class JetExpressionParsing extends AbstractJetParsing { * "(" expression ")" */ private void parseCondition() { - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting a condition in parentheses '(...)'"); PsiBuilder.Marker condition = mark(); @@ -928,7 +928,7 @@ public class JetExpressionParsing extends AbstractJetParsing { condition.done(CONDITION); expect(RPAR, "Expecting ')"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); } /* @@ -1006,13 +1006,13 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker typeof = mark(); advance(); // TYPEOF_KEYWORD - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting '('"); parseExpression(); expect(RPAR, "Expecting ')'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); typeof.done(TYPEOF); } @@ -1027,7 +1027,7 @@ public class JetExpressionParsing extends AbstractJetParsing { PsiBuilder.Marker mark = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LPAR if (!at(RPAR)) { @@ -1044,7 +1044,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } expect(RPAR, "Expecting ')'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); mark.done(TUPLE); } @@ -1059,7 +1059,7 @@ public class JetExpressionParsing extends AbstractJetParsing { // This may be "this < foo" or "this", thus the backtracking PsiBuilder.Marker supertype = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LT myJetParsing.parseTypeRef(); @@ -1071,7 +1071,7 @@ public class JetExpressionParsing extends AbstractJetParsing { else { supertype.rollbackTo(); } - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); } } @@ -1083,7 +1083,7 @@ public class JetExpressionParsing extends AbstractJetParsing { public void parseValueArgumentList() { PsiBuilder.Marker list = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting an argument list", TokenSet.create(RPAR)); if (!at(RPAR)) { @@ -1100,7 +1100,7 @@ public class JetExpressionParsing extends AbstractJetParsing { } expect(RPAR, "Expecting ')'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); list.done(VALUE_ARGUMENT_LIST); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index aa1e880d0f8..9511fb7a84f 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -263,7 +263,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker properties = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting a property list in parentheses '( ... )'"); // Property list @@ -284,7 +284,7 @@ public class JetParsing extends AbstractJetParsing { } expect(RPAR, "Expecting ')' to close a property list"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); consumeIf(SEMICOLON); @@ -340,7 +340,7 @@ public class JetParsing extends AbstractJetParsing { assert at(LBRACKET); PsiBuilder.Marker annotation = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LBRACKET while (true) { @@ -356,7 +356,7 @@ public class JetParsing extends AbstractJetParsing { } expect(RBRACKET, "Expecting ']' to close an attribute annotation"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); annotation.done(ATTRIBUTE_ANNOTATION); } @@ -398,7 +398,7 @@ public class JetParsing extends AbstractJetParsing { return NAMESPACE; } - myBuilder.enableEols(); + myBuilder.enableNewlines(); advance(); // LBRACE PsiBuilder.Marker namespaceBody = mark(); @@ -406,7 +406,7 @@ public class JetParsing extends AbstractJetParsing { namespaceBody.done(NAMESPACE_BODY); expect(RBRACE, "Expecting '}'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); return NAMESPACE; } @@ -460,7 +460,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker classBody = mark(); - myBuilder.enableEols(); + myBuilder.enableNewlines(); advance(); // LBRACE while (!eof() && !at(RBRACE)) { @@ -490,7 +490,7 @@ public class JetParsing extends AbstractJetParsing { } expect(RBRACE, "Expecting '}' to close enum class body"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); classBody.done(CLASS_BODY); } @@ -535,7 +535,7 @@ public class JetParsing extends AbstractJetParsing { assert at(LBRACE); PsiBuilder.Marker body = mark(); - myBuilder.enableEols(); + myBuilder.enableNewlines(); advance(); // LBRACE while (!eof()) { @@ -545,7 +545,7 @@ public class JetParsing extends AbstractJetParsing { parseMemberDeclaration(); } expect(RBRACE, "Missing '}"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); body.done(CLASS_BODY); } @@ -819,7 +819,7 @@ public class JetParsing extends AbstractJetParsing { return true; } - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting '('", TokenSet.create(RPAR, IDENTIFIER, COLON, LBRACE, EQ)); if (setter) { PsiBuilder.Marker setterParameter = mark(); @@ -836,7 +836,7 @@ public class JetParsing extends AbstractJetParsing { } if (!at(RPAR)) errorUntil("Expecting ')'", TokenSet.create(RPAR, COLON, LBRACE, EQ, EOL_OR_SEMICOLON)); expect(RPAR, "Expecting ')'", TokenSet.create(RPAR, COLON, LBRACE, EQ)); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); if (at(COLON)) { advance(); @@ -928,13 +928,13 @@ public class JetParsing extends AbstractJetParsing { public void parseBlock() { PsiBuilder.Marker block = mark(); - myBuilder.enableEols(); + myBuilder.enableNewlines(); expect(LBRACE, "Expecting '{' to open a block"); myExpressionParsing.parseExpressions(); expect(RBRACE, "Expecting '}"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); block.done(BLOCK); } @@ -1038,7 +1038,7 @@ public class JetParsing extends AbstractJetParsing { assert at(LPAR); PsiBuilder.Marker cons = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LPAR while (true) { @@ -1048,7 +1048,7 @@ public class JetParsing extends AbstractJetParsing { } expect(RPAR, "')' expected"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); cons.done(PRIMARY_CONSTRUCTOR_PARAMETERS_LIST); } @@ -1107,7 +1107,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker list = mark(); if (at(LT)) { - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LT while (true) { @@ -1119,7 +1119,7 @@ public class JetParsing extends AbstractJetParsing { } expect(GT, "Missing '>'", recoverySet); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); if (at(WHERE_KEYWORD)) { parseTypeConstraintList(); @@ -1262,7 +1262,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker list = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LT while (true) { @@ -1273,7 +1273,7 @@ public class JetParsing extends AbstractJetParsing { } expect(GT, "Expecting a '>'"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); list.done(TYPE_ARGUMENT_LIST); } @@ -1289,7 +1289,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker tuple = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LPAR if (!at(RPAR)) { @@ -1318,7 +1318,7 @@ public class JetParsing extends AbstractJetParsing { } expect(RPAR, "Expecting ')"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); tuple.done(TUPLE_TYPE); } @@ -1333,7 +1333,7 @@ public class JetParsing extends AbstractJetParsing { PsiBuilder.Marker functionType = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); advance(); // LBRACE int lastLPar = findLastBefore(TokenSet.create(LPAR), TokenSet.create(RBRACE, COLON), false); @@ -1348,7 +1348,7 @@ public class JetParsing extends AbstractJetParsing { parseFunctionTypeContents(); expect(RBRACE, "Expecting '}"); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); functionType.done(FUNCTION_TYPE); } @@ -1382,7 +1382,7 @@ public class JetParsing extends AbstractJetParsing { public void parseValueParameterList(boolean isFunctionTypeContents, TokenSet recoverySet) { PsiBuilder.Marker parameters = mark(); - myBuilder.disableEols(); + myBuilder.disableNewlines(); expect(LPAR, "Expecting '(", recoverySet); if (!at(RPAR)) { @@ -1407,7 +1407,7 @@ public class JetParsing extends AbstractJetParsing { } } expect(RPAR, "Expecting ')'", recoverySet); - myBuilder.restoreEolsState(); + myBuilder.restoreNewlinesState(); parameters.done(VALUE_PARAMETER_LIST); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java index db52db97a14..1ecaa8bb5a2 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilder.java @@ -6,9 +6,8 @@ import com.intellij.lang.PsiBuilder; * @author abreslav */ public interface SemanticWhitespaceAwarePsiBuilder extends PsiBuilder { - // TODO: Wrong name, should be something like "EOL before current token" - boolean eolInLastWhitespace(); - void disableEols(); - void enableEols(); - void restoreEolsState(); + boolean newlineBeforeCurrentToken(); + void disableNewlines(); + void enableNewlines(); + void restoreNewlinesState(); } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderAdapter.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderAdapter.java index 5e6c4a1bef4..0071f38e361 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderAdapter.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderAdapter.java @@ -14,23 +14,23 @@ public class SemanticWhitespaceAwarePsiBuilderAdapter extends PsiBuilderAdapter } @Override - public boolean eolInLastWhitespace() { - return myBuilder.eolInLastWhitespace(); + public boolean newlineBeforeCurrentToken() { + return myBuilder.newlineBeforeCurrentToken(); } @Override - public void disableEols() { - myBuilder.disableEols(); + public void disableNewlines() { + myBuilder.disableNewlines(); } @Override - public void enableEols() { - myBuilder.enableEols(); + public void enableNewlines() { + myBuilder.enableNewlines(); } @Override - public void restoreEolsState() { - myBuilder.restoreEolsState(); + public void restoreNewlinesState() { + myBuilder.restoreNewlinesState(); } } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderForByClause.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderForByClause.java index 9fafbbb847b..cee932cb010 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderForByClause.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderForByClause.java @@ -1,7 +1,5 @@ package org.jetbrains.jet.lang.parsing; -import com.intellij.psi.tree.IElementType; - /** * @author abreslav */ @@ -14,20 +12,20 @@ public class SemanticWhitespaceAwarePsiBuilderForByClause extends SemanticWhites } @Override - public void disableEols() { - super.disableEols(); + public void disableNewlines() { + super.disableNewlines(); stackSize++; } @Override - public void enableEols() { - super.enableEols(); + public void enableNewlines() { + super.enableNewlines(); stackSize++; } @Override - public void restoreEolsState() { - super.restoreEolsState(); + public void restoreNewlinesState() { + super.restoreNewlinesState(); stackSize--; } diff --git a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java index 07e465b23b0..80d597c6d42 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/SemanticWhitespaceAwarePsiBuilderImpl.java @@ -12,16 +12,16 @@ import java.util.Stack; * @author abreslav */ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter implements SemanticWhitespaceAwarePsiBuilder { - private final Stack eolsEnabled = new Stack(); + private final Stack newlinesEnabled = new Stack(); public SemanticWhitespaceAwarePsiBuilderImpl(final PsiBuilder delegate) { super(delegate); - eolsEnabled.push(true); + newlinesEnabled.push(true); } @Override - public boolean eolInLastWhitespace() { - if (!eolsEnabled.peek()) return false; + public boolean newlineBeforeCurrentToken() { + if (!newlinesEnabled.peek()) return false; if (eof()) return true; // TODO: maybe, memoize this somehow? for (int i = 1; i <= getCurrentOffset(); i++) { @@ -46,19 +46,19 @@ public class SemanticWhitespaceAwarePsiBuilderImpl extends PsiBuilderAdapter imp } @Override - public void disableEols() { - eolsEnabled.push(false); + public void disableNewlines() { + newlinesEnabled.push(false); } @Override - public void enableEols() { - eolsEnabled.push(true); + public void enableNewlines() { + newlinesEnabled.push(true); } @Override - public void restoreEolsState() { - assert eolsEnabled.size() > 1; - eolsEnabled.pop(); + public void restoreNewlinesState() { + assert newlinesEnabled.size() > 1; + newlinesEnabled.pop(); } }