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), }); }
void NewtypeDecl(ModuleDefinition module, out TopLevelDecl td) { IToken id, bvId; Attributes attrs = null; td = null; Type baseType = null; Expression wh; Expect(79); while (la.kind == 46) { Attribute(ref attrs); } NoUSIdent(out id); Expect(67); if (IsIdentColonOrBar()) { NoUSIdent(out bvId); if (la.kind == 21) { Get(); Type(out baseType); } if (baseType == null) { baseType = new OperationTypeProxy(true, true, false, false, false, false); } Expect(23); Expression(out wh, false, true); td = new NewtypeDecl(theVerifyThisFile ? id : new IncludeToken(id), id.val, module, new BoundVar(bvId, bvId.val, baseType), wh, attrs); } else if (StartOf(3)) { Type(out baseType); td = new NewtypeDecl(theVerifyThisFile ? id : new IncludeToken(id), id.val, module, baseType, attrs); } else SynErr(145); }
void NewtypeDecl(DeclModifierData dmod, ModuleDefinition module, out TopLevelDecl td) { IToken id, bvId; Attributes attrs = null; td = null; Type baseType = null; Expression wh; CheckDeclModifiers(dmod, "Newtypes", AllowedDeclModifiers.None); Expect(84); while (la.kind == 50) { Attribute(ref attrs); } NoUSIdent(out id); Expect(74); if (IsIdentColonOrBar()) { NoUSIdent(out bvId); if (la.kind == 22) { Get(); Type(out baseType); } if (baseType == null) { baseType = new InferredTypeProxy(); } Expect(24); Expression(out wh, false, true); td = new NewtypeDecl(theVerifyThisFile ? id : new IncludeToken(id), id.val, module, new BoundVar(bvId, bvId.val, baseType), wh, attrs); } else if (StartOf(6)) { Type(out baseType); td = new NewtypeDecl(theVerifyThisFile ? id : new IncludeToken(id), id.val, module, baseType, attrs); } else SynErr(159); }