示例#1
0
        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);
        }
示例#2
0
        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();
        }
示例#3
0
        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))