public static VList <LNode> WithoutNodeNamed(this VList <LNode> list, Symbol name, out LNode removedNode) { removedNode = null; for (int i = 0, c = list.Count; i < c; i++) { if (list[i].Name == name) { removedNode = list[i]; return(list.RemoveAt(i)); } } return(list); }
public static VList <LNode> Without(this VList <LNode> list, LNode node) { int i = list.Count; foreach (var item in list.ToFVList()) { i--; if (item == node) { Debug.Assert(list[i] == node); return(list.RemoveAt(i)); } } return(list); }
public void RemoveItemFromViewlist <T>(object item) { if (VList != null) { RemovedAt = VList.IndexOf((T)item); if (RemovedAt > -1) { VList.RemoveAt(RemovedAt); } } if (FList != null && FList.Count > 0) { FList.Clear(); } }
LNode MethodArgListAndBody(int startIndex, int targetIndex, VList<LNode> attrs, Symbol kind, LNode type, LNode name) { TokenType la0; Token lit_colon = default(Token); var lp = Match((int) TT.LParen); var rp = Match((int) TT.RParen); WhereClausesOpt(ref name); // line 1686 LNode r, _, baseCall = null; // line 1686 int consCallIndex = -1; // Line 1687: (TT.Colon (TT.Base|TT.This) TT.LParen TT.RParen)? la0 = LA0; if (la0 == TT.Colon) { lit_colon = MatchAny(); var target = Match((int) TT.Base, (int) TT.This); var baselp = Match((int) TT.LParen); var baserp = Match((int) TT.RParen); // line 1689 baseCall = F.Call((Symbol) target.Value, ExprListInside(baselp), target.StartIndex, baserp.EndIndex, target.StartIndex, target.EndIndex); if ((kind != S.Constructor)) { Error(baseCall, "This is not a constructor declaration, so there should be no ':' clause."); } consCallIndex = lit_colon.StartIndex; } // line 1697 for (int i = 0; i < attrs.Count; i++) { var attr = attrs[i]; if (IsNamedArg(attr) && attr.Args[0].IsIdNamed(S.Return)) { type = type.PlusAttr(attr.Args[1]); attrs.RemoveAt(i); i--; } } // Line 1706: (default TT.Semicolon | MethodBodyOrForward) do { switch (LA0) { case TT.Semicolon: goto match1; case TT.At: case TT.Forward: case TT.LambdaArrow: case TT.LBrace: { var body = MethodBodyOrForward(false, out _, false, consCallIndex); // line 1720 if (kind == S.Delegate) { Error("A 'delegate' is not expected to have a method body."); } if (baseCall != null) { if ((!body.Calls(S.Braces))) { body = F.Braces(LNode.List(body), startIndex, body.Range.EndIndex); } body = body.WithArgs(body.Args.Insert(0, baseCall)); } var parts = new VList<LNode> { type, name, ArgList(lp, rp), body }; r = F.Call(kind, parts, startIndex, body.Range.EndIndex, targetIndex, targetIndex); } break; default: goto match1; } break; match1: { var end = Match((int) TT.Semicolon); // line 1708 if (kind == S.Constructor && baseCall != null) { Error(baseCall, "A method body is required."); var parts = LNode.List(type, name, ArgList(lp, rp), LNode.Call(S.Braces, new VList<LNode>(baseCall), baseCall.Range)); r = F.Call(kind, parts, startIndex, baseCall.Range.EndIndex, targetIndex, targetIndex); } else { var parts = LNode.List(type, name, ArgList(lp, rp)); r = F.Call(kind, parts, startIndex, end.EndIndex, targetIndex, targetIndex); } } } while (false); // line 1731 return r.PlusAttrs(attrs); }
public void TestEmptyListOperations() { VList<int> a = new VList<int>(); VList<int> b = new VList<int>(); a.AddRange(b); a.InsertRange(0, b); a.RemoveRange(0, 0); Assert.That(!a.Remove(0)); Assert.That(a.IsEmpty); a.Add(1); b.AddRange(a); ExpectList(b, 1); b.RemoveAt(0); Assert.That(b.IsEmpty); b.InsertRange(0, a); ExpectList(b, 1); b.RemoveRange(0, 1); Assert.That(b.IsEmpty); b.Insert(0, a[0]); ExpectList(b, 1); b.Remove(a.Last); Assert.That(b.IsEmpty); AssertThrows<InvalidOperationException>(delegate() { a.NextIn(b); }); }
public void TestInsertRemove() { VList<int> list = new VList<int>(9); VList<int> list2 = new VList<int>(10, 11); list.Insert(0, 12); list.Insert(1, list2[1]); list.Insert(2, list2[0]); ExpectList(list, 12, 11, 10, 9); for (int i = 0; i < 9; i++) list.Insert(4, i); ExpectList(list, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); list2 = list; for (int i = 1; i <= 6; i++) list2.RemoveAt(i); ExpectList(list2, 12, 10, 8, 6, 4, 2, 0); ExpectList(list, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); // unchanged Assert.AreEqual(0, list2.Pop()); list2.Insert(5, -2); ExpectList(list2, 12, 10, 8, 6, 4, -2, 2); list2.Insert(5, -1); ExpectList(list2, 12, 10, 8, 6, 4, -1, -2, 2); // Test changing items list = list2; for (int i = 0; i < list.Count; i++) list[i] = i; ExpectList(list, 0, 1, 2, 3, 4, 5, 6, 7); ExpectList(list2, 12, 10, 8, 6, 4, -1, -2, 2); list2.Clear(); ExpectList(list2); Assert.AreEqual(5, list[5]); }