コード例 #1
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            base.VisitBreakStatement(node);
            StatementsAnalyzer statementsAnalyzer = this;

            statementsAnalyzer.counter = checked (statementsAnalyzer.counter + 1);
        }
コード例 #2
0
ファイル: CSToUL.cs プロジェクト: xiongfang/UL
        void ExportStatement(BreakStatementSyntax ss)
        {
            var node = new ULStatementBreak();

            node.Parent = currentBlock;
            currentBlock.statements.Add(node);
        }
コード例 #3
0
 private Doc PrintBreakStatementSyntax(BreakStatementSyntax node)
 {
     return(Concat(
                this.PrintSyntaxToken(node.BreakKeyword),
                this.PrintSyntaxToken(node.SemicolonToken)
                ));
 }
コード例 #4
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (m_InLoop <= 0 && m_InSwitch <= 0)
     {
         m_ExistBreak = true;
     }
 }
コード例 #5
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (this.breakLocation != default(FlowLocation))
     {
         this.BranchToLocation(this.breakLocation, this.lexicalState);
     }
 }
コード例 #6
0
        public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
        {
            SyntaxNode newNode = base.VisitBreakStatement(node);

            newNode = AddTab(newNode);
            return(newNode);
        }
コード例 #7
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            if (m_ContinueInfoStack.Count > 0)
            {
                var ci = m_ContinueInfoStack.Peek();
                if (ci.IsIgnoreBreak)
                {
                    return;
                }
                if (ci.HaveContinue)
                {
                    CodeBuilder.AppendFormat("{0}{1} = true;", GetIndentString(), ci.BreakFlagVarName);
                    CodeBuilder.AppendLine();
                }

                bool isLastNode = IsLastNodeOfFor(node);
                if (isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}do", GetIndentString());
                    CodeBuilder.AppendLine();
                }

                CodeBuilder.AppendFormat("{0}break;", GetIndentString());
                CodeBuilder.AppendLine();

                if (isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}end;", GetIndentString());
                    CodeBuilder.AppendLine();
                }
            }
        }
コード例 #8
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (m_InSwitch <= 0)
     {
         ++m_BreakCount;
     }
 }
コード例 #9
0
        /// <summary>
        /// 8.9.1
        /// </summary>
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            var controlFlowTarget = this.controlFlowStack.Peek();

            LLVM.BuildBr(this.builder, controlFlowTarget.End);
            LLVM.PositionBuilderAtEnd(this.builder, LLVM.AppendBasicBlock(this.function, "UnreachableBreak"));
        }
コード例 #10
0
        ULNode ExportStatement(BreakStatementSyntax ss)
        {
            var node = ULNode.NewControlNode(ULNode.name_break);

            graph.Nodes.Add(node);

            return(node);
        }
コード例 #11
0
 public override IEnumerable <Instruction> VisitBreakStatement(BreakStatementSyntax node)
 {
     if (_enclosingLoop == null)
     {
         throw new UnsupportedSyntaxException($"no loop to attach the break statement to");
     }
     return(_CreateEnumerable(new Jump(_enclosingLoop.BreakLabel)));
 }
コード例 #12
0
 public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
 {
     if (RemoveTestTriviaAnnotation(node.GetLeadingTrivia()))
     {
         return(null);
     }
     return(base.VisitBreakStatement(node));
 }
コード例 #13
0
 internal bool HasNonTrailingBreaks(SyntaxNode node, BreakStatementSyntax trailing)
 {
     //if our trailing 'break' is actually return, then /any/ break is non-trailing
     if (node is BreakStatementSyntax && (trailing == null || !node.GetLocation().Equals(trailing.GetLocation())))
     {
         return(true);
     }
     return(node.DescendantNodes().Any(n => HasNonTrailingBreaks(n, trailing)));
 }
コード例 #14
0
 public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
 {
     if (currentForNode == null)
     {
         return(node);
     }
     breakStatements[currentForNode].Add(node);
     return(node);
 }
コード例 #15
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            if (currentState.NextState.BreakState == null)
            {
                throw new Exception();
            }

            CloseTo(currentState, currentState.NextState.BreakState);
        }
コード例 #16
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (entryPoint.IsMethodLevel() && node.IsParent <AnonymousFunctionExpressionSyntax>())
     {
         return;
     }
     noscounter++;
     base.VisitBreakStatement(node);
 }
コード例 #17
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            SyntaxNode c = node;

            if (!IsSwitchBreak(c))
            {
                IndentWriteLine("break");
            }
        }
コード例 #18
0
        public void AnalyzeNode(SyntaxNode node, SemanticModel semanticModel, Action <Diagnostic> addDiagnostic, AnalyzerOptions options, CancellationToken cancellationToken)
        {
            BreakStatementSyntax breakNode = (BreakStatementSyntax)node;

            if (!IsInSwitch(breakNode))
            {
                addDiagnostic(Diagnostic.Create(Rule, node.GetLocation()));
            }
        }
コード例 #19
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (breakTargets.Count > 0)
     {
         var target = breakTargets.Peek();
         Connect(curNode, target, ControlFlowEdgeType.Jump);
         curNode = target;
     }
     curNode = builder.CreateEndNode(node);
 }
コード例 #20
0
ファイル: Loops.cs プロジェクト: EkardNT/Roslyn
 public BoundBreakStatement BindBreak(BreakStatementSyntax node)
 {
     var target = this.context.GetBreakLabel();
     if (target == null)
     {
         Error(ErrorCode.ERR_NoBreakOrCont, node);
         return BoundBreakStatement.AsError(node, null);
     }
     return new BoundBreakStatement(node, target);
 }
コード例 #21
0
ファイル: CsToDsl_Statement.cs プロジェクト: modi0012/Cs2Lua
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            MethodInfo mi = m_MethodInfoStack.Peek();

            if (m_ContinueInfoStack.Count > 0)
            {
                var ci = m_ContinueInfoStack.Peek();
                if (ci.IsIgnoreBreak)
                {
                    return;
                }
                if (ci.HaveContinue)
                {
                    CodeBuilder.AppendFormat("{0}{1} = true;", GetIndentString(), ci.BreakFlagVarName);
                    CodeBuilder.AppendLine();
                }

                bool isLastNode = IsLastNodeOfFor(node);
                if (!isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}block{{", GetIndentString());
                    CodeBuilder.AppendLine();
                }

                if (mi.TryUsingLayer > 0 && mi.TryCatchUsingOrLoopSwitchStack.Peek())
                {
                    var returnAnalysis = mi.TempReturnAnalysisStack.Peek();
                    if (returnAnalysis.ExistReturnInLoopOrSwitch || null == returnAnalysis.RetValVar)
                    {
                        //return(3)代表是tryusing块里的break语句
                        CodeBuilder.AppendFormat("{0}return(3);", GetIndentString());
                        CodeBuilder.AppendLine();
                    }
                    else
                    {
                        //可以不使用函数对象实现的try块,不能使用return语句,换成变量赋值与break
                        CodeBuilder.AppendFormat("{0}{1} = 3;", GetIndentString(), returnAnalysis.RetValVar);
                        CodeBuilder.AppendLine();
                        CodeBuilder.AppendFormat("{0}break;", GetIndentString());
                        CodeBuilder.AppendLine();
                    }
                }
                else
                {
                    CodeBuilder.AppendFormat("{0}break;", GetIndentString());
                    CodeBuilder.AppendLine();
                }

                if (!isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}}};", GetIndentString());
                    CodeBuilder.AppendLine();
                }
            }
        }
コード例 #22
0
            public override void VisitBreakStatement(BreakStatementSyntax node)
            {
                var remainderBlock = new BasicBlock(_currentBlock.Terminator);

                if (_breakBlock == null)
                {
                    throw new SyntaxErrorException("Break without enclosing loop or switch encountered");
                }
                _currentBlock.Terminator = new JumpTerminator(_breakBlock);
                _currentBlock            = remainderBlock;
            }
コード例 #23
0
ファイル: Statement.cs プロジェクト: binarybird/Cascade
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            if (!PreVisit(node))
            {
                return;
            }

            base.VisitBreakStatement(node);

            PostVisit(node);
        }
コード例 #24
0
        private static bool IsInSwitch(BreakStatementSyntax node)
        {
            SyntaxNode ancestor = node.FirstAncestorOrSelf <SyntaxNode>(e =>
                                                                        e.IsKind(SyntaxKind.SwitchStatement) ||
                                                                        e.IsKind(SyntaxKind.WhileStatement) ||
                                                                        e.IsKind(SyntaxKind.DoStatement) ||
                                                                        e.IsKind(SyntaxKind.ForStatement) ||
                                                                        e.IsKind(SyntaxKind.ForEachStatement));

            return(ancestor != null && ancestor.IsKind(SyntaxKind.SwitchStatement));
        }
コード例 #25
0
        private Block BuildBreakStatement(BreakStatementSyntax breakStatement, Block currentBlock)
        {
            if (BreakTarget.Count == 0)
            {
                throw new InvalidOperationException("break; outside a loop");
            }

            var target = BreakTarget.Peek();

            return(CreateJumpBlock(breakStatement, target, currentBlock));
        }
コード例 #26
0
ファイル: Loops.cs プロジェクト: sperling/cskarp
        public BoundBreakStatement BindBreak(BreakStatementSyntax node)
        {
            var target = this.context.GetBreakLabel();

            if (target == null)
            {
                Error(ErrorCode.ERR_NoBreakOrCont, node);
                return(BoundBreakStatement.AsError(node, null));
            }
            return(new BoundBreakStatement(node, target));
        }
コード例 #27
0
ファイル: LLOC.cs プロジェクト: smartshark/OpenStaticAnalyzer
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (entryNode is AnonymousFunctionExpressionSyntax && embeddedNode is AnonymousFunctionExpressionSyntax)
     {
         return;
     }
     if (_weComeFromMethod && _weInAnonymousMethod)
     {
         return;
     }
     InsertLLOCMap(node.GetLocation());
     base.VisitBreakStatement(node);
 }
コード例 #28
0
 public override void Initialize(AnalysisContext context)
 {
     context.RegisterSyntaxNodeAction(
         c =>
     {
         BreakStatementSyntax breakNode = (BreakStatementSyntax)c.Node;
         if (!IsInSwitch(breakNode))
         {
             c.ReportDiagnostic(Diagnostic.Create(Rule, breakNode.GetLocation()));
         }
     },
         SyntaxKind.BreakStatement);
 }
コード例 #29
0
        public static void Go(ScalaWriter writer, BreakStatementSyntax statement)
        {
            //Traverse up to figure out what we're breaking from.  If we're breaking from a loop, it's fine.  However, if we're breaking from a switch statement, throw an error as we don't allow this except directly inside of a case block.
            var breakingFrom = statement.Parent;

            while (!(breakingFrom is WhileStatementSyntax || breakingFrom is ForStatementSyntax || breakingFrom is DoStatementSyntax || breakingFrom is ForEachStatementSyntax))
            {
                if (breakingFrom is SwitchStatementSyntax)
                {
                    throw new Exception("Cannot \"break\" from within a switch statement except directly inside of a case statement. " + Utility.Descriptor(statement));
                }

                breakingFrom = breakingFrom.Parent;
            }

            writer.WriteLine("CsScala.csbreak.break;");
        }
コード例 #30
0
        public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
        {
            node = (BreakStatementSyntax)base.VisitBreakStatement(node);
            if (node == null)
            {
                return(node);
            }

            bool inSwitch = IsSwitchParent(node);

            if (inSwitch)
            {
                return(null);
            }

            return(node);
        }
コード例 #31
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            MethodInfo mi = m_MethodInfoStack.Peek();

            if (m_ContinueInfoStack.Count > 0)
            {
                var ci = m_ContinueInfoStack.Peek();
                if (ci.IsIgnoreBreak)
                {
                    return;
                }
                if (ci.HaveContinue)
                {
                    CodeBuilder.AppendFormat("{0}{1} = true;", GetIndentString(), ci.BreakFlagVarName);
                    CodeBuilder.AppendLine();
                }

                bool isLastNode = IsLastNodeOfFor(node);
                if (isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}block{{", GetIndentString());
                    CodeBuilder.AppendLine();
                }

                if (mi.TryCatchUsingLayer > 0 && mi.TryCatchUsingOrLoopSwitchStack.Peek())
                {
                    CodeBuilder.AppendFormat("{0}return(3);", GetIndentString());
                    CodeBuilder.AppendLine();
                }
                else
                {
                    CodeBuilder.AppendFormat("{0}break;", GetIndentString());
                    CodeBuilder.AppendLine();
                }

                if (isLastNode)
                {
                    CodeBuilder.AppendFormat("{0}}};", GetIndentString());
                    CodeBuilder.AppendLine();
                }
            }
        }
 internal bool HasNonTrailingBreaks(SyntaxNode node, BreakStatementSyntax trailing)
 {
     //if our trailing 'break' is actually return, then /any/ break is non-trailing
     if (node is BreakStatementSyntax && (trailing == null || !node.GetLocation().Equals(trailing.GetLocation())))
         return true;
     return node.DescendantNodes().Any(n => HasNonTrailingBreaks(n, trailing));
 }
コード例 #33
0
 public BoundBreakStatement(BreakStatementSyntax syntax)
     : base(BoundNodeKind.BreakStatement, syntax)
 {
 }
コード例 #34
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitBreakStatement(BreakStatementSyntax node)
 {
     this.OnNodeVisited(node, this.type.IsInstanceOfType(node));
     base.VisitBreakStatement(node);
 }
コード例 #35
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitBreakStatement(BreakStatementSyntax node)
 {
     this.OnNodeVisited(node);
     if (!this.traverseRootOnly) base.VisitBreakStatement(node);
 }
コード例 #36
0
        private static bool IsInSwitch(BreakStatementSyntax node)
        {
            var ancestor = node.FirstAncestorOrSelf<SyntaxNode>(e => LoopOrSwitch.Contains(e.Kind()));

            return ancestor != null && ancestor.IsKind(SyntaxKind.SwitchStatement);
        }
コード例 #37
0
 public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
 {
     _output.WriteLine(node.BreakKeyword, "break;");
     return node;
 }
コード例 #38
0
 public BoundStatement BindBreak(BreakStatementSyntax node, DiagnosticBag diagnostics)
 {
     var target = this.BreakLabel;
     if ((object)target == null)
     {
         Error(diagnostics, ErrorCode.ERR_NoBreakOrCont, node);
         return new BoundBadStatement(node, ImmutableArray<BoundNode>.Empty, hasErrors: true);
     }
     return new BoundBreakStatement(node, target);
 }
コード例 #39
0
 public static void Go(OutputWriter writer, BreakStatementSyntax statement)
 {
     writer.WriteLine("break;");
 }
コード例 #40
0
 public virtual void VisitBreakStatement(BreakStatementSyntax node)
 {
     DefaultVisit(node);
 }
コード例 #41
0
 public override SyntaxNode VisitBreakStatement(BreakStatementSyntax node)
 {
     return SyntaxFactory.EmptyStatement();
 }
コード例 #42
0
ファイル: Function.cs プロジェクト: VendanAndrews/ls2csc
 public void Flatten(BreakStatementSyntax node, List<FlatStatement> instructions)
 {
     if (string.IsNullOrEmpty(this.CurrentBreakLabel))
     {
         throw new NotSupportedException("break without context");
     }
     instructions.Add(FlatStatement.JMP(FlatOperand.LabelRef(CurrentBreakLabel)));
 }
コード例 #43
0
        public void VisitBreakStatement(BreakStatementSyntax node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            node.Validate();

            WriteLeadingTrivia(node);

            _writer.WriteIndent();
            _writer.WriteKeyword(PrinterKeyword.Break);
            _writer.EndStatement();

            WriteTrailingTrivia(node);
        }
コード例 #44
0
 public BoundDiscardStatement(BreakStatementSyntax syntax)
     : base(BoundNodeKind.DiscardStatement, syntax)
 {
 }
コード例 #45
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     if (breakTargets.Count > 0)
     {
         var target = breakTargets.Peek();
         Connect(curNode, target, ControlFlowEdgeType.Jump);
         curNode = target;
     }
     curNode = builder.CreateEndNode(node);
 }
コード例 #46
0
        public BreakStatementTranslation(BreakStatementSyntax syntax, SyntaxTranslation parent) : base(syntax, parent)
        {

        }
コード例 #47
0
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     Fail = true;
 }
コード例 #48
0
ファイル: Binder.Statements.cs プロジェクト: Samana/HlslTools
 private BoundStatement BindBreakStatement(BreakStatementSyntax syntax)
 {
     return new BoundBreakStatement();
 }
コード例 #49
0
        public override void VisitBreakStatement(BreakStatementSyntax node)
        {
            if (currentState.NextState.BreakState == null)
                throw new Exception();

            CloseTo(currentState, currentState.NextState.BreakState);
        }
コード例 #50
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 /// <remarks>
 /// Statements will cause an AST walker to be created, thus we don't need to go further deeper in the
 /// tree by visiting the node.
 /// </remarks>
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     this.VisitStatement(node);
 }
コード例 #51
0
ファイル: Syntax.cs プロジェクト: modulexcite/CSharpSyntax
        public static BreakStatementSyntax BreakStatement()
        {
            var result = new BreakStatementSyntax();

            return result;
        }
コード例 #52
0
ファイル: MethodWalker.cs プロジェクト: chemix-lunacy/Skyling
 public override void VisitBreakStatement(BreakStatementSyntax node)
 {
     this.Logic.Add(this.nodeFactory.CreateBreak());
 }