public override object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data) { if (ifElseStatement.HasElseStatements) { foreach (Statement stm in ifElseStatement.FalseStatement) { if (stm is BlockStatement && stm.Children.Count == 0) ifElseStatement.FalseStatement = null; } } if (ifElseStatement.HasElseIfSections) { List<ElseIfSection> elseIfSections = new List<ElseIfSection>(); elseIfSections.AddRange(ifElseStatement.ElseIfSections); foreach (ElseIfSection stm in ifElseStatement.ElseIfSections) { if (stm.EmbeddedStatement is BlockStatement && stm.EmbeddedStatement.Children.Count == 0) elseIfSections.Remove(stm); } ifElseStatement.ElseIfSections = elseIfSections; } if (!ifElseStatement.HasElseIfSections && !ifElseStatement.HasElseStatements) { foreach (Statement stm in ifElseStatement.TrueStatement) { if (stm is BlockStatement && stm.Children.Count == 0) RemoveCurrentNode(); } } return base.TrackedVisitIfElseStatement(ifElseStatement, data); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { BinaryOperatorExpression boe = ifElseStatement.Condition as BinaryOperatorExpression; // the BinaryOperatorExpression might be inside a ParenthesizedExpression if (boe == null && ifElseStatement.Condition is ParenthesizedExpression) { boe = (ifElseStatement.Condition as ParenthesizedExpression).Expression as BinaryOperatorExpression; } if (ifElseStatement.ElseIfSections.Count == 0 && ifElseStatement.FalseStatement.Count == 0 && ifElseStatement.TrueStatement.Count == 1 && boe != null && boe.Op == BinaryOperatorType.InEquality && (IsNullLiteralExpression(boe.Left) || IsNullLiteralExpression(boe.Right)) ) { string ident = GetPossibleEventName(boe.Left) ?? GetPossibleEventName(boe.Right); ExpressionStatement se = ifElseStatement.TrueStatement[0] as ExpressionStatement; if (se == null) { BlockStatement block = ifElseStatement.TrueStatement[0] as BlockStatement; if (block != null && block.Children.Count == 1) { se = block.Children[0] as ExpressionStatement; } } if (ident != null && se != null) { InvocationExpression ie = se.Expression as InvocationExpression; if (ie != null && GetPossibleEventName(ie.TargetObject) == ident) { ReplaceCurrentNode(new RaiseEventStatement(ident, ie.Arguments)); } } } return base.VisitIfElseStatement(ifElseStatement, data); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { if (ifElseStatement.HasElseIfSections) UnlockWith(ifElseStatement.ElseIfSections[0]); return base.VisitIfElseStatement(ifElseStatement, data); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { base.VisitIfElseStatement(ifElseStatement, data); BinaryOperatorExpression boe = ifElseStatement.Condition as BinaryOperatorExpression; if (ifElseStatement.ElseIfSections.Count == 0 && ifElseStatement.FalseStatement.Count == 0 && ifElseStatement.TrueStatement.Count == 1 && boe != null && boe.Op == BinaryOperatorType.ReferenceInequality && (IsNullLiteralExpression(boe.Left) || IsNullLiteralExpression(boe.Right)) ) { IdentifierExpression ident = boe.Left as IdentifierExpression; if (ident == null) ident = boe.Right as IdentifierExpression; ExpressionStatement se = ifElseStatement.TrueStatement[0] as ExpressionStatement; if (se == null) { BlockStatement block = ifElseStatement.TrueStatement[0] as BlockStatement; if (block != null && block.Children.Count == 1) { se = block.Children[0] as ExpressionStatement; } } if (ident != null && se != null) { InvocationExpression ie = se.Expression as InvocationExpression; if (ie != null && ie.TargetObject is IdentifierExpression && (ie.TargetObject as IdentifierExpression).Identifier == ident.Identifier) { ReplaceCurrentNode(new RaiseEventStatement(ident.Identifier, ie.Arguments)); } } } return null; }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { var condition = ifElseStatement.Condition as BinaryOperatorExpression; if(condition!=null && condition.Op!= BinaryOperatorType.Equality) //Tim: mmm, this achievements needs more testing because this doens't work right UnlockWith(ifElseStatement); return base.VisitIfElseStatement(ifElseStatement, data); }
public override void Execute(EditorContext context) { var conditionExpr = BuildCondition(this.targetExpr); if (conditionExpr == null) return; var ifExpr = new IfElseStatement(conditionExpr, new BlockStatement()); context.Editor.InsertCodeBefore(this.currentExpr, ifExpr); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { UnaryOperatorExpression expr= ifElseStatement.Condition as UnaryOperatorExpression; if (expr != null) { if (expr.Op == UnaryOperatorType.Not) UnlockWith(ifElseStatement); } return base.VisitIfElseStatement(ifElseStatement, data); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { base.VisitIfElseStatement(ifElseStatement, data); if (ifElseStatement.FalseStatement.Count == 1 && ifElseStatement.FalseStatement[0] is BlockStatement && ifElseStatement.FalseStatement[0].Children.Count == 0) { ifElseStatement.FalseStatement.Clear(); } return null; }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { foreach (Statement statement in ifElseStatement.TrueStatement) { if (statement is IfElseStatement) UnlockWith(ifElseStatement); } foreach (Statement statement in ifElseStatement.FalseStatement) { if (statement is IfElseStatement) UnlockWith(ifElseStatement); } return base.VisitIfElseStatement(ifElseStatement, data); }
public override object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data) { // Convert condition. AppendIndented("if "); ifElseStatement.Condition.AcceptVisitor(this, data); Append(":"); AppendLine(); // Convert true statements. IncreaseIndent(); foreach (Statement statement in ifElseStatement.TrueStatement) { statement.AcceptVisitor(this, data); } DecreaseIndent(); // Convert else if sections. if (ifElseStatement.HasElseIfSections) { foreach (ElseIfSection elseIfSection in ifElseStatement.ElseIfSections) { elseIfSection.AcceptVisitor(this, data); } } // Convert false statements. if (ifElseStatement.HasElseStatements) { AppendIndentedLine("else:"); IncreaseIndent(); foreach (Statement statement in ifElseStatement.FalseStatement) { statement.AcceptVisitor(this, data); } DecreaseIndent(); } return null; }
public virtual object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { throw CreateException(ifElseStatement); }
private bool IsMatch(IfElseStatement left, IfElseStatement right) { return true; }
void EmbeddedStatement( #line 2755 "VBNET.ATG" out Statement statement) { #line 2757 "VBNET.ATG" Statement embeddedStatement = null; statement = null; Expression expr = null; string name = String.Empty; List<Expression> p = null; if (la.kind == 107) { lexer.NextToken(); #line 2763 "VBNET.ATG" ExitType exitType = ExitType.None; switch (la.kind) { case 195: { lexer.NextToken(); #line 2765 "VBNET.ATG" exitType = ExitType.Sub; break; } case 114: { lexer.NextToken(); #line 2767 "VBNET.ATG" exitType = ExitType.Function; break; } case 171: { lexer.NextToken(); #line 2769 "VBNET.ATG" exitType = ExitType.Property; break; } case 95: { lexer.NextToken(); #line 2771 "VBNET.ATG" exitType = ExitType.Do; break; } case 111: { lexer.NextToken(); #line 2773 "VBNET.ATG" exitType = ExitType.For; break; } case 203: { lexer.NextToken(); #line 2775 "VBNET.ATG" exitType = ExitType.Try; break; } case 216: { lexer.NextToken(); #line 2777 "VBNET.ATG" exitType = ExitType.While; break; } case 182: { lexer.NextToken(); #line 2779 "VBNET.ATG" exitType = ExitType.Select; break; } default: SynErr(273); break; } #line 2781 "VBNET.ATG" statement = new ExitStatement(exitType); } else if (la.kind == 203) { TryStatement( #line 2782 "VBNET.ATG" out statement); } else if (la.kind == 76) { lexer.NextToken(); #line 2783 "VBNET.ATG" ContinueType continueType = ContinueType.None; if (la.kind == 95 || la.kind == 111 || la.kind == 216) { if (la.kind == 95) { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.Do; } else if (la.kind == 111) { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.For; } else { lexer.NextToken(); #line 2783 "VBNET.ATG" continueType = ContinueType.While; } } #line 2783 "VBNET.ATG" statement = new ContinueStatement(continueType); } else if (la.kind == 200) { lexer.NextToken(); if (StartOf(29)) { Expr( #line 2785 "VBNET.ATG" out expr); } #line 2785 "VBNET.ATG" statement = new ThrowStatement(expr); } else if (la.kind == 180) { lexer.NextToken(); if (StartOf(29)) { Expr( #line 2787 "VBNET.ATG" out expr); } #line 2787 "VBNET.ATG" statement = new ReturnStatement(expr); } else if (la.kind == 196) { lexer.NextToken(); Expr( #line 2789 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2789 "VBNET.ATG" out embeddedStatement); Expect(100); Expect(196); #line 2790 "VBNET.ATG" statement = new LockStatement(expr, embeddedStatement); } else if (la.kind == 174) { lexer.NextToken(); Identifier(); #line 2792 "VBNET.ATG" name = t.val; if (la.kind == 25) { lexer.NextToken(); if (StartOf(37)) { ArgumentList( #line 2793 "VBNET.ATG" out p); } Expect(26); } #line 2795 "VBNET.ATG" statement = new RaiseEventStatement(name, p); } else if (la.kind == 218) { WithStatement( #line 2798 "VBNET.ATG" out statement); } else if (la.kind == 43) { lexer.NextToken(); #line 2800 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2801 "VBNET.ATG" out expr); Expect(12); Expr( #line 2801 "VBNET.ATG" out handlerExpr); #line 2803 "VBNET.ATG" statement = new AddHandlerStatement(expr, handlerExpr); } else if (la.kind == 178) { lexer.NextToken(); #line 2806 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2807 "VBNET.ATG" out expr); Expect(12); Expr( #line 2807 "VBNET.ATG" out handlerExpr); #line 2809 "VBNET.ATG" statement = new RemoveHandlerStatement(expr, handlerExpr); } else if (la.kind == 216) { lexer.NextToken(); Expr( #line 2812 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2813 "VBNET.ATG" out embeddedStatement); Expect(100); Expect(216); #line 2815 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); } else if (la.kind == 95) { lexer.NextToken(); #line 2820 "VBNET.ATG" ConditionType conditionType = ConditionType.None; if (la.kind == 209 || la.kind == 216) { WhileOrUntil( #line 2823 "VBNET.ATG" out conditionType); Expr( #line 2823 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2824 "VBNET.ATG" out embeddedStatement); Expect(138); #line 2827 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, ConditionPosition.Start); } else if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( #line 2834 "VBNET.ATG" out embeddedStatement); Expect(138); if (la.kind == 209 || la.kind == 216) { WhileOrUntil( #line 2835 "VBNET.ATG" out conditionType); Expr( #line 2835 "VBNET.ATG" out expr); } #line 2837 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); } else SynErr(274); } else if (la.kind == 111) { lexer.NextToken(); #line 2842 "VBNET.ATG" Expression group = null; TypeReference typeReference; string typeName; Location startLocation = t.Location; if (la.kind == 97) { lexer.NextToken(); LoopControlVariable( #line 2849 "VBNET.ATG" out typeReference, out typeName); Expect(125); Expr( #line 2850 "VBNET.ATG" out group); EndOfStmt(); Block( #line 2851 "VBNET.ATG" out embeddedStatement); Expect(149); if (StartOf(29)) { Expr( #line 2852 "VBNET.ATG" out expr); } #line 2854 "VBNET.ATG" statement = new ForeachStatement(typeReference, typeName, group, embeddedStatement, expr); statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } else if (StartOf(38)) { #line 2865 "VBNET.ATG" Expression start = null; Expression end = null; Expression step = null; Expression variableExpr = null; Expression nextExpr = null; List<Expression> nextExpressions = null; if ( #line 2872 "VBNET.ATG" IsLoopVariableDeclaration()) { LoopControlVariable( #line 2873 "VBNET.ATG" out typeReference, out typeName); } else { #line 2875 "VBNET.ATG" typeReference = null; typeName = null; SimpleExpr( #line 2876 "VBNET.ATG" out variableExpr); } Expect(10); Expr( #line 2878 "VBNET.ATG" out start); Expect(201); Expr( #line 2878 "VBNET.ATG" out end); if (la.kind == 190) { lexer.NextToken(); Expr( #line 2878 "VBNET.ATG" out step); } EndOfStmt(); Block( #line 2879 "VBNET.ATG" out embeddedStatement); Expect(149); if (StartOf(29)) { Expr( #line 2882 "VBNET.ATG" out nextExpr); #line 2884 "VBNET.ATG" nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); while (la.kind == 12) { lexer.NextToken(); Expr( #line 2887 "VBNET.ATG" out nextExpr); #line 2887 "VBNET.ATG" nextExpressions.Add(nextExpr); } } #line 2890 "VBNET.ATG" statement = new ForNextStatement { TypeReference = typeReference, VariableName = typeName, LoopVariableExpression = variableExpr, Start = start, End = end, Step = step, EmbeddedStatement = embeddedStatement, NextExpressions = nextExpressions }; } else SynErr(275); } else if (la.kind == 105) { lexer.NextToken(); Expr( #line 2903 "VBNET.ATG" out expr); #line 2903 "VBNET.ATG" statement = new ErrorStatement(expr); } else if (la.kind == 176) { lexer.NextToken(); #line 2905 "VBNET.ATG" bool isPreserve = false; if (la.kind == 169) { lexer.NextToken(); #line 2905 "VBNET.ATG" isPreserve = true; } ReDimClause( #line 2906 "VBNET.ATG" out expr); #line 2908 "VBNET.ATG" ReDimStatement reDimStatement = new ReDimStatement(isPreserve); statement = reDimStatement; SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); while (la.kind == 12) { lexer.NextToken(); ReDimClause( #line 2912 "VBNET.ATG" out expr); #line 2913 "VBNET.ATG" SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); } } else if (la.kind == 104) { lexer.NextToken(); Expr( #line 2917 "VBNET.ATG" out expr); #line 2919 "VBNET.ATG" EraseStatement eraseStatement = new EraseStatement(); if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr);} while (la.kind == 12) { lexer.NextToken(); Expr( #line 2922 "VBNET.ATG" out expr); #line 2922 "VBNET.ATG" if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr); } } #line 2923 "VBNET.ATG" statement = eraseStatement; } else if (la.kind == 191) { lexer.NextToken(); #line 2925 "VBNET.ATG" statement = new StopStatement(); } else if ( #line 2927 "VBNET.ATG" la.kind == Tokens.If) { Expect(122); #line 2928 "VBNET.ATG" Location ifStartLocation = t.Location; Expr( #line 2928 "VBNET.ATG" out expr); if (la.kind == 199) { lexer.NextToken(); } if (la.kind == 1 || la.kind == 11) { EndOfStmt(); Block( #line 2931 "VBNET.ATG" out embeddedStatement); #line 2933 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); ifStatement.StartLocation = ifStartLocation; Location elseIfStart; while (la.kind == 99 || #line 2939 "VBNET.ATG" IsElseIf()) { if ( #line 2939 "VBNET.ATG" IsElseIf()) { Expect(98); #line 2939 "VBNET.ATG" elseIfStart = t.Location; Expect(122); } else { lexer.NextToken(); #line 2940 "VBNET.ATG" elseIfStart = t.Location; } #line 2942 "VBNET.ATG" Expression condition = null; Statement block = null; Expr( #line 2943 "VBNET.ATG" out condition); if (la.kind == 199) { lexer.NextToken(); } EndOfStmt(); Block( #line 2944 "VBNET.ATG" out block); #line 2946 "VBNET.ATG" ElseIfSection elseIfSection = new ElseIfSection(condition, block); elseIfSection.StartLocation = elseIfStart; elseIfSection.EndLocation = t.Location; elseIfSection.Parent = ifStatement; ifStatement.ElseIfSections.Add(elseIfSection); } if (la.kind == 98) { lexer.NextToken(); EndOfStmt(); Block( #line 2955 "VBNET.ATG" out embeddedStatement); #line 2957 "VBNET.ATG" ifStatement.FalseStatement.Add(embeddedStatement); } Expect(100); Expect(122); #line 2961 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else if (StartOf(39)) { #line 2966 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr); ifStatement.StartLocation = ifStartLocation; SingleLineStatementList( #line 2969 "VBNET.ATG" ifStatement.TrueStatement); if (la.kind == 98) { lexer.NextToken(); if (StartOf(39)) { SingleLineStatementList( #line 2972 "VBNET.ATG" ifStatement.FalseStatement); } } #line 2974 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else SynErr(276); } else if (la.kind == 182) { lexer.NextToken(); if (la.kind == 61) { lexer.NextToken(); } Expr( #line 2977 "VBNET.ATG" out expr); EndOfStmt(); #line 2978 "VBNET.ATG" List<SwitchSection> selectSections = new List<SwitchSection>(); Statement block = null; while (la.kind == 61) { #line 2982 "VBNET.ATG" List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; lexer.NextToken(); CaseClauses( #line 2983 "VBNET.ATG" out caseClauses); if ( #line 2983 "VBNET.ATG" IsNotStatementSeparator()) { lexer.NextToken(); } EndOfStmt(); #line 2985 "VBNET.ATG" SwitchSection selectSection = new SwitchSection(caseClauses); selectSection.StartLocation = caseLocation; Block( #line 2988 "VBNET.ATG" out block); #line 2990 "VBNET.ATG" selectSection.Children = block.Children; selectSection.EndLocation = t.EndLocation; selectSections.Add(selectSection); } #line 2996 "VBNET.ATG" statement = new SwitchStatement(expr, selectSections); Expect(100); Expect(182); } else if (la.kind == 157) { #line 2999 "VBNET.ATG" OnErrorStatement onErrorStatement = null; OnErrorStatement( #line 3000 "VBNET.ATG" out onErrorStatement); #line 3000 "VBNET.ATG" statement = onErrorStatement; } else if (la.kind == 119) { #line 3001 "VBNET.ATG" GotoStatement goToStatement = null; GotoStatement( #line 3002 "VBNET.ATG" out goToStatement); #line 3002 "VBNET.ATG" statement = goToStatement; } else if (la.kind == 179) { #line 3003 "VBNET.ATG" ResumeStatement resumeStatement = null; ResumeStatement( #line 3004 "VBNET.ATG" out resumeStatement); #line 3004 "VBNET.ATG" statement = resumeStatement; } else if (StartOf(38)) { #line 3007 "VBNET.ATG" Expression val = null; AssignmentOperatorType op; bool mustBeAssignment = la.kind == Tokens.Plus || la.kind == Tokens.Minus || la.kind == Tokens.Not || la.kind == Tokens.Times; SimpleExpr( #line 3013 "VBNET.ATG" out expr); if (StartOf(40)) { AssignmentOperator( #line 3015 "VBNET.ATG" out op); Expr( #line 3015 "VBNET.ATG" out val); #line 3015 "VBNET.ATG" expr = new AssignmentExpression(expr, op, val); } else if (la.kind == 1 || la.kind == 11 || la.kind == 98) { #line 3016 "VBNET.ATG" if (mustBeAssignment) Error("error in assignment."); } else SynErr(277); #line 3019 "VBNET.ATG" // a field reference expression that stands alone is a // invocation expression without parantheses and arguments if(expr is MemberReferenceExpression || expr is IdentifierExpression) { expr = new InvocationExpression(expr); } statement = new ExpressionStatement(expr); } else if (la.kind == 60) { lexer.NextToken(); SimpleExpr( #line 3026 "VBNET.ATG" out expr); #line 3026 "VBNET.ATG" statement = new ExpressionStatement(expr); } else if (la.kind == 211) { lexer.NextToken(); #line 3028 "VBNET.ATG" Statement block; if ( #line 3029 "VBNET.ATG" Peek(1).kind == Tokens.As) { #line 3030 "VBNET.ATG" LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); VariableDeclarator( #line 3031 "VBNET.ATG" resourceAquisition.Variables); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 3033 "VBNET.ATG" resourceAquisition.Variables); } Block( #line 3035 "VBNET.ATG" out block); #line 3037 "VBNET.ATG" statement = new UsingStatement(resourceAquisition, block); } else if (StartOf(29)) { Expr( #line 3039 "VBNET.ATG" out expr); Block( #line 3040 "VBNET.ATG" out block); #line 3041 "VBNET.ATG" statement = new UsingStatement(new ExpressionStatement(expr), block); } else SynErr(278); Expect(100); Expect(211); } else if (StartOf(41)) { LocalDeclarationStatement( #line 3044 "VBNET.ATG" out statement); } else SynErr(279); }
protected override IEnumerable<string> GenerateCode (INRefactoryASTProvider astProvider, string indent, List<IBaseMember> includedMembers) { // Genereate Equals MethodDeclaration methodDeclaration = new MethodDeclaration (); methodDeclaration.Name = "Equals"; methodDeclaration.TypeReference = DomReturnType.Bool.ConvertToTypeReference (); methodDeclaration.Modifier = ICSharpCode.NRefactory.Ast.Modifiers.Public | ICSharpCode.NRefactory.Ast.Modifiers.Override; methodDeclaration.Body = new BlockStatement (); methodDeclaration.Parameters.Add (new ParameterDeclarationExpression (DomReturnType.Object.ConvertToTypeReference (), "obj")); IdentifierExpression paramId = new IdentifierExpression ("obj"); IfElseStatement ifStatement = new IfElseStatement (null); ifStatement.Condition = new BinaryOperatorExpression (paramId, BinaryOperatorType.Equality, new PrimitiveExpression (null)); ifStatement.TrueStatement.Add (new ReturnStatement (new PrimitiveExpression (false))); methodDeclaration.Body.AddChild (ifStatement); ifStatement = new IfElseStatement (null); List<Expression> arguments = new List<Expression> (); arguments.Add (new ThisReferenceExpression ()); arguments.Add (paramId); ifStatement.Condition = new InvocationExpression (new IdentifierExpression ("ReferenceEquals"), arguments); ifStatement.TrueStatement.Add (new ReturnStatement (new PrimitiveExpression (true))); methodDeclaration.Body.AddChild (ifStatement); ifStatement = new IfElseStatement (null); ifStatement.Condition = new BinaryOperatorExpression (new InvocationExpression (new MemberReferenceExpression (paramId, "GetType")), BinaryOperatorType.InEquality, new TypeOfExpression (new TypeReference (Options.EnclosingType.Name))); ifStatement.TrueStatement.Add (new ReturnStatement (new PrimitiveExpression (false))); methodDeclaration.Body.AddChild (ifStatement); LocalVariableDeclaration varDecl = new LocalVariableDeclaration (new DomReturnType (Options.EnclosingType).ConvertToTypeReference ()); varDecl.Variables.Add (new VariableDeclaration ("other", new CastExpression (varDecl.TypeReference, paramId, CastType.Cast))); methodDeclaration.Body.AddChild (varDecl); IdentifierExpression otherId = new IdentifierExpression ("other"); Expression binOp = null; foreach (IMember member in includedMembers) { Expression right = new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.Equality, new MemberReferenceExpression (otherId, member.Name)); if (binOp == null) { binOp = right; } else { binOp = new BinaryOperatorExpression (binOp, BinaryOperatorType.LogicalAnd, right); } } methodDeclaration.Body.AddChild (new ReturnStatement (binOp)); yield return astProvider.OutputNode (this.Options.Dom, methodDeclaration, indent); methodDeclaration = new MethodDeclaration (); methodDeclaration.Name = "GetHashCode"; methodDeclaration.TypeReference = DomReturnType.Int32.ConvertToTypeReference (); methodDeclaration.Modifier = ICSharpCode.NRefactory.Ast.Modifiers.Public | ICSharpCode.NRefactory.Ast.Modifiers.Override; methodDeclaration.Body = new BlockStatement (); binOp = null; foreach (IMember member in includedMembers) { Expression right; right = new InvocationExpression (new MemberReferenceExpression (new IdentifierExpression (member.Name), "GetHashCode")); IType type = Options.Dom.SearchType (Options.Document.ParsedDocument.CompilationUnit, member, member.ReturnType); if (type != null && type.ClassType != MonoDevelop.Projects.Dom.ClassType.Struct&& type.ClassType != MonoDevelop.Projects.Dom.ClassType.Enum) right = new ParenthesizedExpression (new ConditionalExpression (new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.InEquality, new PrimitiveExpression (null)), right, new PrimitiveExpression (0))); if (binOp == null) { binOp = right; } else { binOp = new BinaryOperatorExpression (binOp, BinaryOperatorType.ExclusiveOr, right); } } BlockStatement uncheckedBlock = new BlockStatement (); uncheckedBlock.AddChild (new ReturnStatement (binOp)); methodDeclaration.Body.AddChild (new UncheckedStatement (uncheckedBlock)); yield return astProvider.OutputNode (this.Options.Dom, methodDeclaration, indent); }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { CodeConditionStatement ifStmt = new CodeConditionStatement(); ifStmt.Condition = (CodeExpression)ifElseStatement.Condition.AcceptVisitor(this, data); codeStack.Push(ifStmt.TrueStatements); foreach (Statement stmt in ifElseStatement.TrueStatement) { if (stmt is BlockStatement) { stmt.AcceptChildren(this, data); } else { stmt.AcceptVisitor(this, data); } } codeStack.Pop(); codeStack.Push(ifStmt.FalseStatements); foreach (Statement stmt in ifElseStatement.FalseStatement) { if (stmt is BlockStatement) { stmt.AcceptChildren(this, data); } else { stmt.AcceptVisitor(this, data); } } codeStack.Pop(); AddStmt(ifStmt); return ifStmt; }
public void VisitStatement (IfElseStatement statement, MethodProperties meth) { meth.CyclometricComplexity++; //Process the conditions VisitExpression(((IfElseStatement)statement).Condition, meth); //Handle the true statement foreach(Statement innerStatement in ((IfElseStatement)statement).TrueStatement) VisitStatement(innerStatement, meth); //Handle the false statement foreach(Statement innerStatement in ((IfElseStatement)statement).FalseStatement) { meth.CyclometricComplexity++; VisitStatement(innerStatement, meth); } //Handle the ElseIf statements foreach(ElseIfSection elseIfSection in ((IfElseStatement)statement).ElseIfSections) VisitStatement(elseIfSection, meth); }
public virtual bool VisitIfElseStatement(IfElseStatement ifElseStatement, object d) { if ((ifElseStatement == null)) { return SetFailure(); } if ((d == null)) { return SetFailure(); } if ((ifElseStatement.Condition == null)) { return SetFailure(); } if ((ifElseStatement.TrueStatement == null)) { return SetFailure(); } if ((ifElseStatement.FalseStatement == null)) { return SetFailure(); } if ((ifElseStatement.ElseIfSections == null)) { return SetFailure(); } if(ifElseStatement.GetType() != d.GetType()) {return SetFailure();} var data = (IfElseStatement)d; if (!IsMatch(ifElseStatement, data)) { return SetFailure(); } ifElseStatement.Condition.AcceptVisitor(this, data.Condition); if (ifElseStatement.TrueStatement.Count == data.TrueStatement.Count) { for (int i=0; i<ifElseStatement.TrueStatement.Count;i++) { Statement o = ifElseStatement.TrueStatement[i]; if(o == null){return SetFailure();} if((bool)o.AcceptVisitor(this, data.TrueStatement[i]) == false) return SetFailure(); } } else { return SetFailure(); } if (ifElseStatement.FalseStatement.Count == data.FalseStatement.Count) { for (int i=0; i<ifElseStatement.FalseStatement.Count;i++) { Statement o = ifElseStatement.FalseStatement[i]; if(o == null){return SetFailure();} if((bool)o.AcceptVisitor(this, data.FalseStatement[i]) == false) return SetFailure(); } } else { return SetFailure(); } if (ifElseStatement.ElseIfSections.Count == data.ElseIfSections.Count) { for (int i=0; i<ifElseStatement.ElseIfSections.Count;i++) { ElseIfSection o = ifElseStatement.ElseIfSections[i]; if(o == null){return SetFailure();} if((bool)o.AcceptVisitor(this, data.ElseIfSections[i]) == false) return SetFailure(); } } else { return SetFailure(); } return true; }
public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { return base.VisitIfElseStatement(ifElseStatement, data); }
public object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { throw new NotImplementedException (); }
public virtual object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { Debug.Assert((ifElseStatement != null)); Debug.Assert((ifElseStatement.Condition != null)); Debug.Assert((ifElseStatement.TrueStatement != null)); Debug.Assert((ifElseStatement.FalseStatement != null)); Debug.Assert((ifElseStatement.ElseIfSections != null)); ifElseStatement.Condition.AcceptVisitor(this, data); foreach (Statement o in ifElseStatement.TrueStatement) { Debug.Assert(o != null); o.AcceptVisitor(this, data); } foreach (Statement o in ifElseStatement.FalseStatement) { Debug.Assert(o != null); o.AcceptVisitor(this, data); } foreach (ElseIfSection o in ifElseStatement.ElseIfSections) { Debug.Assert(o != null); o.AcceptVisitor(this, data); } return null; }
void EmbeddedStatement( #line 2297 "VBNET.ATG" out Statement statement) { #line 2299 "VBNET.ATG" Statement embeddedStatement = null; statement = null; Expression expr = null; string name = String.Empty; List<Expression> p = null; switch (la.kind) { case 94: { lexer.NextToken(); #line 2305 "VBNET.ATG" ExitType exitType = ExitType.None; switch (la.kind) { case 167: { lexer.NextToken(); #line 2307 "VBNET.ATG" exitType = ExitType.Sub; break; } case 100: { lexer.NextToken(); #line 2309 "VBNET.ATG" exitType = ExitType.Function; break; } case 146: { lexer.NextToken(); #line 2311 "VBNET.ATG" exitType = ExitType.Property; break; } case 83: { lexer.NextToken(); #line 2313 "VBNET.ATG" exitType = ExitType.Do; break; } case 98: { lexer.NextToken(); #line 2315 "VBNET.ATG" exitType = ExitType.For; break; } case 174: { lexer.NextToken(); #line 2317 "VBNET.ATG" exitType = ExitType.Try; break; } case 181: { lexer.NextToken(); #line 2319 "VBNET.ATG" exitType = ExitType.While; break; } case 155: { lexer.NextToken(); #line 2321 "VBNET.ATG" exitType = ExitType.Select; break; } default: SynErr(255); break; } #line 2323 "VBNET.ATG" statement = new ExitStatement(exitType); break; } case 174: { TryStatement( #line 2324 "VBNET.ATG" out statement); break; } case 187: { lexer.NextToken(); #line 2325 "VBNET.ATG" ContinueType continueType = ContinueType.None; if (la.kind == 83 || la.kind == 98 || la.kind == 181) { if (la.kind == 83) { lexer.NextToken(); #line 2325 "VBNET.ATG" continueType = ContinueType.Do; } else if (la.kind == 98) { lexer.NextToken(); #line 2325 "VBNET.ATG" continueType = ContinueType.For; } else { lexer.NextToken(); #line 2325 "VBNET.ATG" continueType = ContinueType.While; } } #line 2325 "VBNET.ATG" statement = new ContinueStatement(continueType); break; } case 171: { lexer.NextToken(); if (StartOf(27)) { Expr( #line 2327 "VBNET.ATG" out expr); } #line 2327 "VBNET.ATG" statement = new ThrowStatement(expr); break; } case 154: { lexer.NextToken(); if (StartOf(27)) { Expr( #line 2329 "VBNET.ATG" out expr); } #line 2329 "VBNET.ATG" statement = new ReturnStatement(expr); break; } case 168: { lexer.NextToken(); Expr( #line 2331 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2331 "VBNET.ATG" out embeddedStatement); Expect(88); Expect(168); #line 2332 "VBNET.ATG" statement = new LockStatement(expr, embeddedStatement); break; } case 149: { lexer.NextToken(); Identifier(); #line 2334 "VBNET.ATG" name = t.val; if (la.kind == 24) { lexer.NextToken(); if (StartOf(30)) { ArgumentList( #line 2335 "VBNET.ATG" out p); } Expect(25); } #line 2336 "VBNET.ATG" statement = new RaiseEventStatement(name, p); break; } case 182: { WithStatement( #line 2338 "VBNET.ATG" out statement); break; } case 42: { lexer.NextToken(); #line 2340 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2341 "VBNET.ATG" out expr); Expect(12); Expr( #line 2341 "VBNET.ATG" out handlerExpr); #line 2343 "VBNET.ATG" statement = new AddHandlerStatement(expr, handlerExpr); break; } case 152: { lexer.NextToken(); #line 2346 "VBNET.ATG" Expression handlerExpr = null; Expr( #line 2347 "VBNET.ATG" out expr); Expect(12); Expr( #line 2347 "VBNET.ATG" out handlerExpr); #line 2349 "VBNET.ATG" statement = new RemoveHandlerStatement(expr, handlerExpr); break; } case 181: { lexer.NextToken(); Expr( #line 2352 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2353 "VBNET.ATG" out embeddedStatement); Expect(88); Expect(181); #line 2355 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); break; } case 83: { lexer.NextToken(); #line 2360 "VBNET.ATG" ConditionType conditionType = ConditionType.None; if (la.kind == 177 || la.kind == 181) { WhileOrUntil( #line 2363 "VBNET.ATG" out conditionType); Expr( #line 2363 "VBNET.ATG" out expr); EndOfStmt(); Block( #line 2364 "VBNET.ATG" out embeddedStatement); Expect(118); #line 2367 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, ConditionPosition.Start); } else if (la.kind == 1 || la.kind == 13) { EndOfStmt(); Block( #line 2374 "VBNET.ATG" out embeddedStatement); Expect(118); if (la.kind == 177 || la.kind == 181) { WhileOrUntil( #line 2375 "VBNET.ATG" out conditionType); Expr( #line 2375 "VBNET.ATG" out expr); } #line 2377 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); } else SynErr(256); break; } case 98: { lexer.NextToken(); #line 2382 "VBNET.ATG" Expression group = null; TypeReference typeReference; string typeName; Location startLocation = t.Location; if (la.kind == 85) { lexer.NextToken(); LoopControlVariable( #line 2389 "VBNET.ATG" out typeReference, out typeName); Expect(109); Expr( #line 2390 "VBNET.ATG" out group); EndOfStmt(); Block( #line 2391 "VBNET.ATG" out embeddedStatement); Expect(128); if (StartOf(27)) { Expr( #line 2392 "VBNET.ATG" out expr); } #line 2394 "VBNET.ATG" statement = new ForeachStatement(typeReference, typeName, group, embeddedStatement, expr); statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } else if (StartOf(13)) { #line 2405 "VBNET.ATG" Expression start = null; Expression end = null; Expression step = null; Expression nextExpr = null;List<Expression> nextExpressions = null; LoopControlVariable( #line 2410 "VBNET.ATG" out typeReference, out typeName); Expect(11); Expr( #line 2411 "VBNET.ATG" out start); Expect(172); Expr( #line 2411 "VBNET.ATG" out end); if (la.kind == 162) { lexer.NextToken(); Expr( #line 2411 "VBNET.ATG" out step); } EndOfStmt(); Block( #line 2412 "VBNET.ATG" out embeddedStatement); Expect(128); if (StartOf(27)) { Expr( #line 2415 "VBNET.ATG" out nextExpr); #line 2415 "VBNET.ATG" nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); while (la.kind == 12) { lexer.NextToken(); Expr( #line 2416 "VBNET.ATG" out nextExpr); #line 2416 "VBNET.ATG" nextExpressions.Add(nextExpr); } } #line 2419 "VBNET.ATG" statement = new ForNextStatement(typeReference, typeName, start, end, step, embeddedStatement, nextExpressions); } else SynErr(257); break; } case 92: { lexer.NextToken(); Expr( #line 2423 "VBNET.ATG" out expr); #line 2423 "VBNET.ATG" statement = new ErrorStatement(expr); break; } case 151: { lexer.NextToken(); #line 2425 "VBNET.ATG" bool isPreserve = false; if (la.kind == 144) { lexer.NextToken(); #line 2425 "VBNET.ATG" isPreserve = true; } ReDimClause( #line 2426 "VBNET.ATG" out expr); #line 2428 "VBNET.ATG" ReDimStatement reDimStatement = new ReDimStatement(isPreserve); statement = reDimStatement; SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); while (la.kind == 12) { lexer.NextToken(); ReDimClause( #line 2432 "VBNET.ATG" out expr); #line 2433 "VBNET.ATG" SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); } break; } case 91: { lexer.NextToken(); Expr( #line 2437 "VBNET.ATG" out expr); #line 2438 "VBNET.ATG" List<Expression> arrays = new List<Expression>(); if (expr != null) { arrays.Add(expr);} EraseStatement eraseStatement = new EraseStatement(arrays); while (la.kind == 12) { lexer.NextToken(); Expr( #line 2443 "VBNET.ATG" out expr); #line 2443 "VBNET.ATG" if (expr != null) { arrays.Add(expr); } } #line 2444 "VBNET.ATG" statement = eraseStatement; break; } case 163: { lexer.NextToken(); #line 2446 "VBNET.ATG" statement = new StopStatement(); break; } case 106: { lexer.NextToken(); #line 2448 "VBNET.ATG" Location ifStartLocation = t.Location; Expr( #line 2448 "VBNET.ATG" out expr); if (la.kind == 170) { lexer.NextToken(); } if (la.kind == 1 || la.kind == 13) { EndOfStmt(); Block( #line 2451 "VBNET.ATG" out embeddedStatement); #line 2453 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); ifStatement.StartLocation = ifStartLocation; Location elseIfStart; while (la.kind == 87 || #line 2459 "VBNET.ATG" IsElseIf()) { if ( #line 2459 "VBNET.ATG" IsElseIf()) { Expect(86); #line 2459 "VBNET.ATG" elseIfStart = t.Location; Expect(106); } else { lexer.NextToken(); #line 2460 "VBNET.ATG" elseIfStart = t.Location; } #line 2462 "VBNET.ATG" Expression condition = null; Statement block = null; Expr( #line 2463 "VBNET.ATG" out condition); if (la.kind == 170) { lexer.NextToken(); } EndOfStmt(); Block( #line 2464 "VBNET.ATG" out block); #line 2466 "VBNET.ATG" ElseIfSection elseIfSection = new ElseIfSection(condition, block); elseIfSection.StartLocation = elseIfStart; elseIfSection.EndLocation = t.Location; elseIfSection.Parent = ifStatement; ifStatement.ElseIfSections.Add(elseIfSection); } if (la.kind == 86) { lexer.NextToken(); EndOfStmt(); Block( #line 2475 "VBNET.ATG" out embeddedStatement); #line 2477 "VBNET.ATG" ifStatement.FalseStatement.Add(embeddedStatement); } Expect(88); Expect(106); #line 2481 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else if (StartOf(36)) { #line 2486 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr); ifStatement.StartLocation = ifStartLocation; SingleLineStatementList( #line 2489 "VBNET.ATG" ifStatement.TrueStatement); if (la.kind == 86) { lexer.NextToken(); if (StartOf(36)) { SingleLineStatementList( #line 2492 "VBNET.ATG" ifStatement.FalseStatement); } } #line 2494 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else SynErr(258); break; } case 155: { lexer.NextToken(); if (la.kind == 57) { lexer.NextToken(); } Expr( #line 2497 "VBNET.ATG" out expr); EndOfStmt(); #line 2498 "VBNET.ATG" List<SwitchSection> selectSections = new List<SwitchSection>(); Statement block = null; while (la.kind == 57) { #line 2502 "VBNET.ATG" List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; lexer.NextToken(); CaseClauses( #line 2503 "VBNET.ATG" out caseClauses); if ( #line 2503 "VBNET.ATG" IsNotStatementSeparator()) { lexer.NextToken(); } EndOfStmt(); #line 2505 "VBNET.ATG" SwitchSection selectSection = new SwitchSection(caseClauses); selectSection.StartLocation = caseLocation; Block( #line 2508 "VBNET.ATG" out block); #line 2510 "VBNET.ATG" selectSection.Children = block.Children; selectSection.EndLocation = t.EndLocation; selectSections.Add(selectSection); } #line 2515 "VBNET.ATG" statement = new SwitchStatement(expr, selectSections); Expect(88); Expect(155); break; } case 135: { #line 2517 "VBNET.ATG" OnErrorStatement onErrorStatement = null; OnErrorStatement( #line 2518 "VBNET.ATG" out onErrorStatement); #line 2518 "VBNET.ATG" statement = onErrorStatement; break; } case 104: { #line 2519 "VBNET.ATG" GotoStatement goToStatement = null; GotoStatement( #line 2520 "VBNET.ATG" out goToStatement); #line 2520 "VBNET.ATG" statement = goToStatement; break; } case 153: { #line 2521 "VBNET.ATG" ResumeStatement resumeStatement = null; ResumeStatement( #line 2522 "VBNET.ATG" out resumeStatement); #line 2522 "VBNET.ATG" statement = resumeStatement; break; } case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 24: case 43: case 47: case 49: case 50: case 51: case 52: case 54: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 68: case 69: case 70: case 72: case 73: case 74: case 75: case 76: case 77: case 82: case 84: case 95: case 96: case 102: case 111: case 117: case 119: case 124: case 125: case 127: case 130: case 133: case 134: case 144: case 159: case 160: case 165: case 169: case 173: case 175: case 176: case 177: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 200: case 205: { #line 2525 "VBNET.ATG" Expression val = null; AssignmentOperatorType op; bool mustBeAssignment = la.kind == Tokens.Plus || la.kind == Tokens.Minus || la.kind == Tokens.Not || la.kind == Tokens.Times; SimpleExpr( #line 2531 "VBNET.ATG" out expr); if (StartOf(37)) { AssignmentOperator( #line 2533 "VBNET.ATG" out op); Expr( #line 2533 "VBNET.ATG" out val); #line 2533 "VBNET.ATG" expr = new AssignmentExpression(expr, op, val); } else if (la.kind == 1 || la.kind == 13 || la.kind == 86) { #line 2534 "VBNET.ATG" if (mustBeAssignment) Error("error in assignment."); } else SynErr(259); #line 2537 "VBNET.ATG" // a field reference expression that stands alone is a // invocation expression without parantheses and arguments if(expr is MemberReferenceExpression || expr is IdentifierExpression) { expr = new InvocationExpression(expr); } statement = new ExpressionStatement(expr); break; } case 56: { lexer.NextToken(); SimpleExpr( #line 2544 "VBNET.ATG" out expr); #line 2544 "VBNET.ATG" statement = new ExpressionStatement(expr); break; } case 189: { lexer.NextToken(); #line 2546 "VBNET.ATG" Statement block; if ( #line 2547 "VBNET.ATG" Peek(1).kind == Tokens.As) { #line 2548 "VBNET.ATG" LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); VariableDeclarator( #line 2549 "VBNET.ATG" resourceAquisition.Variables); while (la.kind == 12) { lexer.NextToken(); VariableDeclarator( #line 2551 "VBNET.ATG" resourceAquisition.Variables); } Block( #line 2553 "VBNET.ATG" out block); #line 2554 "VBNET.ATG" statement = new UsingStatement(resourceAquisition, block); } else if (StartOf(27)) { Expr( #line 2555 "VBNET.ATG" out expr); Block( #line 2556 "VBNET.ATG" out block); #line 2557 "VBNET.ATG" statement = new UsingStatement(new ExpressionStatement(expr), block); } else SynErr(260); Expect(88); Expect(189); break; } default: SynErr(261); break; } }
public virtual object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data) { return base.VisitIfElseStatement(ifElseStatement, data); }
IEnumerable<Ast.INode> TransformNode(Node node) { if (Options.NodeComments) { yield return MakeComment("// " + node.Description); } yield return new Ast.LabelStatement(node.Label); if (node is BasicBlock) { foreach(ILNode expr in ((BasicBlock)node).Body) { if (expr is ILLabel) { yield return new Ast.LabelStatement(((ILLabel)expr).Name); } else { Statement stmt = TransformExpressionToStatement((ILExpression)expr); if (stmt != null) { yield return stmt; } } } foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } Node fallThroughNode = ((BasicBlock)node).FallThroughBasicBlock; // If there is default branch and it is not the following node if (fallThroughNode != null) { yield return new Ast.GotoStatement(fallThroughNode.Label); } } else if (node is AcyclicGraph) { foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } } else if (node is Loop) { Ast.BlockStatement blockStatement = new Ast.BlockStatement(); blockStatement.Children.AddRange(TransformNodes(node.Childs)); yield return new Ast.ForStatement( null, null, null, blockStatement ); } else if (node is Block) { foreach(Ast.INode inode in TransformNodes(node.Childs)) { yield return inode; } } else if (node is Branch) { yield return new Ast.LabelStatement(((Branch)node).FirstBasicBlock.Label); Ast.BlockStatement trueBlock = new Ast.BlockStatement(); trueBlock.Children.Add(new Ast.GotoStatement(((Branch)node).TrueSuccessor.Label)); Ast.BlockStatement falseBlock = new Ast.BlockStatement(); falseBlock.Children.Add(new Ast.GotoStatement(((Branch)node).FalseSuccessor.Label)); Ast.IfElseStatement ifElseStmt = new Ast.IfElseStatement( MakeBranchCondition((Branch)node), trueBlock, falseBlock ); trueBlock.Parent = ifElseStmt; falseBlock.Parent = ifElseStmt; yield return ifElseStmt; } else if (node is ConditionalNode) { ConditionalNode conditionalNode = (ConditionalNode)node; yield return new Ast.LabelStatement(conditionalNode.Condition.FirstBasicBlock.Label); Ast.BlockStatement trueBlock = new Ast.BlockStatement(); // The block entry code trueBlock.Children.Add(new Ast.GotoStatement(conditionalNode.Condition.TrueSuccessor.Label)); // Sugested content trueBlock.Children.AddRange(TransformNode(conditionalNode.TrueBody)); Ast.BlockStatement falseBlock = new Ast.BlockStatement(); // The block entry code falseBlock.Children.Add(new Ast.GotoStatement(conditionalNode.Condition.FalseSuccessor.Label)); // Sugested content falseBlock.Children.AddRange(TransformNode(conditionalNode.FalseBody)); Ast.IfElseStatement ifElseStmt = new Ast.IfElseStatement( // Method bodies are swapped new Ast.UnaryOperatorExpression( new Ast.ParenthesizedExpression( MakeBranchCondition(conditionalNode.Condition) ), UnaryOperatorType.Not ), falseBlock, trueBlock ); trueBlock.Parent = ifElseStmt; falseBlock.Parent = ifElseStmt; yield return ifElseStmt; } else if (node is TryCatchNode) { TryCatchNode tryCachNode = ((TryCatchNode)node); Ast.BlockStatement tryBlock = new Ast.BlockStatement(); tryBlock.Children.AddRange(TransformNode(tryCachNode.Childs[0])); Ast.BlockStatement finallyBlock = null; if (tryCachNode.Childs[1].Childs.Count > 0) { finallyBlock = new Ast.BlockStatement(); finallyBlock.Children.AddRange(TransformNode(tryCachNode.Childs[1])); } List<Ast.CatchClause> ccs = new List<CatchClause>(); for (int i = 0; i < tryCachNode.Types.Count; i++) { Ast.BlockStatement catchBlock = new Ast.BlockStatement(); catchBlock.Children.AddRange(TransformNode(tryCachNode.Childs[i + 2])); Ast.CatchClause cc = new Ast.CatchClause( new Ast.TypeReference(tryCachNode.Types[i].FullName), "exception", catchBlock ); ccs.Add(cc); } Ast.TryCatchStatement tryCachStmt = new Ast.TryCatchStatement(tryBlock, ccs, finallyBlock); yield return tryCachStmt; } else { throw new Exception("Bad node type"); } if (Options.NodeComments) { yield return MakeComment(""); } }
public override object TrackedVisitIfElseStatement(IfElseStatement ifElseStatement, object data) { this.AppendIndented("if "); ifElseStatement.Condition.AcceptVisitor(this, data); this.Append(":"); this.AppendLine(); this.IncreaseIndent(); foreach (Statement trueStatement in ifElseStatement.TrueStatement) { trueStatement.AcceptVisitor(this, data); } this.DecreaseIndent(); if (ifElseStatement.HasElseIfSections) { foreach (ElseIfSection elseIfSection in ifElseStatement.ElseIfSections) { elseIfSection.AcceptVisitor(this, data); } } if (ifElseStatement.HasElseStatements) { this.AppendIndentedLine("else:"); this.IncreaseIndent(); foreach (Statement falseStatement in ifElseStatement.FalseStatement) { falseStatement.AcceptVisitor(this, data); } this.DecreaseIndent(); } return null; }
public virtual object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { throw new global::System.NotImplementedException("IfElseStatement"); }
IEnumerable<Statement> TransformNode(ILNode node) { if (node is ILLabel) { yield return new Ast.LabelStatement { Label = ((ILLabel)node).Name }.WithAnnotation(node.ILRanges); } else if (node is ILExpression) { AstNode codeExpr = TransformExpression((ILExpression)node); if (codeExpr != null) { if (codeExpr is Ast.Expression) { yield return new Ast.ExpressionStatement { Expression = (Ast.Expression)codeExpr }; } else if (codeExpr is Ast.Statement) { yield return (Ast.Statement)codeExpr; } else { throw new Exception(); } } } else if (node is ILWhileLoop) { ILWhileLoop ilLoop = (ILWhileLoop)node; Expression expr; WhileStatement whileStmt = new WhileStatement() { Condition = expr = ilLoop.Condition != null ? (Expression)TransformExpression(ilLoop.Condition) : new PrimitiveExpression(true), EmbeddedStatement = TransformBlock(ilLoop.BodyBlock) }; expr.AddAnnotation(ilLoop.ILRanges); yield return whileStmt; } else if (node is ILCondition) { ILCondition conditionalNode = (ILCondition)node; bool hasFalseBlock = conditionalNode.FalseBlock.EntryGoto != null || conditionalNode.FalseBlock.Body.Count > 0; BlockStatement trueStmt; var ifElseStmt = new Ast.IfElseStatement { Condition = (Expression)TransformExpression(conditionalNode.Condition), TrueStatement = trueStmt = TransformBlock(conditionalNode.TrueBlock), FalseStatement = hasFalseBlock ? TransformBlock(conditionalNode.FalseBlock) : null }; ifElseStmt.Condition.AddAnnotation(conditionalNode.ILRanges); if (ifElseStmt.FalseStatement == null) trueStmt.HiddenEnd = NRefactoryExtensions.CreateHidden(conditionalNode.FalseBlock.GetSelfAndChildrenRecursiveILRanges(), trueStmt.HiddenEnd); yield return ifElseStmt; } else if (node is ILSwitch) { ILSwitch ilSwitch = (ILSwitch)node; if (ilSwitch.Condition.InferredType.GetElementType() == ElementType.Boolean && ( from cb in ilSwitch.CaseBlocks where cb.Values != null from val in cb.Values select val ).Any(val => val != 0 && val != 1)) { // If switch cases contain values other then 0 and 1, force the condition to be non-boolean ilSwitch.Condition.ExpectedType = corLib.Int32; } SwitchStatement switchStmt = new SwitchStatement() { Expression = (Expression)TransformExpression(ilSwitch.Condition) }; switchStmt.Expression.AddAnnotation(ilSwitch.ILRanges); switchStmt.HiddenEnd = NRefactoryExtensions.CreateHidden(ilSwitch.EndILRanges, switchStmt.HiddenEnd); foreach (var caseBlock in ilSwitch.CaseBlocks) { SwitchSection section = new SwitchSection(); if (caseBlock.Values != null) { section.CaseLabels.AddRange(caseBlock.Values.Select(i => new CaseLabel() { Expression = AstBuilder.MakePrimitive(i, (ilSwitch.Condition.ExpectedType ?? ilSwitch.Condition.InferredType).ToTypeDefOrRef()) })); } else { section.CaseLabels.Add(new CaseLabel()); } section.Statements.Add(TransformBlock(caseBlock)); switchStmt.SwitchSections.Add(section); } yield return switchStmt; } else if (node is ILTryCatchBlock) { ILTryCatchBlock tryCatchNode = ((ILTryCatchBlock)node); var tryCatchStmt = new Ast.TryCatchStatement(); tryCatchStmt.TryBlock = TransformBlock(tryCatchNode.TryBlock); tryCatchStmt.TryBlock.HiddenStart = NRefactoryExtensions.CreateHidden(tryCatchNode.ILRanges, tryCatchStmt.TryBlock.HiddenStart); foreach (var catchClause in tryCatchNode.CatchBlocks) { if (catchClause.ExceptionVariable == null && (catchClause.ExceptionType == null || catchClause.ExceptionType.GetElementType() == ElementType.Object)) { tryCatchStmt.CatchClauses.Add(new Ast.CatchClause { Body = TransformBlock(catchClause) }.WithAnnotation(catchClause.StlocILRanges)); } else { tryCatchStmt.CatchClauses.Add( new Ast.CatchClause { Type = AstBuilder.ConvertType(catchClause.ExceptionType), VariableNameToken = catchClause.ExceptionVariable == null ? null : Identifier.Create(catchClause.ExceptionVariable.Name).WithAnnotation(catchClause.ExceptionVariable.IsParameter ? TextTokenType.Parameter : TextTokenType.Local), Body = TransformBlock(catchClause) }.WithAnnotation(catchClause.ExceptionVariable).WithAnnotation(catchClause.StlocILRanges)); } } if (tryCatchNode.FinallyBlock != null) tryCatchStmt.FinallyBlock = TransformBlock(tryCatchNode.FinallyBlock); if (tryCatchNode.FaultBlock != null) { CatchClause cc = new CatchClause(); cc.Body = TransformBlock(tryCatchNode.FaultBlock); cc.Body.Add(new ThrowStatement()); // rethrow tryCatchStmt.CatchClauses.Add(cc); } yield return tryCatchStmt; } else if (node is ILFixedStatement) { ILFixedStatement fixedNode = (ILFixedStatement)node; FixedStatement fixedStatement = new FixedStatement(); for (int i = 0; i < fixedNode.Initializers.Count; i++) { var initializer = fixedNode.Initializers[i]; Debug.Assert(initializer.Code == ILCode.Stloc); ILVariable v = (ILVariable)initializer.Operand; VariableInitializer vi; fixedStatement.Variables.Add(vi = new VariableInitializer { NameToken = Identifier.Create(v.Name).WithAnnotation(v.IsParameter ? TextTokenType.Parameter : TextTokenType.Local), Initializer = (Expression)TransformExpression(initializer.Arguments[0]) }.WithAnnotation(v)); vi.AddAnnotation(ILRange.OrderAndJoin(initializer.GetSelfAndChildrenRecursiveILRanges())); if (i == 0) vi.AddAnnotation(ILRange.OrderAndJoin(fixedNode.ILRanges)); } fixedStatement.Type = AstBuilder.ConvertType(((ILVariable)fixedNode.Initializers[0].Operand).Type); fixedStatement.EmbeddedStatement = TransformBlock(fixedNode.BodyBlock); yield return fixedStatement; } else if (node is ILBlock) { yield return TransformBlock((ILBlock)node); } else { throw new Exception("Unknown node type"); } }
public sealed override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { this.BeginVisit(ifElseStatement); object result = this.TrackedVisitIfElseStatement(ifElseStatement, data); this.EndVisit(ifElseStatement); return result; }
protected override IEnumerable<ICSharpCode.NRefactory.Ast.INode> GenerateCode (List<IBaseMember> includedMembers) { foreach (IMember member in includedMembers) { MethodDeclaration methodDeclaration = new MethodDeclaration (); methodDeclaration.Name = "On" + member.Name; methodDeclaration.TypeReference = DomReturnType.Void.ConvertToTypeReference (); methodDeclaration.Modifier = ICSharpCode.NRefactory.Ast.Modifiers.Protected | ICSharpCode.NRefactory.Ast.Modifiers.Virtual; methodDeclaration.Body = new BlockStatement (); IType type = Options.Dom.SearchType (member, member.ReturnType); IMethod invokeMethod = type.Methods.First (); methodDeclaration.Parameters.Add (new ParameterDeclarationExpression (Options.ShortenTypeName (invokeMethod.Parameters[1].ReturnType.ConvertToTypeReference ()), invokeMethod.Parameters[1].Name)); const string handlerName = "handler"; LocalVariableDeclaration handlerVariable = new LocalVariableDeclaration (new VariableDeclaration (handlerName, new MemberReferenceExpression (new ThisReferenceExpression (), member.Name))); handlerVariable.TypeReference = Options.ShortenTypeName (member.ReturnType.ConvertToTypeReference ()); methodDeclaration.Body.AddChild (handlerVariable); IfElseStatement ifStatement = new IfElseStatement (null); ifStatement.Condition = new BinaryOperatorExpression (new IdentifierExpression (handlerName), BinaryOperatorType.InEquality, new PrimitiveExpression (null)); List<Expression> arguments = new List<Expression> (); arguments.Add (new ThisReferenceExpression ()); arguments.Add (new IdentifierExpression (invokeMethod.Parameters[1].Name)); ifStatement.TrueStatement.Add (new ExpressionStatement (new InvocationExpression (new IdentifierExpression (handlerName), arguments))); methodDeclaration.Body.AddChild (ifStatement); yield return methodDeclaration; } }
void EmbeddedStatement( //#line 3070 "VBNET.ATG" out Statement statement) { //#line 3072 "VBNET.ATG" Statement embeddedStatement = null; statement = null; Expression expr = null; string name = String.Empty; List<Expression> p = null; Location startLocation = la.Location; if (la.kind == 120) { lexer.NextToken(); //#line 3080 "VBNET.ATG" ExitType exitType = ExitType.None; switch (la.kind) { case 210: { lexer.NextToken(); //#line 3082 "VBNET.ATG" exitType = ExitType.Sub; break; } case 127: { lexer.NextToken(); //#line 3084 "VBNET.ATG" exitType = ExitType.Function; break; } case 186: { lexer.NextToken(); //#line 3086 "VBNET.ATG" exitType = ExitType.Property; break; } case 108: { lexer.NextToken(); //#line 3088 "VBNET.ATG" exitType = ExitType.Do; break; } case 124: { lexer.NextToken(); //#line 3090 "VBNET.ATG" exitType = ExitType.For; break; } case 218: { lexer.NextToken(); //#line 3092 "VBNET.ATG" exitType = ExitType.Try; break; } case 231: { lexer.NextToken(); //#line 3094 "VBNET.ATG" exitType = ExitType.While; break; } case 197: { lexer.NextToken(); //#line 3096 "VBNET.ATG" exitType = ExitType.Select; break; } default: SynErr(298); break; } //#line 3098 "VBNET.ATG" statement = new ExitStatement(exitType); } else if (la.kind == 218) { TryStatement( //#line 3099 "VBNET.ATG" out statement); } else if (la.kind == 89) { lexer.NextToken(); //#line 3100 "VBNET.ATG" ContinueType continueType = ContinueType.None; if (la.kind == 108 || la.kind == 124 || la.kind == 231) { if (la.kind == 108) { lexer.NextToken(); //#line 3100 "VBNET.ATG" continueType = ContinueType.Do; } else if (la.kind == 124) { lexer.NextToken(); //#line 3100 "VBNET.ATG" continueType = ContinueType.For; } else { lexer.NextToken(); //#line 3100 "VBNET.ATG" continueType = ContinueType.While; } } //#line 3100 "VBNET.ATG" statement = new ContinueStatement(continueType); } else if (la.kind == 215) { lexer.NextToken(); if (StartOf(24)) { Expr( //#line 3102 "VBNET.ATG" out expr); } //#line 3102 "VBNET.ATG" statement = new ThrowStatement(expr); } else if (la.kind == 195) { lexer.NextToken(); if (StartOf(24)) { Expr( //#line 3104 "VBNET.ATG" out expr); } //#line 3104 "VBNET.ATG" statement = new ReturnStatement(expr); } else if (la.kind == 211) { lexer.NextToken(); Expr( //#line 3106 "VBNET.ATG" out expr); EndOfStmt(); Block( //#line 3106 "VBNET.ATG" out embeddedStatement); Expect(113); Expect(211); //#line 3107 "VBNET.ATG" statement = new LockStatement(expr, embeddedStatement); } else if (la.kind == 189) { lexer.NextToken(); Identifier(); //#line 3109 "VBNET.ATG" name = t.val; if (la.kind == 37) { lexer.NextToken(); if (StartOf(43)) { ArgumentList( //#line 3110 "VBNET.ATG" out p); } Expect(38); } //#line 3112 "VBNET.ATG" statement = new RaiseEventStatement(name, p); } else if (la.kind == 233) { WithStatement( //#line 3115 "VBNET.ATG" out statement); } else if (la.kind == 56) { lexer.NextToken(); //#line 3117 "VBNET.ATG" Expression handlerExpr = null; Expr( //#line 3118 "VBNET.ATG" out expr); Expect(22); Expr( //#line 3118 "VBNET.ATG" out handlerExpr); //#line 3120 "VBNET.ATG" statement = new AddHandlerStatement(expr, handlerExpr); } else if (la.kind == 193) { lexer.NextToken(); //#line 3123 "VBNET.ATG" Expression handlerExpr = null; Expr( //#line 3124 "VBNET.ATG" out expr); Expect(22); Expr( //#line 3124 "VBNET.ATG" out handlerExpr); //#line 3126 "VBNET.ATG" statement = new RemoveHandlerStatement(expr, handlerExpr); } else if (la.kind == 231) { lexer.NextToken(); Expr( //#line 3129 "VBNET.ATG" out expr); EndOfStmt(); Block( //#line 3130 "VBNET.ATG" out embeddedStatement); Expect(113); Expect(231); //#line 3132 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); } else if (la.kind == 108) { lexer.NextToken(); //#line 3137 "VBNET.ATG" ConditionType conditionType = ConditionType.None; if (la.kind == 224 || la.kind == 231) { WhileOrUntil( //#line 3140 "VBNET.ATG" out conditionType); Expr( //#line 3140 "VBNET.ATG" out expr); EndOfStmt(); Block( //#line 3141 "VBNET.ATG" out embeddedStatement); Expect(152); //#line 3144 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, ConditionPosition.Start); } else if (la.kind == 1 || la.kind == 21) { EndOfStmt(); Block( //#line 3151 "VBNET.ATG" out embeddedStatement); Expect(152); if (la.kind == 224 || la.kind == 231) { WhileOrUntil( //#line 3152 "VBNET.ATG" out conditionType); Expr( //#line 3152 "VBNET.ATG" out expr); } //#line 3154 "VBNET.ATG" statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); } else SynErr(299); } else if (la.kind == 124) { lexer.NextToken(); //#line 3159 "VBNET.ATG" Expression group = null; TypeReference typeReference; string typeName; if (la.kind == 110) { lexer.NextToken(); LoopControlVariable( //#line 3165 "VBNET.ATG" out typeReference, out typeName); Expect(138); Expr( //#line 3166 "VBNET.ATG" out group); EndOfStmt(); Block( //#line 3167 "VBNET.ATG" out embeddedStatement); Expect(163); if (StartOf(24)) { Expr( //#line 3168 "VBNET.ATG" out expr); } //#line 3170 "VBNET.ATG" statement = new ForeachStatement(typeReference, typeName, group, embeddedStatement, expr); statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } else if (StartOf(44)) { //#line 3181 "VBNET.ATG" Expression start = null; Expression end = null; Expression step = null; Expression variableExpr = null; Expression nextExpr = null; List<Expression> nextExpressions = null; if ( //#line 3188 "VBNET.ATG" IsLoopVariableDeclaration()) { LoopControlVariable( //#line 3189 "VBNET.ATG" out typeReference, out typeName); } else { //#line 3191 "VBNET.ATG" typeReference = null; typeName = null; SimpleExpr( //#line 3192 "VBNET.ATG" out variableExpr); } Expect(20); Expr( //#line 3194 "VBNET.ATG" out start); Expect(216); Expr( //#line 3194 "VBNET.ATG" out end); if (la.kind == 205) { lexer.NextToken(); Expr( //#line 3194 "VBNET.ATG" out step); } EndOfStmt(); Block( //#line 3195 "VBNET.ATG" out embeddedStatement); Expect(163); if (StartOf(24)) { Expr( //#line 3198 "VBNET.ATG" out nextExpr); //#line 3200 "VBNET.ATG" nextExpressions = new List<Expression>(); nextExpressions.Add(nextExpr); while (la.kind == 22) { lexer.NextToken(); Expr( //#line 3203 "VBNET.ATG" out nextExpr); //#line 3203 "VBNET.ATG" nextExpressions.Add(nextExpr); } } //#line 3206 "VBNET.ATG" statement = new ForNextStatement { TypeReference = typeReference, VariableName = typeName, LoopVariableExpression = variableExpr, Start = start, End = end, Step = step, EmbeddedStatement = embeddedStatement, NextExpressions = nextExpressions }; } else SynErr(300); } else if (la.kind == 118) { lexer.NextToken(); Expr( //#line 3219 "VBNET.ATG" out expr); //#line 3219 "VBNET.ATG" statement = new ErrorStatement(expr); } else if (la.kind == 191) { lexer.NextToken(); //#line 3221 "VBNET.ATG" bool isPreserve = false; if (la.kind == 184) { lexer.NextToken(); //#line 3221 "VBNET.ATG" isPreserve = true; } ReDimClause( //#line 3222 "VBNET.ATG" out expr); //#line 3224 "VBNET.ATG" ReDimStatement reDimStatement = new ReDimStatement(isPreserve); statement = reDimStatement; SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); while (la.kind == 22) { lexer.NextToken(); ReDimClause( //#line 3228 "VBNET.ATG" out expr); //#line 3229 "VBNET.ATG" SafeAdd(reDimStatement, reDimStatement.ReDimClauses, expr as InvocationExpression); } } else if (la.kind == 117) { lexer.NextToken(); Expr( //#line 3233 "VBNET.ATG" out expr); //#line 3235 "VBNET.ATG" EraseStatement eraseStatement = new EraseStatement(); if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr);} while (la.kind == 22) { lexer.NextToken(); Expr( //#line 3238 "VBNET.ATG" out expr); //#line 3238 "VBNET.ATG" if (expr != null) { SafeAdd(eraseStatement, eraseStatement.Expressions, expr); } } //#line 3239 "VBNET.ATG" statement = eraseStatement; } else if (la.kind == 206) { lexer.NextToken(); //#line 3241 "VBNET.ATG" statement = new StopStatement(); } else if ( //#line 3243 "VBNET.ATG" la.kind == Tokens.If) { Expect(135); //#line 3244 "VBNET.ATG" Location ifStartLocation = t.Location; Expr( //#line 3244 "VBNET.ATG" out expr); if (la.kind == 214) { lexer.NextToken(); } if (la.kind == 1 || la.kind == 21) { EndOfStmt(); Block( //#line 3247 "VBNET.ATG" out embeddedStatement); //#line 3249 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); ifStatement.StartLocation = ifStartLocation; Location elseIfStart; while (la.kind == 112 || //#line 3255 "VBNET.ATG" IsElseIf()) { if ( //#line 3255 "VBNET.ATG" IsElseIf()) { Expect(111); //#line 3255 "VBNET.ATG" elseIfStart = t.Location; Expect(135); } else { lexer.NextToken(); //#line 3256 "VBNET.ATG" elseIfStart = t.Location; } //#line 3258 "VBNET.ATG" Expression condition = null; Statement block = null; Expr( //#line 3259 "VBNET.ATG" out condition); if (la.kind == 214) { lexer.NextToken(); } EndOfStmt(); Block( //#line 3260 "VBNET.ATG" out block); //#line 3262 "VBNET.ATG" ElseIfSection elseIfSection = new ElseIfSection(condition, block); elseIfSection.StartLocation = elseIfStart; elseIfSection.EndLocation = t.Location; elseIfSection.Parent = ifStatement; ifStatement.ElseIfSections.Add(elseIfSection); } if (la.kind == 111) { lexer.NextToken(); if (la.kind == 1 || la.kind == 21) { EndOfStmt(); } Block( //#line 3271 "VBNET.ATG" out embeddedStatement); //#line 3273 "VBNET.ATG" ifStatement.FalseStatement.Add(embeddedStatement); } Expect(113); Expect(135); //#line 3277 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else if (StartOf(45)) { //#line 3282 "VBNET.ATG" IfElseStatement ifStatement = new IfElseStatement(expr); ifStatement.StartLocation = ifStartLocation; SingleLineStatementList( //#line 3285 "VBNET.ATG" ifStatement.TrueStatement); if (la.kind == 111) { lexer.NextToken(); if (StartOf(45)) { SingleLineStatementList( //#line 3288 "VBNET.ATG" ifStatement.FalseStatement); } } //#line 3290 "VBNET.ATG" ifStatement.EndLocation = t.Location; statement = ifStatement; } else SynErr(301); } else if (la.kind == 197) { lexer.NextToken(); if (la.kind == 74) { lexer.NextToken(); } Expr( //#line 3293 "VBNET.ATG" out expr); EndOfStmt(); //#line 3294 "VBNET.ATG" List<SwitchSection> selectSections = new List<SwitchSection>(); Statement block = null; while (la.kind == 74) { //#line 3298 "VBNET.ATG" List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; lexer.NextToken(); CaseClauses( //#line 3299 "VBNET.ATG" out caseClauses); if ( //#line 3299 "VBNET.ATG" IsNotStatementSeparator()) { lexer.NextToken(); } EndOfStmt(); //#line 3301 "VBNET.ATG" SwitchSection selectSection = new SwitchSection(caseClauses); selectSection.StartLocation = caseLocation; Block( //#line 3304 "VBNET.ATG" out block); //#line 3306 "VBNET.ATG" selectSection.Children = block.Children; selectSection.EndLocation = t.EndLocation; selectSections.Add(selectSection); } //#line 3312 "VBNET.ATG" statement = new SwitchStatement(expr, selectSections); Expect(113); Expect(197); } else if (la.kind == 171) { //#line 3315 "VBNET.ATG" OnErrorStatement onErrorStatement = null; OnErrorStatement( //#line 3316 "VBNET.ATG" out onErrorStatement); //#line 3316 "VBNET.ATG" statement = onErrorStatement; } else if (la.kind == 132) { //#line 3317 "VBNET.ATG" GotoStatement goToStatement = null; GotoStatement( //#line 3318 "VBNET.ATG" out goToStatement); //#line 3318 "VBNET.ATG" statement = goToStatement; } else if (la.kind == 194) { //#line 3319 "VBNET.ATG" ResumeStatement resumeStatement = null; ResumeStatement( //#line 3320 "VBNET.ATG" out resumeStatement); //#line 3320 "VBNET.ATG" statement = resumeStatement; } else if (StartOf(44)) { //#line 3323 "VBNET.ATG" Expression val = null; AssignmentOperatorType op; Location startLoc = la.Location; bool mustBeAssignment = la.kind == Tokens.Plus || la.kind == Tokens.Minus || la.kind == Tokens.Not || la.kind == Tokens.Times; SimpleExpr( //#line 3330 "VBNET.ATG" out expr); if (StartOf(46)) { AssignmentOperator( //#line 3332 "VBNET.ATG" out op); Expr( //#line 3332 "VBNET.ATG" out val); //#line 3334 "VBNET.ATG" expr = new AssignmentExpression(expr, op, val); expr.StartLocation = startLoc; expr.EndLocation = t.EndLocation; } else if (StartOf(47)) { //#line 3338 "VBNET.ATG" if (mustBeAssignment) Error("error in assignment."); } else SynErr(302); //#line 3341 "VBNET.ATG" // a field reference expression that stands alone is a // invocation expression without parantheses and arguments if(expr is MemberReferenceExpression || expr is IdentifierExpression) { Location endLocation = expr.EndLocation; expr = new InvocationExpression(expr); expr.StartLocation = startLoc; expr.EndLocation = endLocation; } statement = new ExpressionStatement(expr); } else if (la.kind == 73) { lexer.NextToken(); SimpleExpr( //#line 3351 "VBNET.ATG" out expr); //#line 3351 "VBNET.ATG" statement = new ExpressionStatement(expr); } else if (la.kind == 226) { lexer.NextToken(); //#line 3353 "VBNET.ATG" Statement block; if ( //#line 3354 "VBNET.ATG" Peek(1).kind == Tokens.As) { //#line 3355 "VBNET.ATG" LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); VariableDeclarator( //#line 3356 "VBNET.ATG" resourceAquisition.Variables); while (la.kind == 22) { lexer.NextToken(); VariableDeclarator( //#line 3358 "VBNET.ATG" resourceAquisition.Variables); } Block( //#line 3360 "VBNET.ATG" out block); //#line 3362 "VBNET.ATG" statement = new UsingStatement(resourceAquisition, block); } else if (StartOf(24)) { Expr( //#line 3364 "VBNET.ATG" out expr); Block( //#line 3365 "VBNET.ATG" out block); //#line 3366 "VBNET.ATG" statement = new UsingStatement(new ExpressionStatement(expr), block); } else SynErr(303); Expect(113); Expect(226); } else if (StartOf(48)) { LocalDeclarationStatement( //#line 3369 "VBNET.ATG" out statement); } else SynErr(304); //#line 3372 "VBNET.ATG" if (statement != null) { statement.StartLocation = startLocation; statement.EndLocation = t.EndLocation; } }
public virtual object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) { Debug.Assert((ifElseStatement != null)); Debug.Assert((ifElseStatement.Condition != null)); Debug.Assert((ifElseStatement.TrueStatement != null)); Debug.Assert((ifElseStatement.FalseStatement != null)); Debug.Assert((ifElseStatement.ElseIfSections != null)); nodeStack.Push(ifElseStatement.Condition); ifElseStatement.Condition.AcceptVisitor(this, data); ifElseStatement.Condition = ((Expression)(nodeStack.Pop())); for (int i = 0; i < ifElseStatement.TrueStatement.Count; i++) { Statement o = ifElseStatement.TrueStatement[i]; Debug.Assert(o != null); nodeStack.Push(o); o.AcceptVisitor(this, data); o = (Statement)nodeStack.Pop(); if (o == null) ifElseStatement.TrueStatement.RemoveAt(i--); else ifElseStatement.TrueStatement[i] = o; } for (int i = 0; i < ifElseStatement.FalseStatement.Count; i++) { Statement o = ifElseStatement.FalseStatement[i]; Debug.Assert(o != null); nodeStack.Push(o); o.AcceptVisitor(this, data); o = (Statement)nodeStack.Pop(); if (o == null) ifElseStatement.FalseStatement.RemoveAt(i--); else ifElseStatement.FalseStatement[i] = o; } for (int i = 0; i < ifElseStatement.ElseIfSections.Count; i++) { ElseIfSection o = ifElseStatement.ElseIfSections[i]; Debug.Assert(o != null); nodeStack.Push(o); o.AcceptVisitor(this, data); o = (ElseIfSection)nodeStack.Pop(); if (o == null) ifElseStatement.ElseIfSections.RemoveAt(i--); else ifElseStatement.ElseIfSections[i] = o; } return null; }