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 override object VisitForNextStatement(ForNextStatement forNextStatement, object data) { if (forNextStatement.EmbeddedStatement.EndLocation.IsEmpty) { return base.VisitForNextStatement(forNextStatement, data); } else { endLocationStack.Push(forNextStatement.EmbeddedStatement.EndLocation); AddVariable(forNextStatement.TypeReference, forNextStatement.VariableName, forNextStatement.StartLocation, forNextStatement.EndLocation, false, false, forNextStatement.Start, null, false, forNextStatement.StartLocation); base.VisitForNextStatement(forNextStatement, data); endLocationStack.Pop(); return null; } }
public virtual object VisitForNextStatement(ForNextStatement forNextStatement, object data) { throw CreateException(forNextStatement); }
/// <summary> /// Converts from an NRefactory VB.NET for next loop: /// /// for i As Integer = 0 To 4 /// Next /// /// to Python's: /// /// i = 0 /// while i < 5: /// </summary> public override object TrackedVisitForNextStatement(ForNextStatement forNextStatement, object data) { // Convert the for loop's initializers. string variableName = forNextStatement.VariableName; AppendIndented(variableName); Append(" = "); forNextStatement.Start.AcceptVisitor(this, data); AppendLine(); // Convert the for loop's test expression. AppendIndented("while "); Append(variableName); Append(" <= "); forNextStatement.End.AcceptVisitor(this, data); Append(":"); AppendLine(); // Visit the for loop's body. IncreaseIndent(); forNextStatement.EmbeddedStatement.AcceptVisitor(this, data); // Convert the for loop's increment statement. AppendIndented(variableName); Append(" = "); Append(variableName); Append(" + "); if (forNextStatement.Step.IsNull) { Append("1"); } else { forNextStatement.Step.AcceptVisitor(this, data); } AppendLine(); DecreaseIndent(); return null; }
public override object TrackedVisitForNextStatement(ForNextStatement forNextStatement, object data) { Console.WriteLine("VisitForNextStatement"); return null; }
public object VisitForNextStatement(ForNextStatement forNextStatement, object data) { if (forNextStatement.TypeReference.IsNull) return MakeManualLoop(forNextStatement); B.ForStatement fs = new B.ForStatement(GetLexicalInfo(forNextStatement)); fs.Block = ConvertBlock(forNextStatement.EmbeddedStatement); fs.Declarations.Add(new B.Declaration(forNextStatement.VariableName, null)); B.Expression start = ConvertExpression(forNextStatement.Start); Expression end = forNextStatement.End; if (forNextStatement.Step == null || forNextStatement.Step.IsNull) { // range only goes to end - 1, so increment end end = Expression.AddInteger(end, 1); fs.Iterator = MakeMethodCall("range", start, ConvertExpression(end)); } else { PrimitiveExpression stepPE = forNextStatement.Step as PrimitiveExpression; if (stepPE == null || !(stepPE.Value is int)) { AddError(forNextStatement, "Step must be an integer literal"); } else { if ((int)stepPE.Value < 0) end = Expression.AddInteger(end, -1); else end = Expression.AddInteger(end, 1); } fs.Iterator = MakeMethodCall("range", start, ConvertExpression(end), ConvertExpression(forNextStatement.Step)); } return fs; }
public object VisitForNextStatement(ForNextStatement forNextStatement, object data) { throw new NotImplementedException (); }
public virtual object TrackedVisitForNextStatement(ForNextStatement forNextStatement, object data) { return base.VisitForNextStatement(forNextStatement, data); }
public void VisitStatement (ForNextStatement statement, MethodProperties meth) { meth.CyclometricComplexity++; VisitExpression(statement.LoopVariableExpression, meth); foreach(Expression innerExpression in statement.NextExpressions) VisitExpression(innerExpression, meth); foreach(var innerStatement in statement.EmbeddedStatement.Children) VisitStatement(innerStatement, meth); }
void ConvertForStatement(ForStatement forStatement) { // ForStatement -> ForNextStatement when for-loop is simple // only the following forms of the for-statement are allowed: // for (TypeReference name = start; name < oneAfterEnd; name += step) // for (name = start; name < oneAfterEnd; name += step) // for (TypeReference name = start; name <= end; name += step) // for (name = start; name <= end; name += step) // for (TypeReference name = start; name > oneAfterEnd; name -= step) // for (name = start; name > oneAfterEnd; name -= step) // for (TypeReference name = start; name >= end; name -= step) // for (name = start; name >= end; name -= step) // check if the form is valid and collect TypeReference, name, start, end and step if (forStatement.Initializers.Count != 1) return; if (forStatement.Iterator.Count != 1) return; ExpressionStatement statement = forStatement.Iterator[0] as ExpressionStatement; if (statement == null) return; AssignmentExpression iterator = statement.Expression as AssignmentExpression; if (iterator == null || (iterator.Op != AssignmentOperatorType.Add && iterator.Op != AssignmentOperatorType.Subtract)) return; IdentifierExpression iteratorIdentifier = iterator.Left as IdentifierExpression; if (iteratorIdentifier == null) return; PrimitiveExpression stepExpression = iterator.Right as PrimitiveExpression; if (stepExpression == null || !(stepExpression.Value is int)) return; int step = (int)stepExpression.Value; if (iterator.Op == AssignmentOperatorType.Subtract) step = -step; BinaryOperatorExpression condition = forStatement.Condition as BinaryOperatorExpression; if (condition == null || !(condition.Left is IdentifierExpression)) return; if ((condition.Left as IdentifierExpression).Identifier != iteratorIdentifier.Identifier) return; Expression end; if (iterator.Op == AssignmentOperatorType.Subtract) { if (condition.Op == BinaryOperatorType.GreaterThanOrEqual) { end = condition.Right; } else if (condition.Op == BinaryOperatorType.GreaterThan) { end = Expression.AddInteger(condition.Right, 1); } else { return; } } else { if (condition.Op == BinaryOperatorType.LessThanOrEqual) { end = condition.Right; } else if (condition.Op == BinaryOperatorType.LessThan) { end = Expression.AddInteger(condition.Right, -1); } else { return; } } Expression start; TypeReference typeReference = null; LocalVariableDeclaration varDecl = forStatement.Initializers[0] as LocalVariableDeclaration; if (varDecl != null) { if (varDecl.Variables.Count != 1 || varDecl.Variables[0].Name != iteratorIdentifier.Identifier || varDecl.Variables[0].Initializer == null) return; typeReference = varDecl.GetTypeForVariable(0); start = varDecl.Variables[0].Initializer; } else { statement = forStatement.Initializers[0] as ExpressionStatement; if (statement == null) return; AssignmentExpression assign = statement.Expression as AssignmentExpression; if (assign == null || assign.Op != AssignmentOperatorType.Assign) return; if (!(assign.Left is IdentifierExpression)) return; if ((assign.Left as IdentifierExpression).Identifier != iteratorIdentifier.Identifier) return; start = assign.Right; } var forNextStatement = new ForNextStatement(); forNextStatement.TypeReference = typeReference; forNextStatement.VariableName = iteratorIdentifier.Identifier; forNextStatement.Start = start; forNextStatement.End = end; forNextStatement.Step = (step == 1) ? null : new PrimitiveExpression(step, step.ToString(System.Globalization.NumberFormatInfo.InvariantInfo)); forNextStatement.EmbeddedStatement = forStatement.EmbeddedStatement; ReplaceCurrentNode(forNextStatement); }
public virtual bool VisitForNextStatement(ForNextStatement forNextStatement, object d) { if ((forNextStatement == null)) { return SetFailure(); } if ((d == null)) { return SetFailure(); } if ((forNextStatement.Start == null)) { return SetFailure(); } if ((forNextStatement.End == null)) { return SetFailure(); } if ((forNextStatement.Step == null)) { return SetFailure(); } if ((forNextStatement.NextExpressions == null)) { return SetFailure(); } if ((forNextStatement.TypeReference == null)) { return SetFailure(); } if ((forNextStatement.LoopVariableExpression == null)) { return SetFailure(); } if ((forNextStatement.EmbeddedStatement == null)) { return SetFailure(); } if(forNextStatement.GetType() != d.GetType()) {return SetFailure();} var data = (ForNextStatement)d; if (!IsMatch(forNextStatement, data)) { return SetFailure(); } forNextStatement.Start.AcceptVisitor(this, data.Start); forNextStatement.End.AcceptVisitor(this, data.End); forNextStatement.Step.AcceptVisitor(this, data.Step); if (forNextStatement.NextExpressions.Count == data.NextExpressions.Count) { for (int i=0; i<forNextStatement.NextExpressions.Count;i++) { Expression o = forNextStatement.NextExpressions[i]; if(o == null){return SetFailure();} if((bool)o.AcceptVisitor(this, data.NextExpressions[i]) == false) return SetFailure(); } } else { return SetFailure(); } forNextStatement.TypeReference.AcceptVisitor(this, data.TypeReference); forNextStatement.LoopVariableExpression.AcceptVisitor(this, data.LoopVariableExpression); return forNextStatement.EmbeddedStatement.AcceptVisitor(this, data.EmbeddedStatement); }
public override object VisitForNextStatement(ForNextStatement forNextStatement, object data) { return base.VisitForNextStatement(forNextStatement, true); }
private bool IsMatch(ForNextStatement left, ForNextStatement data) { return false; }
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); }
public override object VisitForNextStatement(ForNextStatement forNextStatement, object data) { // uses LocalVariableDeclaration, we just have to put the end location on the stack if (forNextStatement.EmbeddedStatement.EndLocation.IsEmpty) { return base.VisitForNextStatement(forNextStatement, data); } else { endLocationStack.Push(forNextStatement.EmbeddedStatement.EndLocation); base.VisitForNextStatement(forNextStatement, data); endLocationStack.Pop(); return null; } }
public virtual object VisitForNextStatement(ForNextStatement forNextStatement, object data) { throw new global::System.NotImplementedException("ForNextStatement"); }
public virtual object VisitForNextStatement(ForNextStatement forNextStatement, object data) { Debug.Assert((forNextStatement != null)); Debug.Assert((forNextStatement.Start != null)); Debug.Assert((forNextStatement.End != null)); Debug.Assert((forNextStatement.Step != null)); Debug.Assert((forNextStatement.NextExpressions != null)); Debug.Assert((forNextStatement.TypeReference != null)); Debug.Assert((forNextStatement.LoopVariableExpression != null)); Debug.Assert((forNextStatement.EmbeddedStatement != null)); forNextStatement.Start.AcceptVisitor(this, data); forNextStatement.End.AcceptVisitor(this, data); forNextStatement.Step.AcceptVisitor(this, data); foreach (Expression o in forNextStatement.NextExpressions) { Debug.Assert(o != null); o.AcceptVisitor(this, data); } forNextStatement.TypeReference.AcceptVisitor(this, data); forNextStatement.LoopVariableExpression.AcceptVisitor(this, data); return forNextStatement.EmbeddedStatement.AcceptVisitor(this, data); }
public sealed override object VisitForNextStatement(ForNextStatement forNextStatement, object data) { this.BeginVisit(forNextStatement); object result = this.TrackedVisitForNextStatement(forNextStatement, data); this.EndVisit(forNextStatement); return result; }
public virtual object VisitForNextStatement(ForNextStatement forNextStatement, object data) { Debug.Assert((forNextStatement != null)); Debug.Assert((forNextStatement.Start != null)); Debug.Assert((forNextStatement.End != null)); Debug.Assert((forNextStatement.Step != null)); Debug.Assert((forNextStatement.NextExpressions != null)); Debug.Assert((forNextStatement.TypeReference != null)); Debug.Assert((forNextStatement.LoopVariableExpression != null)); Debug.Assert((forNextStatement.EmbeddedStatement != null)); nodeStack.Push(forNextStatement.Start); forNextStatement.Start.AcceptVisitor(this, data); forNextStatement.Start = ((Expression)(nodeStack.Pop())); nodeStack.Push(forNextStatement.End); forNextStatement.End.AcceptVisitor(this, data); forNextStatement.End = ((Expression)(nodeStack.Pop())); nodeStack.Push(forNextStatement.Step); forNextStatement.Step.AcceptVisitor(this, data); forNextStatement.Step = ((Expression)(nodeStack.Pop())); for (int i = 0; i < forNextStatement.NextExpressions.Count; i++) { Expression o = forNextStatement.NextExpressions[i]; Debug.Assert(o != null); nodeStack.Push(o); o.AcceptVisitor(this, data); o = (Expression)nodeStack.Pop(); if (o == null) forNextStatement.NextExpressions.RemoveAt(i--); else forNextStatement.NextExpressions[i] = o; } nodeStack.Push(forNextStatement.TypeReference); forNextStatement.TypeReference.AcceptVisitor(this, data); forNextStatement.TypeReference = ((TypeReference)(nodeStack.Pop())); nodeStack.Push(forNextStatement.LoopVariableExpression); forNextStatement.LoopVariableExpression.AcceptVisitor(this, data); forNextStatement.LoopVariableExpression = ((Expression)(nodeStack.Pop())); nodeStack.Push(forNextStatement.EmbeddedStatement); forNextStatement.EmbeddedStatement.AcceptVisitor(this, data); forNextStatement.EmbeddedStatement = ((Statement)(nodeStack.Pop())); return null; }
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; } }
ArrayList MakeManualLoop(ForNextStatement forNextStatement) { Expression var = new IdentifierExpression(forNextStatement.VariableName); List<Statement> initializers = new List<Statement>(1); initializers.Add(new ExpressionStatement(new AssignmentExpression(var, AssignmentOperatorType.Assign, forNextStatement.Start))); List<Statement> iterators = new List<Statement>(1); Expression step = forNextStatement.Step; if (step == null || step.IsNull) step = new PrimitiveExpression(1, "1"); iterators.Add(new ExpressionStatement(new AssignmentExpression(var, AssignmentOperatorType.Add, step))); PrimitiveExpression stepPE = step as PrimitiveExpression; if (stepPE == null || !(stepPE.Value is int)) { AddError(forNextStatement, "Step must be an integer literal"); return null; } BinaryOperatorType conditionOperator; if ((int)stepPE.Value < 0) { conditionOperator = BinaryOperatorType.GreaterThanOrEqual;// counting down } else { conditionOperator = BinaryOperatorType.LessThanOrEqual;// counting up } Expression condition = new BinaryOperatorExpression(var, conditionOperator, forNextStatement.End); return MakeManualLoop(forNextStatement, initializers, B.StatementModifierType.Unless, condition, iterators, forNextStatement.EmbeddedStatement); }