public override void EnterExprSwitchStmt(GoParser.ExprSwitchStmtContext context) { // exprSwitchStmt // : 'switch'(simpleStmt ';') ? expression ? '{' exprCaseClause * '}' m_exprSwitchExpressionLevel++; if (!(context.simpleStmt() is null) && context.simpleStmt().emptyStmt() is null) { if (!(context.simpleStmt().shortVarDecl() is null)) { // Any declared variable will be scoped to switch statement, so create a sub-block for it m_targetFile.AppendLine($"{Spacing()}{{"); IndentLevel++; // Handle storing of current values of any redeclared variables m_targetFile.Append(OpenRedeclaredVariableBlock(context.simpleStmt().shortVarDecl().identifierList(), m_exprSwitchExpressionLevel)); } m_targetFile.Append(string.Format(ExprSwitchStatementMarker, m_exprSwitchExpressionLevel)); } ExprSwitchStatement exprSwitchStatement = new ExprSwitchStatement(); foreach (IParseTree child in context.children) { if (child.GetText() == "{") { exprSwitchStatement.intraSwitchComments = CheckForCommentsRight(child); break; } } m_exprSwitchStatements.Push(exprSwitchStatement); }
public override void EnterExprCaseClause(GoParser.ExprCaseClauseContext context) { // exprSwitchStmt // : 'switch'(simpleStmt ';') ? expression ? '{' exprCaseClause * '}' // exprCaseClause // : exprSwitchCase ':' statementList // exprSwitchCase // : 'case' expressionList | 'default' ExprSwitchStatement exprSwitchStatement = m_exprSwitchStatements.Peek(); if (context.exprSwitchCase().expressionList() is null) { // Handle default case exprSwitchStatement.defaultCase = new ExprCaseStatement { leftComments = CheckForCommentsLeft(context.statementList(), 1) }; } else { // Handle new case exprSwitchStatement.caseStatements.Add(context, new ExprCaseStatement { leftComments = CheckForCommentsLeft(context.statementList(), 1) }); } IndentLevel++; PushBlock(); }
public override void ExitExprCaseClause(GoParser.ExprCaseClauseContext context) { // exprSwitchStmt // : 'switch'(simpleStmt ';') ? expression ? '{' exprCaseClause * '}' // exprCaseClause // : exprSwitchCase ':' statementList // exprSwitchCase // : 'case' expressionList | 'default' IndentLevel--; ExprSwitchStatement exprSwitchStatement = m_exprSwitchStatements.Peek(); GoParser.ExpressionListContext expressionList = context.exprSwitchCase().expressionList(); if (expressionList is null) { exprSwitchStatement.defaultCase.block = PopBlock(false); } else { if (!ExpressionLists.TryGetValue(expressionList, out ExpressionInfo[] expressions))