Beispiel #1
0
 private TypeParamNode ToTypeParamNode(TypeParameter tp, DocComment dc)
 {
     Console.WriteLine("Type parameter: " + tp.Name);
     return(new TypeParamNode {
         Name = tp.Name,
         UserDoc = dc == null || dc.TypeParamTags == null ? null : dc.TypeParamTags[tp.Name],
         Token = ToTokenNode(tp.tok),
     });
 }
Beispiel #2
0
        private SpecNode ToSpecNode(AttributedExpression expr, string kind, TokenNode token)
        {
            Console.WriteLine("Specification (" + kind + ")");
            var dc = new DocComment(expr.DocComment);

            return(new SpecNode {
                Kind = kind,
                Clause = Printer.ExprToString(expr.E),
                UserDoc = dc.MainBody,
                Token = token,
            });
        }
Beispiel #3
0
 private ModuleNode ToModuleNode(ModuleDefinition mod, DocComment dc)
 {
     Console.WriteLine("Module: " + mod.Name);
     return(new ModuleNode {
         Name = mod.Name,
         IsAbstract = mod.IsAbstract,
         Refines = mod.RefinementQId == null ? null : mod.RefinementQId.ToString(),
         Decls = CollectDecls(mod).Select(ToDeclNode).Where(d => d != null).ToList(),
         UserDoc = dc == null ? null : dc.MainBody,
         Token = ToTokenNode(mod.tok),
     });
 }
Beispiel #4
0
        private FieldNode ToFieldNode(Field f)
        {
            Console.WriteLine("Field: " + f.Name);
            var dc    = new DocComment(f.DocComment);
            var token = ToTokenNode(f.tok);

            return(new FieldNode {
                Name = f.Name,
                Type = ToTypeRefNode(f.Type, token),
                UserDoc = dc.MainBody,
                Token = token,
            });
        }
Beispiel #5
0
        private TypeSynonymNode ToTypeSynonymNode(OpaqueTypeDecl ot)
        {
            Console.WriteLine("Type synonym: " + ot.Name);
            var dc = new DocComment(ot.DocComment);

            return(new TypeSynonymNode {
                Name = ot.Name,
                TypeParams = ot.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                Rhs = null,
                UserDoc = dc.MainBody,
                Token = ToTokenNode(ot.tok),
            });
        }
Beispiel #6
0
        private TypeSynonymNode ToTypeSynonymNode(TypeSynonymDecl ts)
        {
            Console.WriteLine("Type synonym: " + ts.Name);
            var dc = new DocComment(ts.DocComment);

            return(new TypeSynonymNode {
                Name = ts.Name,
                TypeParams = ts.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                Rhs = ts.Rhs.ToString(),
                UserDoc = dc.MainBody,
                Token = ToTokenNode(ts.tok),
            });
        }
Beispiel #7
0
        private NewtypeNode ToNewtypeNode(NewtypeDecl nt)
        {
            Console.WriteLine("Newtype: " + nt.Name);
            var dc    = new DocComment(nt.DocComment);
            var token = ToTokenNode(nt.tok);

            return(new NewtypeNode {
                Name = nt.Name,
                BaseType = ToTypeRefNode(nt.BaseType, token),
                Constraint = Printer.ExprToString(nt.Constraint),
                UserDoc = dc.MainBody,
                Token = ToTokenNode(nt.tok),
            });
        }
Beispiel #8
0
        private FunctionNode ToFunctionNode(Function f)
        {
            Console.WriteLine("Function: " + f.Name);
            var dc        = new DocComment(f.DocComment);
            var modifiers = new List <string>();

            if (f.IsGhost)
            {
                modifiers.Add("ghost");
            }
            if (f.IsStatic)
            {
                modifiers.Add("static");
            }
            var token = ToTokenNode(f.tok);
            var spec  = new List <SpecNode>();

            foreach (var req in f.Req)
            {
                spec.Add(ToSpecNode(req, "requires", token));
            }
            foreach (var ens in f.Ens)
            {
                spec.Add(ToSpecNode(ens, "ensures", token));
            }
            foreach (var reads in f.Reads)
            {
                spec.Add(ToSpecNode(reads, "reads", token));
            }
            spec.Add(ToSpecNode(f.Decreases, "decreases", token));
            return(new FunctionNode {
                Name = f.Name,
                Kind =
                    f is GreatestPredicate ? "greatest predicate"
          : f is LeastPredicate ? "least predicate"
          : f is Predicate || f is TwoStatePredicate ?
                    f.IsGhost ? "predicate"
            : "predicate method"
          : f.IsGhost ? "function"
          : "function method",
                Modifiers = modifiers,
                TypeParams = f.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                ValueParams = f.Formals.Select(vp => ToValueParamNode(vp, dc, false)).ToList(),
                ReturnType = ToTypeRefNode(f.ResultType, token),
                Spec = spec,
                UserDoc = dc.MainBody,
                Token = token,
            });
        }
Beispiel #9
0
        private ClassNode ToClassNode(ClassDecl cl)
        {
            Console.WriteLine("Class: " + cl.Name);
            var dc = new DocComment(cl.DocComment);

            return(new ClassNode {
                Name = cl.Name,
                IsTrait = cl is TraitDecl,
                TypeParams = cl.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                Extends = cl.ParentTraits.Select(t => t.ToString()).ToList(),
                Members = cl.Members.Select(ToDeclNode).ToList(),
                UserDoc = dc.MainBody,
                Token = ToTokenNode(cl.tok),
            });
        }
Beispiel #10
0
        private MethodNode ToMethodNode(Method m)
        {
            Console.WriteLine("Method: " + m.Name);
            var dc        = new DocComment(m.DocComment);
            var modifiers = new List <string>();

            if (m.IsGhost)
            {
                modifiers.Add("ghost");
            }
            if (m.IsStatic)
            {
                modifiers.Add("static");
            }
            var token = ToTokenNode(m.tok);
            var spec  = new List <SpecNode>();

            foreach (var req in m.Req)
            {
                spec.Add(ToSpecNode(req, "requires", token));
            }
            foreach (var ens in m.Ens)
            {
                spec.Add(ToSpecNode(ens, "ensures", token));
            }
            spec.Add(ToSpecNode(m.Mod, "modifies", token));
            spec.Add(ToSpecNode(m.Decreases, "decreases", token));
            return(new MethodNode {
                Name = m.Name,
                Kind =
                    m is Constructor ? "constructor"
          : m is GreatestLemma ? "greatest lemma"
          : m is LeastLemma ? "least lemma"
          : m is TwoStateLemma ? "twostate lemma"
          : m is Lemma ? "lemma"
          : "method",
                Modifiers = modifiers,
                TypeParams = m.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                ValueParams = m.Ins.Select(vp => ToValueParamNode(vp, dc, false)).ToList(),
                Returns = m.Outs.Select(vp => ToValueParamNode(vp, dc, true)).ToList(),
                Spec = spec,
                UserDoc = dc.MainBody,
                Token = token,
            });
        }
Beispiel #11
0
        private ValueParamNode ToValueParamNode(Formal f, DocComment dc, bool isOut)
        {
            Console.WriteLine("Value parameter: " + f.Name);
            string userDoc = null;

            if (dc != null)
            {
                var tags = isOut ? dc.ReturnTags : dc.ValueParamTags;
                if (tags != null)
                {
                    userDoc = tags.GetValueOrDefault(f.Name);
                }
            }
            var token = ToTokenNode(f.tok);

            return(new ValueParamNode {
                Name = f.Name,
                Type = ToTypeRefNode(f.Type, token),
                UserDoc = userDoc,
                Token = token,
            });
        }
Beispiel #12
0
        private DatatypeNode ToDatatypeNode(DatatypeDecl dt)
        {
            Console.WriteLine("Datatype: " + dt.Name);
            var dc    = new DocComment(dt.DocComment);
            var ctors = new List <CtorNode>();

            foreach (var ctor in dt.Ctors)
            {
                Console.WriteLine("Constructor: " + ctor.Name);
                ctors.Add(new CtorNode {
                    Name        = ctor.Name,
                    ValueParams = ctor.Formals.Select(f => ToValueParamNode(f, null, false)).ToList(),
                    Token       = ToTokenNode(ctor.tok),
                });
            }
            return(new DatatypeNode {
                Name = dt.Name,
                IsCodata = dt is CoDatatypeDecl,
                TypeParams = dt.TypeArgs.Select(tp => ToTypeParamNode(tp, dc)).ToList(),
                Ctors = ctors,
                UserDoc = dc.MainBody,
            });
        }