예제 #1
0
파일: Parser.cs 프로젝트: dbremner/dafny
        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;
        }
예제 #2
0
파일: Cloner.cs 프로젝트: ggrov/tacny
 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;
 }