void Rhs(out AssignmentRhs r) { Contract.Ensures(Contract.ValueAtReturn<AssignmentRhs>(out r) != null); IToken/*!*/ x, newToken; Expression/*!*/ e; Type ty = null; List<Expression> ee = null; List<Expression> args = null; r = dummyRhs; // to please compiler Attributes attrs = null; if (la.kind == 97) { Get(); newToken = t; TypeAndToken(out x, out ty); if (la.kind == 48 || la.kind == 50) { if (la.kind == 48) { Get(); ee = new List<Expression>(); Expressions(ee); Expect(49); var tmp = theBuiltIns.ArrayType(ee.Count, new IntType(), true); } else { x = null; args = new List<Expression/*!*/>(); Get(); if (StartOf(7)) { Expressions(args); } Expect(51); } } if (ee != null) { r = new TypeRhs(newToken, ty, ee); } else if (args != null) { r = new TypeRhs(newToken, ty, args, false); } else { r = new TypeRhs(newToken, ty); } } else if (la.kind == 57) { Get(); r = new HavocRhs(t); } else if (StartOf(7)) { Expression(out e, false, true); r = new ExprRhs(e); } else SynErr(197); while (la.kind == 46) { Attribute(ref attrs); } r.Attributes = attrs; }
public virtual AssignmentRhs CloneRHS(AssignmentRhs rhs) { AssignmentRhs c; if (rhs is ExprRhs) { var r = (ExprRhs)rhs; c = new ExprRhs(CloneExpr(r.Expr)); } else if (rhs is HavocRhs) { c = new HavocRhs(Tok(rhs.Tok)); } else { var r = (TypeRhs)rhs; if (r.ArrayDimensions != null) { c = new TypeRhs(Tok(r.Tok), CloneType(r.EType), r.ArrayDimensions.ConvertAll(CloneExpr)); } else if (r.Arguments == null) { c = new TypeRhs(Tok(r.Tok), CloneType(r.EType)); } else { c = new TypeRhs(Tok(r.Tok), CloneType(r.Path), r.Arguments.ConvertAll(CloneExpr), false); } } c.Attributes = CloneAttributes(rhs.Attributes); return c; }