From dba7371dbb7f5da7dd762ee7a86a21ba3f2387ee Mon Sep 17 00:00:00 2001 From: Mikael Mayer Date: Tue, 6 Aug 2024 13:31:53 -0500 Subject: [PATCH 1/5] Add test for issue #5643 --- .../LitTests/LitTest/git-issues/git-issue-5643.dfy | 9 +++++++++ .../LitTest/git-issues/git-issue-5643.dfy.expect | 2 ++ 2 files changed, 11 insertions(+) create mode 100644 Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy create mode 100644 Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect diff --git a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy new file mode 100644 index 00000000000..5c39460385e --- /dev/null +++ b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy @@ -0,0 +1,9 @@ +// RUN: %testDafnyForEachCompiler "%s" + +datatype D = A | B + +const c := set d: D | true :: d + +method Main() { + print c, "\n"; +} \ No newline at end of file diff --git a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect new file mode 100644 index 00000000000..0f497be06d5 --- /dev/null +++ b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect @@ -0,0 +1,2 @@ + +Dafny program verifier finished with TODO verified, TODO errors From d0cda9988ed1d233ca98c568e809f60415f983e0 Mon Sep 17 00:00:00 2001 From: Mikael Mayer Date: Tue, 6 Aug 2024 15:46:30 -0500 Subject: [PATCH 2/5] Fix: Support for enumerating datatypes in the Rust backend --- .../Backends/Dafny/DafnyCodeGenerator.cs | 16 +- .../Backends/Rust/Dafny-compiler-rust.dfy | 35 + Source/DafnyCore/GeneratedFromDafny/DCOMP.cs | 5081 +++++++++-------- .../LitTest/git-issues/git-issue-5643.dfy | 6 +- .../git-issues/git-issue-5643.dfy.expect | 3 +- docs/dev/news/5643.fix | 1 + 6 files changed, 2608 insertions(+), 2534 deletions(-) create mode 100644 docs/dev/news/5643.fix diff --git a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs index 572bd8ad845..e4255f77938 100644 --- a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs +++ b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs @@ -2333,7 +2333,21 @@ protected override void EmitSeqBoundedPool(Expression of, bool includeDuplicates } protected override void EmitDatatypeBoundedPool(IVariable bv, string propertySuffix, bool inLetExprBody, ConcreteSyntaxTree wr, ConcreteSyntaxTree wStmts) { - AddUnsupported("EmitDatatypeBoundedPool"); + if (GetExprConverter(wr, wStmts, out var exprBuilder, out var convert)) { + if (bv.Type.IsDatatype && bv.Type.AsDatatype is {} datatypeDecl) { + + var signature = Sequence<_IFormal>.FromArray(new _IFormal[] {}); + var c = exprBuilder.Builder.Call(signature); + c.SetName((DAST.CallName)DAST.CallName.create_CallName(Sequence.UnicodeFromString("_AllSingletonConstructors"), + Option<_IType>.create_None(), Option<_IFormal>.create_None(), signature)); + var wrc = new BuilderSyntaxTree(c, this); + EmitTypeName_Companion(bv.Type, wrc, wr, bv.Tok, null); + } else { + throw new InvalidOperationException("Datatype Bounded pool on non-datatype value"); + } + } else { + throw new InvalidOperationException(); + } } protected override void CreateIIFE(string bvName, Type bvType, IToken bvTok, Type bodyType, IToken bodyTok, diff --git a/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy b/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy index c9c13cbd022..10f464e55af 100644 --- a/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy +++ b/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy @@ -2114,10 +2114,20 @@ module {:extern "DCOMP"} DafnyToRustCompiler { var datatypeName := escapeName(c.name); var ctors: seq := []; var variances := Std.Collections.Seq.Map((typeParamDecl: TypeArgDecl) => typeParamDecl.variance, c.typeParams); + var singletonConstructors := []; for i := 0 to |c.ctors| { var ctor := c.ctors[i]; var ctorArgs: seq := []; var isNumeric := false; + if |ctor.args| == 0 { + var instantiation := R.StructBuild(R.Identifier(datatypeName).MSel(escapeName(ctor.name)), []); + if IsRcWrapped(c.attributes) { + instantiation := R.RcNew(instantiation); + } + singletonConstructors := singletonConstructors + [ + instantiation + ]; + } for j := 0 to |ctor.args| { var dtor := ctor.args[j]; var formalType := GenType(dtor.formal.typ, GenTypeContext.default()); @@ -2506,6 +2516,31 @@ module {:extern "DCOMP"} DafnyToRustCompiler { ]; } + if |singletonConstructors| == |c.ctors| { + var datatypeType := R.TypeApp(R.TIdentifier(datatypeName), rTypeParams); + var instantiationType := + if IsRcWrapped(c.attributes) then + R.Rc(datatypeType) + else + datatypeType; + s := s + [ + R.ImplDecl( + R.Impl( + rTypeParamsDecls, + datatypeType, + "", + [R.FnDecl( + R.PUB, + R.Fn( + "_AllSingletonConstructors", [], + [], + Some(R.dafny_runtime_type.MSel("SequenceIter").Apply([instantiationType])), + "", + Some(R.dafny_runtime.MSel("seq!").Apply(singletonConstructors).Sel("iter").Apply([])) + ) + )]))]; + } + // Implementation of Eq when c supports equality if cIsEq { s := s + [R.ImplDecl( diff --git a/Source/DafnyCore/GeneratedFromDafny/DCOMP.cs b/Source/DafnyCore/GeneratedFromDafny/DCOMP.cs index c43b40450cc..ed605c52c46 100644 --- a/Source/DafnyCore/GeneratedFromDafny/DCOMP.cs +++ b/Source/DafnyCore/GeneratedFromDafny/DCOMP.cs @@ -1384,344 +1384,365 @@ public bool DatatypeIsEq(DAST._IDatatype c) { _1259_variances = Std.Collections.Seq.__default.Map(((System.Func)((_1260_typeParamDecl) => { return (_1260_typeParamDecl).dtor_variance; })), (c).dtor_typeParams); + Dafny.ISequence _1261_singletonConstructors; + _1261_singletonConstructors = Dafny.Sequence.FromElements(); BigInteger _hi12 = new BigInteger(((c).dtor_ctors).Count); - for (BigInteger _1261_i = BigInteger.Zero; _1261_i < _hi12; _1261_i++) { - DAST._IDatatypeCtor _1262_ctor; - _1262_ctor = ((c).dtor_ctors).Select(_1261_i); - Dafny.ISequence _1263_ctorArgs; - _1263_ctorArgs = Dafny.Sequence.FromElements(); - bool _1264_isNumeric; - _1264_isNumeric = false; - BigInteger _hi13 = new BigInteger(((_1262_ctor).dtor_args).Count); - for (BigInteger _1265_j = BigInteger.Zero; _1265_j < _hi13; _1265_j++) { - DAST._IDatatypeDtor _1266_dtor; - _1266_dtor = ((_1262_ctor).dtor_args).Select(_1265_j); - RAST._IType _1267_formalType; + for (BigInteger _1262_i = BigInteger.Zero; _1262_i < _hi12; _1262_i++) { + DAST._IDatatypeCtor _1263_ctor; + _1263_ctor = ((c).dtor_ctors).Select(_1262_i); + Dafny.ISequence _1264_ctorArgs; + _1264_ctorArgs = Dafny.Sequence.FromElements(); + bool _1265_isNumeric; + _1265_isNumeric = false; + if ((new BigInteger(((_1263_ctor).dtor_args).Count)).Sign == 0) { + RAST._IExpr _1266_instantiation; + _1266_instantiation = RAST.Expr.create_StructBuild((RAST.Expr.create_Identifier(_1257_datatypeName)).MSel(DCOMP.__default.escapeName((_1263_ctor).dtor_name)), Dafny.Sequence.FromElements()); + if ((this).IsRcWrapped((c).dtor_attributes)) { + _1266_instantiation = RAST.__default.RcNew(_1266_instantiation); + } + _1261_singletonConstructors = Dafny.Sequence.Concat(_1261_singletonConstructors, Dafny.Sequence.FromElements(_1266_instantiation)); + } + BigInteger _hi13 = new BigInteger(((_1263_ctor).dtor_args).Count); + for (BigInteger _1267_j = BigInteger.Zero; _1267_j < _hi13; _1267_j++) { + DAST._IDatatypeDtor _1268_dtor; + _1268_dtor = ((_1263_ctor).dtor_args).Select(_1267_j); + RAST._IType _1269_formalType; RAST._IType _out74; - _out74 = (this).GenType(((_1266_dtor).dtor_formal).dtor_typ, DCOMP.GenTypeContext.@default()); - _1267_formalType = _out74; - Dafny.ISequence _1268_formalName; - _1268_formalName = DCOMP.__default.escapeName(((_1266_dtor).dtor_formal).dtor_name); - if (((_1265_j).Sign == 0) && ((Dafny.Sequence.UnicodeFromString("0")).Equals(_1268_formalName))) { - _1264_isNumeric = true; + _out74 = (this).GenType(((_1268_dtor).dtor_formal).dtor_typ, DCOMP.GenTypeContext.@default()); + _1269_formalType = _out74; + Dafny.ISequence _1270_formalName; + _1270_formalName = DCOMP.__default.escapeName(((_1268_dtor).dtor_formal).dtor_name); + if (((_1267_j).Sign == 0) && ((Dafny.Sequence.UnicodeFromString("0")).Equals(_1270_formalName))) { + _1265_isNumeric = true; } - if ((((_1265_j).Sign != 0) && (_1264_isNumeric)) && (!(Std.Strings.__default.OfNat(_1265_j)).Equals(_1268_formalName))) { - (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Formal extern names were supposed to be numeric but got "), _1268_formalName), Dafny.Sequence.UnicodeFromString(" instead of ")), Std.Strings.__default.OfNat(_1265_j))); - _1264_isNumeric = false; + if ((((_1267_j).Sign != 0) && (_1265_isNumeric)) && (!(Std.Strings.__default.OfNat(_1267_j)).Equals(_1270_formalName))) { + (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Formal extern names were supposed to be numeric but got "), _1270_formalName), Dafny.Sequence.UnicodeFromString(" instead of ")), Std.Strings.__default.OfNat(_1267_j))); + _1265_isNumeric = false; } if ((c).dtor_isCo) { - _1263_ctorArgs = Dafny.Sequence.Concat(_1263_ctorArgs, Dafny.Sequence.FromElements(RAST.Field.create(RAST.Visibility.create_PRIV(), RAST.Formal.create(_1268_formalName, RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("LazyFieldWrapper")), Dafny.Sequence.FromElements(_1267_formalType)))))); + _1264_ctorArgs = Dafny.Sequence.Concat(_1264_ctorArgs, Dafny.Sequence.FromElements(RAST.Field.create(RAST.Visibility.create_PRIV(), RAST.Formal.create(_1270_formalName, RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("LazyFieldWrapper")), Dafny.Sequence.FromElements(_1269_formalType)))))); } else { - _1263_ctorArgs = Dafny.Sequence.Concat(_1263_ctorArgs, Dafny.Sequence.FromElements(RAST.Field.create(RAST.Visibility.create_PRIV(), RAST.Formal.create(_1268_formalName, _1267_formalType)))); + _1264_ctorArgs = Dafny.Sequence.Concat(_1264_ctorArgs, Dafny.Sequence.FromElements(RAST.Field.create(RAST.Visibility.create_PRIV(), RAST.Formal.create(_1270_formalName, _1269_formalType)))); } } - RAST._IFields _1269_namedFields; - _1269_namedFields = RAST.Fields.create_NamedFields(_1263_ctorArgs); - if (_1264_isNumeric) { - _1269_namedFields = (_1269_namedFields).ToNamelessFields(); + RAST._IFields _1271_namedFields; + _1271_namedFields = RAST.Fields.create_NamedFields(_1264_ctorArgs); + if (_1265_isNumeric) { + _1271_namedFields = (_1271_namedFields).ToNamelessFields(); } - _1258_ctors = Dafny.Sequence.Concat(_1258_ctors, Dafny.Sequence.FromElements(RAST.EnumCase.create(DCOMP.__default.escapeName((_1262_ctor).dtor_name), _1269_namedFields))); + _1258_ctors = Dafny.Sequence.Concat(_1258_ctors, Dafny.Sequence.FromElements(RAST.EnumCase.create(DCOMP.__default.escapeName((_1263_ctor).dtor_name), _1271_namedFields))); } - Dafny.ISequence> _1270_selfPath; - _1270_selfPath = Dafny.Sequence>.FromElements((c).dtor_name); - Dafny.ISequence _1271_implBodyRaw; - Dafny.IMap>,Dafny.ISequence> _1272_traitBodies; + Dafny.ISequence> _1272_selfPath; + _1272_selfPath = Dafny.Sequence>.FromElements((c).dtor_name); + Dafny.ISequence _1273_implBodyRaw; + Dafny.IMap>,Dafny.ISequence> _1274_traitBodies; Dafny.ISequence _out75; Dafny.IMap>,Dafny.ISequence> _out76; - (this).GenClassImplBody((c).dtor_body, false, DAST.Type.create_UserDefined(DAST.ResolvedType.create(_1270_selfPath, _1253_typeParamsSeq, DAST.ResolvedTypeBase.create_Datatype(_1259_variances), (c).dtor_attributes, Dafny.Sequence>.FromElements(), Dafny.Sequence.FromElements())), _1253_typeParamsSeq, out _out75, out _out76); - _1271_implBodyRaw = _out75; - _1272_traitBodies = _out76; - Dafny.ISequence _1273_implBody; - _1273_implBody = _1271_implBodyRaw; - Dafny.ISet> _1274_emittedFields; - _1274_emittedFields = Dafny.Set>.FromElements(); + (this).GenClassImplBody((c).dtor_body, false, DAST.Type.create_UserDefined(DAST.ResolvedType.create(_1272_selfPath, _1253_typeParamsSeq, DAST.ResolvedTypeBase.create_Datatype(_1259_variances), (c).dtor_attributes, Dafny.Sequence>.FromElements(), Dafny.Sequence.FromElements())), _1253_typeParamsSeq, out _out75, out _out76); + _1273_implBodyRaw = _out75; + _1274_traitBodies = _out76; + Dafny.ISequence _1275_implBody; + _1275_implBody = _1273_implBodyRaw; + Dafny.ISet> _1276_emittedFields; + _1276_emittedFields = Dafny.Set>.FromElements(); BigInteger _hi14 = new BigInteger(((c).dtor_ctors).Count); - for (BigInteger _1275_i = BigInteger.Zero; _1275_i < _hi14; _1275_i++) { - DAST._IDatatypeCtor _1276_ctor; - _1276_ctor = ((c).dtor_ctors).Select(_1275_i); - BigInteger _hi15 = new BigInteger(((_1276_ctor).dtor_args).Count); - for (BigInteger _1277_j = BigInteger.Zero; _1277_j < _hi15; _1277_j++) { - DAST._IDatatypeDtor _1278_dtor; - _1278_dtor = ((_1276_ctor).dtor_args).Select(_1277_j); - Dafny.ISequence _1279_callName; - _1279_callName = Std.Wrappers.Option>.GetOr((_1278_dtor).dtor_callName, DCOMP.__default.escapeName(((_1278_dtor).dtor_formal).dtor_name)); - if (!((_1274_emittedFields).Contains(_1279_callName))) { - _1274_emittedFields = Dafny.Set>.Union(_1274_emittedFields, Dafny.Set>.FromElements(_1279_callName)); - RAST._IType _1280_formalType; + for (BigInteger _1277_i = BigInteger.Zero; _1277_i < _hi14; _1277_i++) { + DAST._IDatatypeCtor _1278_ctor; + _1278_ctor = ((c).dtor_ctors).Select(_1277_i); + BigInteger _hi15 = new BigInteger(((_1278_ctor).dtor_args).Count); + for (BigInteger _1279_j = BigInteger.Zero; _1279_j < _hi15; _1279_j++) { + DAST._IDatatypeDtor _1280_dtor; + _1280_dtor = ((_1278_ctor).dtor_args).Select(_1279_j); + Dafny.ISequence _1281_callName; + _1281_callName = Std.Wrappers.Option>.GetOr((_1280_dtor).dtor_callName, DCOMP.__default.escapeName(((_1280_dtor).dtor_formal).dtor_name)); + if (!((_1276_emittedFields).Contains(_1281_callName))) { + _1276_emittedFields = Dafny.Set>.Union(_1276_emittedFields, Dafny.Set>.FromElements(_1281_callName)); + RAST._IType _1282_formalType; RAST._IType _out77; - _out77 = (this).GenType(((_1278_dtor).dtor_formal).dtor_typ, DCOMP.GenTypeContext.@default()); - _1280_formalType = _out77; - Dafny.ISequence _1281_cases; - _1281_cases = Dafny.Sequence.FromElements(); + _out77 = (this).GenType(((_1280_dtor).dtor_formal).dtor_typ, DCOMP.GenTypeContext.@default()); + _1282_formalType = _out77; + Dafny.ISequence _1283_cases; + _1283_cases = Dafny.Sequence.FromElements(); BigInteger _hi16 = new BigInteger(((c).dtor_ctors).Count); - for (BigInteger _1282_k = BigInteger.Zero; _1282_k < _hi16; _1282_k++) { - DAST._IDatatypeCtor _1283_ctor2; - _1283_ctor2 = ((c).dtor_ctors).Select(_1282_k); - Dafny.ISequence _1284_pattern; - _1284_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), DCOMP.__default.escapeName((_1283_ctor2).dtor_name)); - Dafny.ISequence _1285_rhs = Dafny.Sequence.Empty; - Std.Wrappers._IOption> _1286_hasMatchingField; - _1286_hasMatchingField = Std.Wrappers.Option>.create_None(); - Dafny.ISequence _1287_patternInner; - _1287_patternInner = Dafny.Sequence.UnicodeFromString(""); - bool _1288_isNumeric; - _1288_isNumeric = false; - BigInteger _hi17 = new BigInteger(((_1283_ctor2).dtor_args).Count); - for (BigInteger _1289_l = BigInteger.Zero; _1289_l < _hi17; _1289_l++) { - DAST._IDatatypeDtor _1290_dtor2; - _1290_dtor2 = ((_1283_ctor2).dtor_args).Select(_1289_l); - Dafny.ISequence _1291_patternName; - _1291_patternName = DCOMP.__default.escapeDtor(((_1290_dtor2).dtor_formal).dtor_name); - Dafny.ISequence _1292_varName; - _1292_varName = DCOMP.__default.escapeField(((_1290_dtor2).dtor_formal).dtor_name); - if (((_1289_l).Sign == 0) && ((_1291_patternName).Equals(Dafny.Sequence.UnicodeFromString("0")))) { - _1288_isNumeric = true; + for (BigInteger _1284_k = BigInteger.Zero; _1284_k < _hi16; _1284_k++) { + DAST._IDatatypeCtor _1285_ctor2; + _1285_ctor2 = ((c).dtor_ctors).Select(_1284_k); + Dafny.ISequence _1286_pattern; + _1286_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), DCOMP.__default.escapeName((_1285_ctor2).dtor_name)); + Dafny.ISequence _1287_rhs = Dafny.Sequence.Empty; + Std.Wrappers._IOption> _1288_hasMatchingField; + _1288_hasMatchingField = Std.Wrappers.Option>.create_None(); + Dafny.ISequence _1289_patternInner; + _1289_patternInner = Dafny.Sequence.UnicodeFromString(""); + bool _1290_isNumeric; + _1290_isNumeric = false; + BigInteger _hi17 = new BigInteger(((_1285_ctor2).dtor_args).Count); + for (BigInteger _1291_l = BigInteger.Zero; _1291_l < _hi17; _1291_l++) { + DAST._IDatatypeDtor _1292_dtor2; + _1292_dtor2 = ((_1285_ctor2).dtor_args).Select(_1291_l); + Dafny.ISequence _1293_patternName; + _1293_patternName = DCOMP.__default.escapeDtor(((_1292_dtor2).dtor_formal).dtor_name); + Dafny.ISequence _1294_varName; + _1294_varName = DCOMP.__default.escapeField(((_1292_dtor2).dtor_formal).dtor_name); + if (((_1291_l).Sign == 0) && ((_1293_patternName).Equals(Dafny.Sequence.UnicodeFromString("0")))) { + _1290_isNumeric = true; } - if (_1288_isNumeric) { - _1291_patternName = Std.Wrappers.Option>.GetOr((_1290_dtor2).dtor_callName, Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("v"), Std.Strings.__default.OfNat(_1289_l))); - _1292_varName = _1291_patternName; + if (_1290_isNumeric) { + _1293_patternName = Std.Wrappers.Option>.GetOr((_1292_dtor2).dtor_callName, Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("v"), Std.Strings.__default.OfNat(_1291_l))); + _1294_varName = _1293_patternName; } - if (object.Equals(((_1278_dtor).dtor_formal).dtor_name, ((_1290_dtor2).dtor_formal).dtor_name)) { - _1286_hasMatchingField = Std.Wrappers.Option>.create_Some(_1292_varName); + if (object.Equals(((_1280_dtor).dtor_formal).dtor_name, ((_1292_dtor2).dtor_formal).dtor_name)) { + _1288_hasMatchingField = Std.Wrappers.Option>.create_Some(_1294_varName); } - _1287_patternInner = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1287_patternInner, _1291_patternName), Dafny.Sequence.UnicodeFromString(", ")); + _1289_patternInner = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1289_patternInner, _1293_patternName), Dafny.Sequence.UnicodeFromString(", ")); } - if (_1288_isNumeric) { - _1284_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1284_pattern, Dafny.Sequence.UnicodeFromString("(")), _1287_patternInner), Dafny.Sequence.UnicodeFromString(")")); + if (_1290_isNumeric) { + _1286_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1286_pattern, Dafny.Sequence.UnicodeFromString("(")), _1289_patternInner), Dafny.Sequence.UnicodeFromString(")")); } else { - _1284_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1284_pattern, Dafny.Sequence.UnicodeFromString("{")), _1287_patternInner), Dafny.Sequence.UnicodeFromString("}")); + _1286_pattern = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1286_pattern, Dafny.Sequence.UnicodeFromString("{")), _1289_patternInner), Dafny.Sequence.UnicodeFromString("}")); } - if ((_1286_hasMatchingField).is_Some) { + if ((_1288_hasMatchingField).is_Some) { if ((c).dtor_isCo) { - _1285_rhs = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::std::ops::Deref::deref(&"), (_1286_hasMatchingField).dtor_value), Dafny.Sequence.UnicodeFromString(".0)")); + _1287_rhs = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::std::ops::Deref::deref(&"), (_1288_hasMatchingField).dtor_value), Dafny.Sequence.UnicodeFromString(".0)")); } else { - _1285_rhs = Dafny.Sequence.Concat((_1286_hasMatchingField).dtor_value, Dafny.Sequence.UnicodeFromString("")); + _1287_rhs = Dafny.Sequence.Concat((_1288_hasMatchingField).dtor_value, Dafny.Sequence.UnicodeFromString("")); } } else { - _1285_rhs = (this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString("field does not exist on this variant")); + _1287_rhs = (this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString("field does not exist on this variant")); } - RAST._IMatchCase _1293_ctorMatch; - _1293_ctorMatch = RAST.MatchCase.create(_1284_pattern, RAST.Expr.create_RawExpr(_1285_rhs)); - _1281_cases = Dafny.Sequence.Concat(_1281_cases, Dafny.Sequence.FromElements(_1293_ctorMatch)); + RAST._IMatchCase _1295_ctorMatch; + _1295_ctorMatch = RAST.MatchCase.create(_1286_pattern, RAST.Expr.create_RawExpr(_1287_rhs)); + _1283_cases = Dafny.Sequence.Concat(_1283_cases, Dafny.Sequence.FromElements(_1295_ctorMatch)); } if ((new BigInteger(((c).dtor_typeParams).Count)).Sign == 1) { - _1281_cases = Dafny.Sequence.Concat(_1281_cases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::_PhantomVariant(..)")), RAST.Expr.create_RawExpr((this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString("")))))); + _1283_cases = Dafny.Sequence.Concat(_1283_cases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::_PhantomVariant(..)")), RAST.Expr.create_RawExpr((this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString("")))))); } - RAST._IExpr _1294_methodBody; - _1294_methodBody = RAST.Expr.create_Match(RAST.__default.self, _1281_cases); - _1273_implBody = Dafny.Sequence.Concat(_1273_implBody, Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PUB(), RAST.Fn.create(_1279_callName, Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed), Std.Wrappers.Option.create_Some(RAST.Type.create_Borrowed(_1280_formalType)), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1294_methodBody))))); - } - } - } - Dafny.ISequence _1295_coerceTypes; - _1295_coerceTypes = Dafny.Sequence.FromElements(); - Dafny.ISequence _1296_rCoerceTypeParams; - _1296_rCoerceTypeParams = Dafny.Sequence.FromElements(); - Dafny.ISequence _1297_coerceArguments; - _1297_coerceArguments = Dafny.Sequence.FromElements(); - Dafny.IMap _1298_coerceMap; - _1298_coerceMap = Dafny.Map.FromElements(); - Dafny.IMap _1299_rCoerceMap; - _1299_rCoerceMap = Dafny.Map.FromElements(); - Dafny.IMap<_System._ITuple2,RAST._IExpr> _1300_coerceMapToArg; - _1300_coerceMapToArg = Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements(); + RAST._IExpr _1296_methodBody; + _1296_methodBody = RAST.Expr.create_Match(RAST.__default.self, _1283_cases); + _1275_implBody = Dafny.Sequence.Concat(_1275_implBody, Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PUB(), RAST.Fn.create(_1281_callName, Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed), Std.Wrappers.Option.create_Some(RAST.Type.create_Borrowed(_1282_formalType)), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1296_methodBody))))); + } + } + } + Dafny.ISequence _1297_coerceTypes; + _1297_coerceTypes = Dafny.Sequence.FromElements(); + Dafny.ISequence _1298_rCoerceTypeParams; + _1298_rCoerceTypeParams = Dafny.Sequence.FromElements(); + Dafny.ISequence _1299_coerceArguments; + _1299_coerceArguments = Dafny.Sequence.FromElements(); + Dafny.IMap _1300_coerceMap; + _1300_coerceMap = Dafny.Map.FromElements(); + Dafny.IMap _1301_rCoerceMap; + _1301_rCoerceMap = Dafny.Map.FromElements(); + Dafny.IMap<_System._ITuple2,RAST._IExpr> _1302_coerceMapToArg; + _1302_coerceMapToArg = Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements(); if ((new BigInteger(((c).dtor_typeParams).Count)).Sign == 1) { - Dafny.ISequence _1301_types; - _1301_types = Dafny.Sequence.FromElements(); + Dafny.ISequence _1303_types; + _1303_types = Dafny.Sequence.FromElements(); BigInteger _hi18 = new BigInteger(((c).dtor_typeParams).Count); - for (BigInteger _1302_typeI = BigInteger.Zero; _1302_typeI < _hi18; _1302_typeI++) { - DAST._ITypeArgDecl _1303_typeParam; - _1303_typeParam = ((c).dtor_typeParams).Select(_1302_typeI); - DAST._IType _1304_typeArg; - RAST._ITypeParamDecl _1305_rTypeParamDecl; + for (BigInteger _1304_typeI = BigInteger.Zero; _1304_typeI < _hi18; _1304_typeI++) { + DAST._ITypeArgDecl _1305_typeParam; + _1305_typeParam = ((c).dtor_typeParams).Select(_1304_typeI); + DAST._IType _1306_typeArg; + RAST._ITypeParamDecl _1307_rTypeParamDecl; DAST._IType _out78; RAST._ITypeParamDecl _out79; - (this).GenTypeParam(_1303_typeParam, out _out78, out _out79); - _1304_typeArg = _out78; - _1305_rTypeParamDecl = _out79; - RAST._IType _1306_rTypeArg; + (this).GenTypeParam(_1305_typeParam, out _out78, out _out79); + _1306_typeArg = _out78; + _1307_rTypeParamDecl = _out79; + RAST._IType _1308_rTypeArg; RAST._IType _out80; - _out80 = (this).GenType(_1304_typeArg, DCOMP.GenTypeContext.@default()); - _1306_rTypeArg = _out80; - _1301_types = Dafny.Sequence.Concat(_1301_types, Dafny.Sequence.FromElements(RAST.Type.create_TypeApp(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("marker"))).MSel(Dafny.Sequence.UnicodeFromString("PhantomData")), Dafny.Sequence.FromElements(_1306_rTypeArg)))); - if (((_1302_typeI) < (new BigInteger((_1259_variances).Count))) && (((_1259_variances).Select(_1302_typeI)).is_Nonvariant)) { - _1295_coerceTypes = Dafny.Sequence.Concat(_1295_coerceTypes, Dafny.Sequence.FromElements(_1306_rTypeArg)); + _out80 = (this).GenType(_1306_typeArg, DCOMP.GenTypeContext.@default()); + _1308_rTypeArg = _out80; + _1303_types = Dafny.Sequence.Concat(_1303_types, Dafny.Sequence.FromElements(RAST.Type.create_TypeApp(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("marker"))).MSel(Dafny.Sequence.UnicodeFromString("PhantomData")), Dafny.Sequence.FromElements(_1308_rTypeArg)))); + if (((_1304_typeI) < (new BigInteger((_1259_variances).Count))) && (((_1259_variances).Select(_1304_typeI)).is_Nonvariant)) { + _1297_coerceTypes = Dafny.Sequence.Concat(_1297_coerceTypes, Dafny.Sequence.FromElements(_1308_rTypeArg)); goto continue0; } - DAST._ITypeArgDecl _1307_coerceTypeParam; - DAST._ITypeArgDecl _1308_dt__update__tmp_h0 = _1303_typeParam; - Dafny.ISequence _1309_dt__update_hname_h0 = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_T"), Std.Strings.__default.OfNat(_1302_typeI)); - _1307_coerceTypeParam = DAST.TypeArgDecl.create(_1309_dt__update_hname_h0, (_1308_dt__update__tmp_h0).dtor_bounds, (_1308_dt__update__tmp_h0).dtor_variance); - DAST._IType _1310_coerceTypeArg; - RAST._ITypeParamDecl _1311_rCoerceTypeParamDecl; + DAST._ITypeArgDecl _1309_coerceTypeParam; + DAST._ITypeArgDecl _1310_dt__update__tmp_h0 = _1305_typeParam; + Dafny.ISequence _1311_dt__update_hname_h0 = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_T"), Std.Strings.__default.OfNat(_1304_typeI)); + _1309_coerceTypeParam = DAST.TypeArgDecl.create(_1311_dt__update_hname_h0, (_1310_dt__update__tmp_h0).dtor_bounds, (_1310_dt__update__tmp_h0).dtor_variance); + DAST._IType _1312_coerceTypeArg; + RAST._ITypeParamDecl _1313_rCoerceTypeParamDecl; DAST._IType _out81; RAST._ITypeParamDecl _out82; - (this).GenTypeParam(_1307_coerceTypeParam, out _out81, out _out82); - _1310_coerceTypeArg = _out81; - _1311_rCoerceTypeParamDecl = _out82; - _1298_coerceMap = Dafny.Map.Merge(_1298_coerceMap, Dafny.Map.FromElements(new Dafny.Pair(_1304_typeArg, _1310_coerceTypeArg))); - RAST._IType _1312_rCoerceType; + (this).GenTypeParam(_1309_coerceTypeParam, out _out81, out _out82); + _1312_coerceTypeArg = _out81; + _1313_rCoerceTypeParamDecl = _out82; + _1300_coerceMap = Dafny.Map.Merge(_1300_coerceMap, Dafny.Map.FromElements(new Dafny.Pair(_1306_typeArg, _1312_coerceTypeArg))); + RAST._IType _1314_rCoerceType; RAST._IType _out83; - _out83 = (this).GenType(_1310_coerceTypeArg, DCOMP.GenTypeContext.@default()); - _1312_rCoerceType = _out83; - _1299_rCoerceMap = Dafny.Map.Merge(_1299_rCoerceMap, Dafny.Map.FromElements(new Dafny.Pair(_1306_rTypeArg, _1312_rCoerceType))); - _1295_coerceTypes = Dafny.Sequence.Concat(_1295_coerceTypes, Dafny.Sequence.FromElements(_1312_rCoerceType)); - _1296_rCoerceTypeParams = Dafny.Sequence.Concat(_1296_rCoerceTypeParams, Dafny.Sequence.FromElements(_1311_rCoerceTypeParamDecl)); - Dafny.ISequence _1313_coerceFormal; - _1313_coerceFormal = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("f_"), Std.Strings.__default.OfNat(_1302_typeI)); - _1300_coerceMapToArg = Dafny.Map<_System._ITuple2, RAST._IExpr>.Merge(_1300_coerceMapToArg, Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements(new Dafny.Pair<_System._ITuple2, RAST._IExpr>(_System.Tuple2.create(_1306_rTypeArg, _1312_rCoerceType), (RAST.Expr.create_Identifier(_1313_coerceFormal)).Clone()))); - _1297_coerceArguments = Dafny.Sequence.Concat(_1297_coerceArguments, Dafny.Sequence.FromElements(RAST.Formal.create(_1313_coerceFormal, RAST.__default.Rc(RAST.Type.create_IntersectionType(RAST.Type.create_ImplType(RAST.Type.create_FnType(Dafny.Sequence.FromElements(_1306_rTypeArg), _1312_rCoerceType)), RAST.__default.StaticTrait))))); + _out83 = (this).GenType(_1312_coerceTypeArg, DCOMP.GenTypeContext.@default()); + _1314_rCoerceType = _out83; + _1301_rCoerceMap = Dafny.Map.Merge(_1301_rCoerceMap, Dafny.Map.FromElements(new Dafny.Pair(_1308_rTypeArg, _1314_rCoerceType))); + _1297_coerceTypes = Dafny.Sequence.Concat(_1297_coerceTypes, Dafny.Sequence.FromElements(_1314_rCoerceType)); + _1298_rCoerceTypeParams = Dafny.Sequence.Concat(_1298_rCoerceTypeParams, Dafny.Sequence.FromElements(_1313_rCoerceTypeParamDecl)); + Dafny.ISequence _1315_coerceFormal; + _1315_coerceFormal = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("f_"), Std.Strings.__default.OfNat(_1304_typeI)); + _1302_coerceMapToArg = Dafny.Map<_System._ITuple2, RAST._IExpr>.Merge(_1302_coerceMapToArg, Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements(new Dafny.Pair<_System._ITuple2, RAST._IExpr>(_System.Tuple2.create(_1308_rTypeArg, _1314_rCoerceType), (RAST.Expr.create_Identifier(_1315_coerceFormal)).Clone()))); + _1299_coerceArguments = Dafny.Sequence.Concat(_1299_coerceArguments, Dafny.Sequence.FromElements(RAST.Formal.create(_1315_coerceFormal, RAST.__default.Rc(RAST.Type.create_IntersectionType(RAST.Type.create_ImplType(RAST.Type.create_FnType(Dafny.Sequence.FromElements(_1308_rTypeArg), _1314_rCoerceType)), RAST.__default.StaticTrait))))); continue0: ; } after0: ; - _1258_ctors = Dafny.Sequence.Concat(_1258_ctors, Dafny.Sequence.FromElements(RAST.EnumCase.create(Dafny.Sequence.UnicodeFromString("_PhantomVariant"), RAST.Fields.create_NamelessFields(Std.Collections.Seq.__default.Map(((System.Func)((_1314_tpe) => { - return RAST.NamelessField.create(RAST.Visibility.create_PRIV(), _1314_tpe); -})), _1301_types))))); - } - bool _1315_cIsEq; - _1315_cIsEq = (this).DatatypeIsEq(c); - s = Dafny.Sequence.FromElements(RAST.ModDecl.create_EnumDecl(RAST.Enum.create(((_1315_cIsEq) ? (Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("#[derive(PartialEq, Clone)]"))) : (Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("#[derive(Clone)]")))), _1257_datatypeName, _1255_rTypeParamsDecls, _1258_ctors)), RAST.ModDecl.create_ImplDecl(RAST.Impl.create_Impl(_1255_rTypeParamsDecls, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), _1256_whereConstraints, _1273_implBody))); - Dafny.ISequence _1316_printImplBodyCases; - _1316_printImplBodyCases = Dafny.Sequence.FromElements(); - Dafny.ISequence _1317_hashImplBodyCases; - _1317_hashImplBodyCases = Dafny.Sequence.FromElements(); - Dafny.ISequence _1318_coerceImplBodyCases; - _1318_coerceImplBodyCases = Dafny.Sequence.FromElements(); + _1258_ctors = Dafny.Sequence.Concat(_1258_ctors, Dafny.Sequence.FromElements(RAST.EnumCase.create(Dafny.Sequence.UnicodeFromString("_PhantomVariant"), RAST.Fields.create_NamelessFields(Std.Collections.Seq.__default.Map(((System.Func)((_1316_tpe) => { + return RAST.NamelessField.create(RAST.Visibility.create_PRIV(), _1316_tpe); +})), _1303_types))))); + } + bool _1317_cIsEq; + _1317_cIsEq = (this).DatatypeIsEq(c); + s = Dafny.Sequence.FromElements(RAST.ModDecl.create_EnumDecl(RAST.Enum.create(((_1317_cIsEq) ? (Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("#[derive(PartialEq, Clone)]"))) : (Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("#[derive(Clone)]")))), _1257_datatypeName, _1255_rTypeParamsDecls, _1258_ctors)), RAST.ModDecl.create_ImplDecl(RAST.Impl.create_Impl(_1255_rTypeParamsDecls, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), _1256_whereConstraints, _1275_implBody))); + Dafny.ISequence _1318_printImplBodyCases; + _1318_printImplBodyCases = Dafny.Sequence.FromElements(); + Dafny.ISequence _1319_hashImplBodyCases; + _1319_hashImplBodyCases = Dafny.Sequence.FromElements(); + Dafny.ISequence _1320_coerceImplBodyCases; + _1320_coerceImplBodyCases = Dafny.Sequence.FromElements(); BigInteger _hi19 = new BigInteger(((c).dtor_ctors).Count); - for (BigInteger _1319_i = BigInteger.Zero; _1319_i < _hi19; _1319_i++) { - DAST._IDatatypeCtor _1320_ctor; - _1320_ctor = ((c).dtor_ctors).Select(_1319_i); - Dafny.ISequence _1321_ctorMatch; - _1321_ctorMatch = DCOMP.__default.escapeName((_1320_ctor).dtor_name); - Dafny.ISequence _1322_modulePrefix; + for (BigInteger _1321_i = BigInteger.Zero; _1321_i < _hi19; _1321_i++) { + DAST._IDatatypeCtor _1322_ctor; + _1322_ctor = ((c).dtor_ctors).Select(_1321_i); + Dafny.ISequence _1323_ctorMatch; + _1323_ctorMatch = DCOMP.__default.escapeName((_1322_ctor).dtor_name); + Dafny.ISequence _1324_modulePrefix; if (((((c).dtor_enclosingModule))).Equals(Dafny.Sequence.UnicodeFromString("_module"))) { - _1322_modulePrefix = Dafny.Sequence.UnicodeFromString(""); + _1324_modulePrefix = Dafny.Sequence.UnicodeFromString(""); } else { - _1322_modulePrefix = Dafny.Sequence.Concat((((c).dtor_enclosingModule)), Dafny.Sequence.UnicodeFromString(".")); - } - Dafny.ISequence _1323_ctorName; - _1323_ctorName = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1322_modulePrefix, ((c).dtor_name)), Dafny.Sequence.UnicodeFromString(".")), ((_1320_ctor).dtor_name)); - if (((new BigInteger((_1323_ctorName).Count)) >= (new BigInteger(13))) && (((_1323_ctorName).Subsequence(BigInteger.Zero, new BigInteger(13))).Equals(Dafny.Sequence.UnicodeFromString("_System.Tuple")))) { - _1323_ctorName = Dafny.Sequence.UnicodeFromString(""); - } - RAST._IExpr _1324_printRhs; - _1324_printRhs = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("write!(_formatter, \""), _1323_ctorName), (((_1320_ctor).dtor_hasAnyArgs) ? (Dafny.Sequence.UnicodeFromString("(\")?")) : (Dafny.Sequence.UnicodeFromString("\")?"))))); - RAST._IExpr _1325_hashRhs; - _1325_hashRhs = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - Dafny.ISequence _1326_coerceRhsArgs; - _1326_coerceRhsArgs = Dafny.Sequence.FromElements(); - bool _1327_isNumeric; - _1327_isNumeric = false; - Dafny.ISequence _1328_ctorMatchInner; - _1328_ctorMatchInner = Dafny.Sequence.UnicodeFromString(""); - BigInteger _hi20 = new BigInteger(((_1320_ctor).dtor_args).Count); - for (BigInteger _1329_j = BigInteger.Zero; _1329_j < _hi20; _1329_j++) { - DAST._IDatatypeDtor _1330_dtor; - _1330_dtor = ((_1320_ctor).dtor_args).Select(_1329_j); - Dafny.ISequence _1331_patternName; - _1331_patternName = DCOMP.__default.escapeDtor(((_1330_dtor).dtor_formal).dtor_name); - Dafny.ISequence _1332_fieldName; - _1332_fieldName = DCOMP.__default.escapeField(((_1330_dtor).dtor_formal).dtor_name); - DAST._IType _1333_formalType; - _1333_formalType = ((_1330_dtor).dtor_formal).dtor_typ; - if (((_1329_j).Sign == 0) && ((_1332_fieldName).Equals(Dafny.Sequence.UnicodeFromString("0")))) { - _1327_isNumeric = true; - } - if (_1327_isNumeric) { - _1332_fieldName = Std.Wrappers.Option>.GetOr((_1330_dtor).dtor_callName, Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("v"), Std.Strings.__default.OfNat(_1329_j))); - } - if ((_1333_formalType).is_Arrow) { - _1325_hashRhs = (_1325_hashRhs).Then(((RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0"))).Sel(Dafny.Sequence.UnicodeFromString("hash"))).Apply1(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("_state")))); + _1324_modulePrefix = Dafny.Sequence.Concat((((c).dtor_enclosingModule)), Dafny.Sequence.UnicodeFromString(".")); + } + Dafny.ISequence _1325_ctorName; + _1325_ctorName = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1324_modulePrefix, ((c).dtor_name)), Dafny.Sequence.UnicodeFromString(".")), ((_1322_ctor).dtor_name)); + if (((new BigInteger((_1325_ctorName).Count)) >= (new BigInteger(13))) && (((_1325_ctorName).Subsequence(BigInteger.Zero, new BigInteger(13))).Equals(Dafny.Sequence.UnicodeFromString("_System.Tuple")))) { + _1325_ctorName = Dafny.Sequence.UnicodeFromString(""); + } + RAST._IExpr _1326_printRhs; + _1326_printRhs = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("write!(_formatter, \""), _1325_ctorName), (((_1322_ctor).dtor_hasAnyArgs) ? (Dafny.Sequence.UnicodeFromString("(\")?")) : (Dafny.Sequence.UnicodeFromString("\")?"))))); + RAST._IExpr _1327_hashRhs; + _1327_hashRhs = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); + Dafny.ISequence _1328_coerceRhsArgs; + _1328_coerceRhsArgs = Dafny.Sequence.FromElements(); + bool _1329_isNumeric; + _1329_isNumeric = false; + Dafny.ISequence _1330_ctorMatchInner; + _1330_ctorMatchInner = Dafny.Sequence.UnicodeFromString(""); + BigInteger _hi20 = new BigInteger(((_1322_ctor).dtor_args).Count); + for (BigInteger _1331_j = BigInteger.Zero; _1331_j < _hi20; _1331_j++) { + DAST._IDatatypeDtor _1332_dtor; + _1332_dtor = ((_1322_ctor).dtor_args).Select(_1331_j); + Dafny.ISequence _1333_patternName; + _1333_patternName = DCOMP.__default.escapeDtor(((_1332_dtor).dtor_formal).dtor_name); + Dafny.ISequence _1334_fieldName; + _1334_fieldName = DCOMP.__default.escapeField(((_1332_dtor).dtor_formal).dtor_name); + DAST._IType _1335_formalType; + _1335_formalType = ((_1332_dtor).dtor_formal).dtor_typ; + if (((_1331_j).Sign == 0) && ((_1334_fieldName).Equals(Dafny.Sequence.UnicodeFromString("0")))) { + _1329_isNumeric = true; + } + if (_1329_isNumeric) { + _1334_fieldName = Std.Wrappers.Option>.GetOr((_1332_dtor).dtor_callName, Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("v"), Std.Strings.__default.OfNat(_1331_j))); + } + if ((_1335_formalType).is_Arrow) { + _1327_hashRhs = (_1327_hashRhs).Then(((RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0"))).Sel(Dafny.Sequence.UnicodeFromString("hash"))).Apply1(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("_state")))); } else { - _1325_hashRhs = (_1325_hashRhs).Then(((RAST.Expr.create_Identifier(_1332_fieldName)).Sel(Dafny.Sequence.UnicodeFromString("hash"))).Apply1(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("_state")))); + _1327_hashRhs = (_1327_hashRhs).Then(((RAST.Expr.create_Identifier(_1334_fieldName)).Sel(Dafny.Sequence.UnicodeFromString("hash"))).Apply1(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("_state")))); } - _1328_ctorMatchInner = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1328_ctorMatchInner, ((_1327_isNumeric) ? (_1332_fieldName) : (_1331_patternName))), Dafny.Sequence.UnicodeFromString(", ")); - if ((_1329_j).Sign == 1) { - _1324_printRhs = (_1324_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("write!(_formatter, \", \")?"))); + _1330_ctorMatchInner = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1330_ctorMatchInner, ((_1329_isNumeric) ? (_1334_fieldName) : (_1333_patternName))), Dafny.Sequence.UnicodeFromString(", ")); + if ((_1331_j).Sign == 1) { + _1326_printRhs = (_1326_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("write!(_formatter, \", \")?"))); } - _1324_printRhs = (_1324_printRhs).Then(RAST.Expr.create_RawExpr((((_1333_formalType).is_Arrow) ? (Dafny.Sequence.UnicodeFromString("write!(_formatter, \"\")?")) : (Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::DafnyPrint::fmt_print("), _1332_fieldName), Dafny.Sequence.UnicodeFromString(", _formatter, false)?")))))); - RAST._IExpr _1334_coerceRhsArg = RAST.Expr.Default(); - RAST._IType _1335_formalTpe; + _1326_printRhs = (_1326_printRhs).Then(RAST.Expr.create_RawExpr((((_1335_formalType).is_Arrow) ? (Dafny.Sequence.UnicodeFromString("write!(_formatter, \"\")?")) : (Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::DafnyPrint::fmt_print("), _1334_fieldName), Dafny.Sequence.UnicodeFromString(", _formatter, false)?")))))); + RAST._IExpr _1336_coerceRhsArg = RAST.Expr.Default(); + RAST._IType _1337_formalTpe; RAST._IType _out84; - _out84 = (this).GenType(_1333_formalType, DCOMP.GenTypeContext.@default()); - _1335_formalTpe = _out84; - DAST._IType _1336_newFormalType; - _1336_newFormalType = (_1333_formalType).Replace(_1298_coerceMap); - RAST._IType _1337_newFormalTpe; - _1337_newFormalTpe = (_1335_formalTpe).Replace(_1299_rCoerceMap); - Std.Wrappers._IResult,RAST._IExpr>>> _1338_upcastConverter; - _1338_upcastConverter = (this).UpcastConversionLambda(_1333_formalType, _1335_formalTpe, _1336_newFormalType, _1337_newFormalTpe, _1300_coerceMapToArg); - if ((_1338_upcastConverter).is_Success) { - RAST._IExpr _1339_coercionFunction; - _1339_coercionFunction = (_1338_upcastConverter).dtor_value; - _1334_coerceRhsArg = (_1339_coercionFunction).Apply1(RAST.Expr.create_Identifier(_1331_patternName)); + _out84 = (this).GenType(_1335_formalType, DCOMP.GenTypeContext.@default()); + _1337_formalTpe = _out84; + DAST._IType _1338_newFormalType; + _1338_newFormalType = (_1335_formalType).Replace(_1300_coerceMap); + RAST._IType _1339_newFormalTpe; + _1339_newFormalTpe = (_1337_formalTpe).Replace(_1301_rCoerceMap); + Std.Wrappers._IResult,RAST._IExpr>>> _1340_upcastConverter; + _1340_upcastConverter = (this).UpcastConversionLambda(_1335_formalType, _1337_formalTpe, _1338_newFormalType, _1339_newFormalTpe, _1302_coerceMapToArg); + if ((_1340_upcastConverter).is_Success) { + RAST._IExpr _1341_coercionFunction; + _1341_coercionFunction = (_1340_upcastConverter).dtor_value; + _1336_coerceRhsArg = (_1341_coercionFunction).Apply1(RAST.Expr.create_Identifier(_1333_patternName)); } else { - (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Could not generate coercion function for contructor "), Std.Strings.__default.OfNat(_1329_j)), Dafny.Sequence.UnicodeFromString(" of ")), _1257_datatypeName)); - _1334_coerceRhsArg = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("todo!"))).Apply1(RAST.Expr.create_LiteralString((this.error).dtor_value, false, false)); + (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Could not generate coercion function for contructor "), Std.Strings.__default.OfNat(_1331_j)), Dafny.Sequence.UnicodeFromString(" of ")), _1257_datatypeName)); + _1336_coerceRhsArg = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("todo!"))).Apply1(RAST.Expr.create_LiteralString((this.error).dtor_value, false, false)); } - _1326_coerceRhsArgs = Dafny.Sequence.Concat(_1326_coerceRhsArgs, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(_1331_patternName, _1334_coerceRhsArg))); + _1328_coerceRhsArgs = Dafny.Sequence.Concat(_1328_coerceRhsArgs, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(_1333_patternName, _1336_coerceRhsArg))); } - RAST._IExpr _1340_coerceRhs; - _1340_coerceRhs = RAST.Expr.create_StructBuild((RAST.Expr.create_Identifier(_1257_datatypeName)).MSel(DCOMP.__default.escapeName((_1320_ctor).dtor_name)), _1326_coerceRhsArgs); - if (_1327_isNumeric) { - _1321_ctorMatch = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1321_ctorMatch, Dafny.Sequence.UnicodeFromString("(")), _1328_ctorMatchInner), Dafny.Sequence.UnicodeFromString(")")); + RAST._IExpr _1342_coerceRhs; + _1342_coerceRhs = RAST.Expr.create_StructBuild((RAST.Expr.create_Identifier(_1257_datatypeName)).MSel(DCOMP.__default.escapeName((_1322_ctor).dtor_name)), _1328_coerceRhsArgs); + if (_1329_isNumeric) { + _1323_ctorMatch = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1323_ctorMatch, Dafny.Sequence.UnicodeFromString("(")), _1330_ctorMatchInner), Dafny.Sequence.UnicodeFromString(")")); } else { - _1321_ctorMatch = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1321_ctorMatch, Dafny.Sequence.UnicodeFromString("{")), _1328_ctorMatchInner), Dafny.Sequence.UnicodeFromString("}")); + _1323_ctorMatch = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1323_ctorMatch, Dafny.Sequence.UnicodeFromString("{")), _1330_ctorMatchInner), Dafny.Sequence.UnicodeFromString("}")); } - if ((_1320_ctor).dtor_hasAnyArgs) { - _1324_printRhs = (_1324_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("write!(_formatter, \")\")?"))); + if ((_1322_ctor).dtor_hasAnyArgs) { + _1326_printRhs = (_1326_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("write!(_formatter, \")\")?"))); } - _1324_printRhs = (_1324_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("Ok(())"))); - _1316_printImplBodyCases = Dafny.Sequence.Concat(_1316_printImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1321_ctorMatch), RAST.Expr.create_Block(_1324_printRhs)))); - _1317_hashImplBodyCases = Dafny.Sequence.Concat(_1317_hashImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1321_ctorMatch), RAST.Expr.create_Block(_1325_hashRhs)))); - _1318_coerceImplBodyCases = Dafny.Sequence.Concat(_1318_coerceImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1321_ctorMatch), RAST.Expr.create_Block(_1340_coerceRhs)))); + _1326_printRhs = (_1326_printRhs).Then(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("Ok(())"))); + _1318_printImplBodyCases = Dafny.Sequence.Concat(_1318_printImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1323_ctorMatch), RAST.Expr.create_Block(_1326_printRhs)))); + _1319_hashImplBodyCases = Dafny.Sequence.Concat(_1319_hashImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1323_ctorMatch), RAST.Expr.create_Block(_1327_hashRhs)))); + _1320_coerceImplBodyCases = Dafny.Sequence.Concat(_1320_coerceImplBodyCases, Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::")), _1323_ctorMatch), RAST.Expr.create_Block(_1342_coerceRhs)))); } if ((new BigInteger(((c).dtor_typeParams).Count)).Sign == 1) { - Dafny.ISequence _1341_extraCases; - _1341_extraCases = Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::_PhantomVariant(..)")), RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("{"), (this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString(""))), Dafny.Sequence.UnicodeFromString("}"))))); - _1316_printImplBodyCases = Dafny.Sequence.Concat(_1316_printImplBodyCases, _1341_extraCases); - _1317_hashImplBodyCases = Dafny.Sequence.Concat(_1317_hashImplBodyCases, _1341_extraCases); - _1318_coerceImplBodyCases = Dafny.Sequence.Concat(_1318_coerceImplBodyCases, _1341_extraCases); - } - Dafny.ISequence _1342_defaultConstrainedTypeParams; - _1342_defaultConstrainedTypeParams = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.DefaultTrait)); - Dafny.ISequence _1343_rTypeParamsDeclsWithEq; - _1343_rTypeParamsDeclsWithEq = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.Eq)); - Dafny.ISequence _1344_rTypeParamsDeclsWithHash; - _1344_rTypeParamsDeclsWithHash = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.Hash)); - RAST._IExpr _1345_printImplBody; - _1345_printImplBody = RAST.Expr.create_Match(RAST.__default.self, _1316_printImplBodyCases); - RAST._IExpr _1346_hashImplBody; - _1346_hashImplBody = RAST.Expr.create_Match(RAST.__default.self, _1317_hashImplBodyCases); - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, ((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Debug")), RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("fmt"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("f"), RAST.Type.create_BorrowedMut(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Formatter"))))), Std.Wrappers.Option.create_Some(RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("std::fmt::Result"))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("DafnyPrint"))).MSel(Dafny.Sequence.UnicodeFromString("fmt_print"))).Apply(Dafny.Sequence.FromElements(RAST.__default.self, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("f")), RAST.Expr.create_LiteralBool(true))))))))), RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, RAST.__default.DafnyPrint, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("fmt_print"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_formatter"), RAST.Type.create_BorrowedMut(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Formatter")))), RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_in_seq"), RAST.Type.create_Bool())), Std.Wrappers.Option.create_Some(RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("std::fmt::Result"))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1345_printImplBody)))))))); - if ((new BigInteger((_1296_rCoerceTypeParams).Count)).Sign == 1) { - RAST._IExpr _1347_coerceImplBody; - _1347_coerceImplBody = RAST.Expr.create_Match(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("this")), _1318_coerceImplBodyCases); - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_Impl(_1255_rTypeParamsDecls, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PUB(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("coerce"), _1296_rCoerceTypeParams, _1297_coerceArguments, Std.Wrappers.Option.create_Some(RAST.__default.Rc(RAST.Type.create_ImplType(RAST.Type.create_FnType(Dafny.Sequence.FromElements(RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams)), RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1295_coerceTypes))))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.__default.RcNew(RAST.Expr.create_Lambda(Dafny.Sequence.FromElements(RAST.Formal.create(Dafny.Sequence.UnicodeFromString("this"), RAST.Type.create_SelfOwned())), Std.Wrappers.Option.create_Some(RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1295_coerceTypes)), _1347_coerceImplBody)))))))))); - } - if (_1315_cIsEq) { - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1343_rTypeParamsDeclsWithEq, RAST.__default.Eq, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements())))); - } - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1344_rTypeParamsDeclsWithHash, RAST.__default.Hash, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("hash"), Dafny.Sequence.FromElements(RAST.TypeParamDecl.create(Dafny.Sequence.UnicodeFromString("_H"), Dafny.Sequence.FromElements(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("hash"))).MSel(Dafny.Sequence.UnicodeFromString("Hasher"))))), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_state"), RAST.Type.create_BorrowedMut(RAST.Type.create_TIdentifier(Dafny.Sequence.UnicodeFromString("_H"))))), Std.Wrappers.Option.create_None(), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1346_hashImplBody)))))))); + Dafny.ISequence _1343_extraCases; + _1343_extraCases = Dafny.Sequence.FromElements(RAST.MatchCase.create(Dafny.Sequence.Concat(_1257_datatypeName, Dafny.Sequence.UnicodeFromString("::_PhantomVariant(..)")), RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("{"), (this).UnreachablePanicIfVerified(Dafny.Sequence.UnicodeFromString(""))), Dafny.Sequence.UnicodeFromString("}"))))); + _1318_printImplBodyCases = Dafny.Sequence.Concat(_1318_printImplBodyCases, _1343_extraCases); + _1319_hashImplBodyCases = Dafny.Sequence.Concat(_1319_hashImplBodyCases, _1343_extraCases); + _1320_coerceImplBodyCases = Dafny.Sequence.Concat(_1320_coerceImplBodyCases, _1343_extraCases); + } + Dafny.ISequence _1344_defaultConstrainedTypeParams; + _1344_defaultConstrainedTypeParams = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.DefaultTrait)); + Dafny.ISequence _1345_rTypeParamsDeclsWithEq; + _1345_rTypeParamsDeclsWithEq = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.Eq)); + Dafny.ISequence _1346_rTypeParamsDeclsWithHash; + _1346_rTypeParamsDeclsWithHash = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.Hash)); + RAST._IExpr _1347_printImplBody; + _1347_printImplBody = RAST.Expr.create_Match(RAST.__default.self, _1318_printImplBodyCases); + RAST._IExpr _1348_hashImplBody; + _1348_hashImplBody = RAST.Expr.create_Match(RAST.__default.self, _1319_hashImplBodyCases); + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, ((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Debug")), RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("fmt"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("f"), RAST.Type.create_BorrowedMut(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Formatter"))))), Std.Wrappers.Option.create_Some(RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("std::fmt::Result"))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("DafnyPrint"))).MSel(Dafny.Sequence.UnicodeFromString("fmt_print"))).Apply(Dafny.Sequence.FromElements(RAST.__default.self, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("f")), RAST.Expr.create_LiteralBool(true))))))))), RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, RAST.__default.DafnyPrint, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("fmt_print"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_formatter"), RAST.Type.create_BorrowedMut(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("fmt"))).MSel(Dafny.Sequence.UnicodeFromString("Formatter")))), RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_in_seq"), RAST.Type.create_Bool())), Std.Wrappers.Option.create_Some(RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("std::fmt::Result"))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1347_printImplBody)))))))); + if ((new BigInteger((_1298_rCoerceTypeParams).Count)).Sign == 1) { + RAST._IExpr _1349_coerceImplBody; + _1349_coerceImplBody = RAST.Expr.create_Match(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("this")), _1320_coerceImplBodyCases); + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_Impl(_1255_rTypeParamsDecls, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PUB(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("coerce"), _1298_rCoerceTypeParams, _1299_coerceArguments, Std.Wrappers.Option.create_Some(RAST.__default.Rc(RAST.Type.create_ImplType(RAST.Type.create_FnType(Dafny.Sequence.FromElements(RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams)), RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1297_coerceTypes))))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.__default.RcNew(RAST.Expr.create_Lambda(Dafny.Sequence.FromElements(RAST.Formal.create(Dafny.Sequence.UnicodeFromString("this"), RAST.Type.create_SelfOwned())), Std.Wrappers.Option.create_Some(RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1297_coerceTypes)), _1349_coerceImplBody)))))))))); + } + if ((new BigInteger((_1261_singletonConstructors).Count)) == (new BigInteger(((c).dtor_ctors).Count))) { + RAST._IType _1350_datatypeType; + _1350_datatypeType = RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams); + RAST._IType _1351_instantiationType; + if ((this).IsRcWrapped((c).dtor_attributes)) { + _1351_instantiationType = RAST.__default.Rc(_1350_datatypeType); + } else { + _1351_instantiationType = _1350_datatypeType; + } + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_Impl(_1255_rTypeParamsDecls, _1350_datatypeType, Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PUB(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("_AllSingletonConstructors"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(), Std.Wrappers.Option.create_Some(((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("SequenceIter"))).Apply(Dafny.Sequence.FromElements(_1351_instantiationType))), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("seq!"))).Apply(_1261_singletonConstructors)).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()))))))))); + } + if (_1317_cIsEq) { + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1345_rTypeParamsDeclsWithEq, RAST.__default.Eq, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements())))); + } + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1346_rTypeParamsDeclsWithHash, RAST.__default.Hash, RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("hash"), Dafny.Sequence.FromElements(RAST.TypeParamDecl.create(Dafny.Sequence.UnicodeFromString("_H"), Dafny.Sequence.FromElements(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("hash"))).MSel(Dafny.Sequence.UnicodeFromString("Hasher"))))), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed, RAST.Formal.create(Dafny.Sequence.UnicodeFromString("_state"), RAST.Type.create_BorrowedMut(RAST.Type.create_TIdentifier(Dafny.Sequence.UnicodeFromString("_H"))))), Std.Wrappers.Option.create_None(), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(_1348_hashImplBody)))))))); if ((new BigInteger(((c).dtor_ctors).Count)).Sign == 1) { - RAST._IExpr _1348_structName; - _1348_structName = (RAST.Expr.create_Identifier(_1257_datatypeName)).MSel(DCOMP.__default.escapeName((((c).dtor_ctors).Select(BigInteger.Zero)).dtor_name)); - Dafny.ISequence _1349_structAssignments; - _1349_structAssignments = Dafny.Sequence.FromElements(); + RAST._IExpr _1352_structName; + _1352_structName = (RAST.Expr.create_Identifier(_1257_datatypeName)).MSel(DCOMP.__default.escapeName((((c).dtor_ctors).Select(BigInteger.Zero)).dtor_name)); + Dafny.ISequence _1353_structAssignments; + _1353_structAssignments = Dafny.Sequence.FromElements(); BigInteger _hi21 = new BigInteger(((((c).dtor_ctors).Select(BigInteger.Zero)).dtor_args).Count); - for (BigInteger _1350_i = BigInteger.Zero; _1350_i < _hi21; _1350_i++) { - DAST._IDatatypeDtor _1351_dtor; - _1351_dtor = ((((c).dtor_ctors).Select(BigInteger.Zero)).dtor_args).Select(_1350_i); - _1349_structAssignments = Dafny.Sequence.Concat(_1349_structAssignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeName(((_1351_dtor).dtor_formal).dtor_name), RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::std::default::Default::default()"))))); + for (BigInteger _1354_i = BigInteger.Zero; _1354_i < _hi21; _1354_i++) { + DAST._IDatatypeDtor _1355_dtor; + _1355_dtor = ((((c).dtor_ctors).Select(BigInteger.Zero)).dtor_args).Select(_1354_i); + _1353_structAssignments = Dafny.Sequence.Concat(_1353_structAssignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeName(((_1355_dtor).dtor_formal).dtor_name), RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::std::default::Default::default()"))))); } - Dafny.ISequence _1352_defaultConstrainedTypeParams; - _1352_defaultConstrainedTypeParams = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.DefaultTrait)); - RAST._IType _1353_fullType; - _1353_fullType = RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams); - if (_1315_cIsEq) { - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1352_defaultConstrainedTypeParams, RAST.__default.DefaultTrait, _1353_fullType, Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("default"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(), Std.Wrappers.Option.create_Some(_1353_fullType), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.Expr.create_StructBuild(_1348_structName, _1349_structAssignments))))))))); + Dafny.ISequence _1356_defaultConstrainedTypeParams; + _1356_defaultConstrainedTypeParams = RAST.TypeParamDecl.AddConstraintsMultiple(_1255_rTypeParamsDecls, Dafny.Sequence.FromElements(RAST.__default.DefaultTrait)); + RAST._IType _1357_fullType; + _1357_fullType = RAST.Type.create_TypeApp(RAST.Type.create_TIdentifier(_1257_datatypeName), _1254_rTypeParams); + if (_1317_cIsEq) { + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1356_defaultConstrainedTypeParams, RAST.__default.DefaultTrait, _1357_fullType, Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("default"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(), Std.Wrappers.Option.create_Some(_1357_fullType), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.Expr.create_StructBuild(_1352_structName, _1353_structAssignments))))))))); } - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, (((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("convert"))).MSel(Dafny.Sequence.UnicodeFromString("AsRef"))).Apply1(_1353_fullType), RAST.Type.create_Borrowed(_1353_fullType), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("as_ref"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed), Std.Wrappers.Option.create_Some(RAST.Type.create_SelfOwned()), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.__default.self)))))))); + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.ModDecl.create_ImplDecl(RAST.Impl.create_ImplFor(_1255_rTypeParamsDecls, (((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("convert"))).MSel(Dafny.Sequence.UnicodeFromString("AsRef"))).Apply1(_1357_fullType), RAST.Type.create_Borrowed(_1357_fullType), Dafny.Sequence.UnicodeFromString(""), Dafny.Sequence.FromElements(RAST.ImplMember.create_FnDecl(RAST.Visibility.create_PRIV(), RAST.Fn.create(Dafny.Sequence.UnicodeFromString("as_ref"), Dafny.Sequence.FromElements(), Dafny.Sequence.FromElements(RAST.Formal.selfBorrowed), Std.Wrappers.Option.create_Some(RAST.Type.create_SelfOwned()), Dafny.Sequence.UnicodeFromString(""), Std.Wrappers.Option.create_Some(RAST.__default.self)))))))); } return s; } @@ -1740,8 +1761,8 @@ public static RAST._IType GenPath(Dafny.ISequence> p r = RAST.Type.create_TIdentifier(Dafny.Sequence.UnicodeFromString("super")); } BigInteger _hi22 = new BigInteger((p).Count); - for (BigInteger _1354_i = BigInteger.Zero; _1354_i < _hi22; _1354_i++) { - r = (r).MSel(DCOMP.__default.escapeName(((p).Select(_1354_i)))); + for (BigInteger _1358_i = BigInteger.Zero; _1358_i < _hi22; _1358_i++) { + r = (r).MSel(DCOMP.__default.escapeName(((p).Select(_1358_i)))); } } return r; @@ -1761,8 +1782,8 @@ public static RAST._IExpr GenPathExpr(Dafny.ISequence.UnicodeFromString("super")); } BigInteger _hi23 = new BigInteger((p).Count); - for (BigInteger _1355_i = BigInteger.Zero; _1355_i < _hi23; _1355_i++) { - r = (r).MSel(DCOMP.__default.escapeName(((p).Select(_1355_i)))); + for (BigInteger _1359_i = BigInteger.Zero; _1359_i < _hi23; _1359_i++) { + r = (r).MSel(DCOMP.__default.escapeName(((p).Select(_1359_i)))); } } return r; @@ -1772,12 +1793,12 @@ public static RAST._IExpr GenPathExpr(Dafny.ISequence s = Dafny.Sequence.Empty; s = Dafny.Sequence.FromElements(); BigInteger _hi24 = new BigInteger((args).Count); - for (BigInteger _1356_i = BigInteger.Zero; _1356_i < _hi24; _1356_i++) { - RAST._IType _1357_genTp; + for (BigInteger _1360_i = BigInteger.Zero; _1360_i < _hi24; _1360_i++) { + RAST._IType _1361_genTp; RAST._IType _out85; - _out85 = (this).GenType((args).Select(_1356_i), genTypeContext); - _1357_genTp = _out85; - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(_1357_genTp)); + _out85 = (this).GenType((args).Select(_1360_i), genTypeContext); + _1361_genTp = _out85; + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(_1361_genTp)); } return s; } @@ -1790,18 +1811,18 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) DAST._IType _source61 = c; { if (_source61.is_UserDefined) { - DAST._IResolvedType _1358_resolved = _source61.dtor_resolved; + DAST._IResolvedType _1362_resolved = _source61.dtor_resolved; { - RAST._IType _1359_t; + RAST._IType _1363_t; RAST._IType _out86; - _out86 = DCOMP.COMP.GenPath((_1358_resolved).dtor_path); - _1359_t = _out86; - Dafny.ISequence _1360_typeArgs; + _out86 = DCOMP.COMP.GenPath((_1362_resolved).dtor_path); + _1363_t = _out86; + Dafny.ISequence _1364_typeArgs; Dafny.ISequence _out87; - _out87 = (this).GenTypeArgs((_1358_resolved).dtor_typeArgs, Dafny.Helpers.Let(genTypeContext, _pat_let9_0 => Dafny.Helpers.Let(_pat_let9_0, _1361_dt__update__tmp_h0 => Dafny.Helpers.Let(false, _pat_let10_0 => Dafny.Helpers.Let(_pat_let10_0, _1362_dt__update_hforTraitParents_h0 => DCOMP.GenTypeContext.create((_1361_dt__update__tmp_h0).dtor_inBinding, (_1361_dt__update__tmp_h0).dtor_inFn, _1362_dt__update_hforTraitParents_h0)))))); - _1360_typeArgs = _out87; - s = RAST.Type.create_TypeApp(_1359_t, _1360_typeArgs); - DAST._IResolvedTypeBase _source62 = (_1358_resolved).dtor_kind; + _out87 = (this).GenTypeArgs((_1362_resolved).dtor_typeArgs, Dafny.Helpers.Let(genTypeContext, _pat_let9_0 => Dafny.Helpers.Let(_pat_let9_0, _1365_dt__update__tmp_h0 => Dafny.Helpers.Let(false, _pat_let10_0 => Dafny.Helpers.Let(_pat_let10_0, _1366_dt__update_hforTraitParents_h0 => DCOMP.GenTypeContext.create((_1365_dt__update__tmp_h0).dtor_inBinding, (_1365_dt__update__tmp_h0).dtor_inFn, _1366_dt__update_hforTraitParents_h0)))))); + _1364_typeArgs = _out87; + s = RAST.Type.create_TypeApp(_1363_t, _1364_typeArgs); + DAST._IResolvedTypeBase _source62 = (_1362_resolved).dtor_kind; { if (_source62.is_Class) { { @@ -1813,7 +1834,7 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) { if (_source62.is_Datatype) { { - if ((this).IsRcWrapped((_1358_resolved).dtor_attributes)) { + if ((this).IsRcWrapped((_1362_resolved).dtor_attributes)) { s = RAST.__default.Rc(s); } } @@ -1823,7 +1844,7 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) { if (_source62.is_Trait) { { - if (((_1358_resolved).dtor_path).Equals(Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("_System"), Dafny.Sequence.UnicodeFromString("object")))) { + if (((_1362_resolved).dtor_path).Equals(Dafny.Sequence>.FromElements(Dafny.Sequence.UnicodeFromString("_System"), Dafny.Sequence.UnicodeFromString("object")))) { s = ((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("any"))).MSel(Dafny.Sequence.UnicodeFromString("Any")); } if (!((genTypeContext).dtor_forTraitParents)) { @@ -1834,16 +1855,16 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) } } { - DAST._IType _1363_t = _source62.dtor_baseType; - DAST._INewtypeRange _1364_range = _source62.dtor_range; - bool _1365_erased = _source62.dtor_erase; + DAST._IType _1367_t = _source62.dtor_baseType; + DAST._INewtypeRange _1368_range = _source62.dtor_range; + bool _1369_erased = _source62.dtor_erase; { - if (_1365_erased) { - Std.Wrappers._IOption _source63 = DCOMP.COMP.NewtypeToRustType(_1363_t, _1364_range); + if (_1369_erased) { + Std.Wrappers._IOption _source63 = DCOMP.COMP.NewtypeToRustType(_1367_t, _1368_range); { if (_source63.is_Some) { - RAST._IType _1366_v = _source63.dtor_value; - s = _1366_v; + RAST._IType _1370_v = _source63.dtor_value; + s = _1370_v; goto after_match10; } } @@ -1871,24 +1892,24 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) } { if (_source61.is_Tuple) { - Dafny.ISequence _1367_types = _source61.dtor_Tuple_a0; + Dafny.ISequence _1371_types = _source61.dtor_Tuple_a0; { - Dafny.ISequence _1368_args; - _1368_args = Dafny.Sequence.FromElements(); - BigInteger _1369_i; - _1369_i = BigInteger.Zero; - while ((_1369_i) < (new BigInteger((_1367_types).Count))) { - RAST._IType _1370_generated; + Dafny.ISequence _1372_args; + _1372_args = Dafny.Sequence.FromElements(); + BigInteger _1373_i; + _1373_i = BigInteger.Zero; + while ((_1373_i) < (new BigInteger((_1371_types).Count))) { + RAST._IType _1374_generated; RAST._IType _out88; - _out88 = (this).GenType((_1367_types).Select(_1369_i), Dafny.Helpers.Let(genTypeContext, _pat_let11_0 => Dafny.Helpers.Let(_pat_let11_0, _1371_dt__update__tmp_h1 => Dafny.Helpers.Let(false, _pat_let12_0 => Dafny.Helpers.Let(_pat_let12_0, _1372_dt__update_hforTraitParents_h1 => DCOMP.GenTypeContext.create((_1371_dt__update__tmp_h1).dtor_inBinding, (_1371_dt__update__tmp_h1).dtor_inFn, _1372_dt__update_hforTraitParents_h1)))))); - _1370_generated = _out88; - _1368_args = Dafny.Sequence.Concat(_1368_args, Dafny.Sequence.FromElements(_1370_generated)); - _1369_i = (_1369_i) + (BigInteger.One); + _out88 = (this).GenType((_1371_types).Select(_1373_i), Dafny.Helpers.Let(genTypeContext, _pat_let11_0 => Dafny.Helpers.Let(_pat_let11_0, _1375_dt__update__tmp_h1 => Dafny.Helpers.Let(false, _pat_let12_0 => Dafny.Helpers.Let(_pat_let12_0, _1376_dt__update_hforTraitParents_h1 => DCOMP.GenTypeContext.create((_1375_dt__update__tmp_h1).dtor_inBinding, (_1375_dt__update__tmp_h1).dtor_inFn, _1376_dt__update_hforTraitParents_h1)))))); + _1374_generated = _out88; + _1372_args = Dafny.Sequence.Concat(_1372_args, Dafny.Sequence.FromElements(_1374_generated)); + _1373_i = (_1373_i) + (BigInteger.One); } - if ((new BigInteger((_1367_types).Count)) <= (RAST.__default.MAX__TUPLE__SIZE)) { - s = RAST.Type.create_TupleType(_1368_args); + if ((new BigInteger((_1371_types).Count)) <= (RAST.__default.MAX__TUPLE__SIZE)) { + s = RAST.Type.create_TupleType(_1372_args); } else { - s = RAST.__default.SystemTupleType(_1368_args); + s = RAST.__default.SystemTupleType(_1372_args); } } goto after_match8; @@ -1896,23 +1917,23 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) } { if (_source61.is_Array) { - DAST._IType _1373_element = _source61.dtor_element; - BigInteger _1374_dims = _source61.dtor_dims; + DAST._IType _1377_element = _source61.dtor_element; + BigInteger _1378_dims = _source61.dtor_dims; { - if ((_1374_dims) > (new BigInteger(16))) { + if ((_1378_dims) > (new BigInteger(16))) { s = RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("Array of dimensions greater than 16")); } else { - RAST._IType _1375_elem; + RAST._IType _1379_elem; RAST._IType _out89; - _out89 = (this).GenType(_1373_element, Dafny.Helpers.Let(genTypeContext, _pat_let13_0 => Dafny.Helpers.Let(_pat_let13_0, _1376_dt__update__tmp_h2 => Dafny.Helpers.Let(false, _pat_let14_0 => Dafny.Helpers.Let(_pat_let14_0, _1377_dt__update_hforTraitParents_h2 => DCOMP.GenTypeContext.create((_1376_dt__update__tmp_h2).dtor_inBinding, (_1376_dt__update__tmp_h2).dtor_inFn, _1377_dt__update_hforTraitParents_h2)))))); - _1375_elem = _out89; - if ((_1374_dims) == (BigInteger.One)) { - s = RAST.Type.create_Array(_1375_elem, Std.Wrappers.Option>.create_None()); + _out89 = (this).GenType(_1377_element, Dafny.Helpers.Let(genTypeContext, _pat_let13_0 => Dafny.Helpers.Let(_pat_let13_0, _1380_dt__update__tmp_h2 => Dafny.Helpers.Let(false, _pat_let14_0 => Dafny.Helpers.Let(_pat_let14_0, _1381_dt__update_hforTraitParents_h2 => DCOMP.GenTypeContext.create((_1380_dt__update__tmp_h2).dtor_inBinding, (_1380_dt__update__tmp_h2).dtor_inFn, _1381_dt__update_hforTraitParents_h2)))))); + _1379_elem = _out89; + if ((_1378_dims) == (BigInteger.One)) { + s = RAST.Type.create_Array(_1379_elem, Std.Wrappers.Option>.create_None()); s = (this).Object(s); } else { - Dafny.ISequence _1378_n; - _1378_n = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array"), Std.Strings.__default.OfNat(_1374_dims)); - s = ((RAST.__default.dafny__runtime__type).MSel(_1378_n)).Apply(Dafny.Sequence.FromElements(_1375_elem)); + Dafny.ISequence _1382_n; + _1382_n = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array"), Std.Strings.__default.OfNat(_1378_dims)); + s = ((RAST.__default.dafny__runtime__type).MSel(_1382_n)).Apply(Dafny.Sequence.FromElements(_1379_elem)); s = (this).Object(s); } } @@ -1922,114 +1943,114 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) } { if (_source61.is_Seq) { - DAST._IType _1379_element = _source61.dtor_element; + DAST._IType _1383_element = _source61.dtor_element; { - RAST._IType _1380_elem; + RAST._IType _1384_elem; RAST._IType _out90; - _out90 = (this).GenType(_1379_element, Dafny.Helpers.Let(genTypeContext, _pat_let15_0 => Dafny.Helpers.Let(_pat_let15_0, _1381_dt__update__tmp_h3 => Dafny.Helpers.Let(false, _pat_let16_0 => Dafny.Helpers.Let(_pat_let16_0, _1382_dt__update_hforTraitParents_h3 => DCOMP.GenTypeContext.create((_1381_dt__update__tmp_h3).dtor_inBinding, (_1381_dt__update__tmp_h3).dtor_inFn, _1382_dt__update_hforTraitParents_h3)))))); - _1380_elem = _out90; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Sequence")), Dafny.Sequence.FromElements(_1380_elem)); + _out90 = (this).GenType(_1383_element, Dafny.Helpers.Let(genTypeContext, _pat_let15_0 => Dafny.Helpers.Let(_pat_let15_0, _1385_dt__update__tmp_h3 => Dafny.Helpers.Let(false, _pat_let16_0 => Dafny.Helpers.Let(_pat_let16_0, _1386_dt__update_hforTraitParents_h3 => DCOMP.GenTypeContext.create((_1385_dt__update__tmp_h3).dtor_inBinding, (_1385_dt__update__tmp_h3).dtor_inFn, _1386_dt__update_hforTraitParents_h3)))))); + _1384_elem = _out90; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Sequence")), Dafny.Sequence.FromElements(_1384_elem)); } goto after_match8; } } { if (_source61.is_Set) { - DAST._IType _1383_element = _source61.dtor_element; + DAST._IType _1387_element = _source61.dtor_element; { - RAST._IType _1384_elem; + RAST._IType _1388_elem; RAST._IType _out91; - _out91 = (this).GenType(_1383_element, Dafny.Helpers.Let(genTypeContext, _pat_let17_0 => Dafny.Helpers.Let(_pat_let17_0, _1385_dt__update__tmp_h4 => Dafny.Helpers.Let(false, _pat_let18_0 => Dafny.Helpers.Let(_pat_let18_0, _1386_dt__update_hforTraitParents_h4 => DCOMP.GenTypeContext.create((_1385_dt__update__tmp_h4).dtor_inBinding, (_1385_dt__update__tmp_h4).dtor_inFn, _1386_dt__update_hforTraitParents_h4)))))); - _1384_elem = _out91; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Set")), Dafny.Sequence.FromElements(_1384_elem)); + _out91 = (this).GenType(_1387_element, Dafny.Helpers.Let(genTypeContext, _pat_let17_0 => Dafny.Helpers.Let(_pat_let17_0, _1389_dt__update__tmp_h4 => Dafny.Helpers.Let(false, _pat_let18_0 => Dafny.Helpers.Let(_pat_let18_0, _1390_dt__update_hforTraitParents_h4 => DCOMP.GenTypeContext.create((_1389_dt__update__tmp_h4).dtor_inBinding, (_1389_dt__update__tmp_h4).dtor_inFn, _1390_dt__update_hforTraitParents_h4)))))); + _1388_elem = _out91; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Set")), Dafny.Sequence.FromElements(_1388_elem)); } goto after_match8; } } { if (_source61.is_Multiset) { - DAST._IType _1387_element = _source61.dtor_element; + DAST._IType _1391_element = _source61.dtor_element; { - RAST._IType _1388_elem; + RAST._IType _1392_elem; RAST._IType _out92; - _out92 = (this).GenType(_1387_element, Dafny.Helpers.Let(genTypeContext, _pat_let19_0 => Dafny.Helpers.Let(_pat_let19_0, _1389_dt__update__tmp_h5 => Dafny.Helpers.Let(false, _pat_let20_0 => Dafny.Helpers.Let(_pat_let20_0, _1390_dt__update_hforTraitParents_h5 => DCOMP.GenTypeContext.create((_1389_dt__update__tmp_h5).dtor_inBinding, (_1389_dt__update__tmp_h5).dtor_inFn, _1390_dt__update_hforTraitParents_h5)))))); - _1388_elem = _out92; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Multiset")), Dafny.Sequence.FromElements(_1388_elem)); + _out92 = (this).GenType(_1391_element, Dafny.Helpers.Let(genTypeContext, _pat_let19_0 => Dafny.Helpers.Let(_pat_let19_0, _1393_dt__update__tmp_h5 => Dafny.Helpers.Let(false, _pat_let20_0 => Dafny.Helpers.Let(_pat_let20_0, _1394_dt__update_hforTraitParents_h5 => DCOMP.GenTypeContext.create((_1393_dt__update__tmp_h5).dtor_inBinding, (_1393_dt__update__tmp_h5).dtor_inFn, _1394_dt__update_hforTraitParents_h5)))))); + _1392_elem = _out92; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Multiset")), Dafny.Sequence.FromElements(_1392_elem)); } goto after_match8; } } { if (_source61.is_Map) { - DAST._IType _1391_key = _source61.dtor_key; - DAST._IType _1392_value = _source61.dtor_value; + DAST._IType _1395_key = _source61.dtor_key; + DAST._IType _1396_value = _source61.dtor_value; { - RAST._IType _1393_keyType; + RAST._IType _1397_keyType; RAST._IType _out93; - _out93 = (this).GenType(_1391_key, Dafny.Helpers.Let(genTypeContext, _pat_let21_0 => Dafny.Helpers.Let(_pat_let21_0, _1394_dt__update__tmp_h6 => Dafny.Helpers.Let(false, _pat_let22_0 => Dafny.Helpers.Let(_pat_let22_0, _1395_dt__update_hforTraitParents_h6 => DCOMP.GenTypeContext.create((_1394_dt__update__tmp_h6).dtor_inBinding, (_1394_dt__update__tmp_h6).dtor_inFn, _1395_dt__update_hforTraitParents_h6)))))); - _1393_keyType = _out93; - RAST._IType _1396_valueType; + _out93 = (this).GenType(_1395_key, Dafny.Helpers.Let(genTypeContext, _pat_let21_0 => Dafny.Helpers.Let(_pat_let21_0, _1398_dt__update__tmp_h6 => Dafny.Helpers.Let(false, _pat_let22_0 => Dafny.Helpers.Let(_pat_let22_0, _1399_dt__update_hforTraitParents_h6 => DCOMP.GenTypeContext.create((_1398_dt__update__tmp_h6).dtor_inBinding, (_1398_dt__update__tmp_h6).dtor_inFn, _1399_dt__update_hforTraitParents_h6)))))); + _1397_keyType = _out93; + RAST._IType _1400_valueType; RAST._IType _out94; - _out94 = (this).GenType(_1392_value, genTypeContext); - _1396_valueType = _out94; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Map")), Dafny.Sequence.FromElements(_1393_keyType, _1396_valueType)); + _out94 = (this).GenType(_1396_value, genTypeContext); + _1400_valueType = _out94; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Map")), Dafny.Sequence.FromElements(_1397_keyType, _1400_valueType)); } goto after_match8; } } { if (_source61.is_MapBuilder) { - DAST._IType _1397_key = _source61.dtor_key; - DAST._IType _1398_value = _source61.dtor_value; + DAST._IType _1401_key = _source61.dtor_key; + DAST._IType _1402_value = _source61.dtor_value; { - RAST._IType _1399_keyType; + RAST._IType _1403_keyType; RAST._IType _out95; - _out95 = (this).GenType(_1397_key, Dafny.Helpers.Let(genTypeContext, _pat_let23_0 => Dafny.Helpers.Let(_pat_let23_0, _1400_dt__update__tmp_h7 => Dafny.Helpers.Let(false, _pat_let24_0 => Dafny.Helpers.Let(_pat_let24_0, _1401_dt__update_hforTraitParents_h7 => DCOMP.GenTypeContext.create((_1400_dt__update__tmp_h7).dtor_inBinding, (_1400_dt__update__tmp_h7).dtor_inFn, _1401_dt__update_hforTraitParents_h7)))))); - _1399_keyType = _out95; - RAST._IType _1402_valueType; + _out95 = (this).GenType(_1401_key, Dafny.Helpers.Let(genTypeContext, _pat_let23_0 => Dafny.Helpers.Let(_pat_let23_0, _1404_dt__update__tmp_h7 => Dafny.Helpers.Let(false, _pat_let24_0 => Dafny.Helpers.Let(_pat_let24_0, _1405_dt__update_hforTraitParents_h7 => DCOMP.GenTypeContext.create((_1404_dt__update__tmp_h7).dtor_inBinding, (_1404_dt__update__tmp_h7).dtor_inFn, _1405_dt__update_hforTraitParents_h7)))))); + _1403_keyType = _out95; + RAST._IType _1406_valueType; RAST._IType _out96; - _out96 = (this).GenType(_1398_value, genTypeContext); - _1402_valueType = _out96; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("MapBuilder")), Dafny.Sequence.FromElements(_1399_keyType, _1402_valueType)); + _out96 = (this).GenType(_1402_value, genTypeContext); + _1406_valueType = _out96; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("MapBuilder")), Dafny.Sequence.FromElements(_1403_keyType, _1406_valueType)); } goto after_match8; } } { if (_source61.is_SetBuilder) { - DAST._IType _1403_elem = _source61.dtor_element; + DAST._IType _1407_elem = _source61.dtor_element; { - RAST._IType _1404_elemType; + RAST._IType _1408_elemType; RAST._IType _out97; - _out97 = (this).GenType(_1403_elem, Dafny.Helpers.Let(genTypeContext, _pat_let25_0 => Dafny.Helpers.Let(_pat_let25_0, _1405_dt__update__tmp_h8 => Dafny.Helpers.Let(false, _pat_let26_0 => Dafny.Helpers.Let(_pat_let26_0, _1406_dt__update_hforTraitParents_h8 => DCOMP.GenTypeContext.create((_1405_dt__update__tmp_h8).dtor_inBinding, (_1405_dt__update__tmp_h8).dtor_inFn, _1406_dt__update_hforTraitParents_h8)))))); - _1404_elemType = _out97; - s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("SetBuilder")), Dafny.Sequence.FromElements(_1404_elemType)); + _out97 = (this).GenType(_1407_elem, Dafny.Helpers.Let(genTypeContext, _pat_let25_0 => Dafny.Helpers.Let(_pat_let25_0, _1409_dt__update__tmp_h8 => Dafny.Helpers.Let(false, _pat_let26_0 => Dafny.Helpers.Let(_pat_let26_0, _1410_dt__update_hforTraitParents_h8 => DCOMP.GenTypeContext.create((_1409_dt__update__tmp_h8).dtor_inBinding, (_1409_dt__update__tmp_h8).dtor_inFn, _1410_dt__update_hforTraitParents_h8)))))); + _1408_elemType = _out97; + s = RAST.Type.create_TypeApp((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("SetBuilder")), Dafny.Sequence.FromElements(_1408_elemType)); } goto after_match8; } } { if (_source61.is_Arrow) { - Dafny.ISequence _1407_args = _source61.dtor_args; - DAST._IType _1408_result = _source61.dtor_result; + Dafny.ISequence _1411_args = _source61.dtor_args; + DAST._IType _1412_result = _source61.dtor_result; { - Dafny.ISequence _1409_argTypes; - _1409_argTypes = Dafny.Sequence.FromElements(); - BigInteger _1410_i; - _1410_i = BigInteger.Zero; - while ((_1410_i) < (new BigInteger((_1407_args).Count))) { - RAST._IType _1411_generated; + Dafny.ISequence _1413_argTypes; + _1413_argTypes = Dafny.Sequence.FromElements(); + BigInteger _1414_i; + _1414_i = BigInteger.Zero; + while ((_1414_i) < (new BigInteger((_1411_args).Count))) { + RAST._IType _1415_generated; RAST._IType _out98; - _out98 = (this).GenType((_1407_args).Select(_1410_i), Dafny.Helpers.Let(genTypeContext, _pat_let27_0 => Dafny.Helpers.Let(_pat_let27_0, _1412_dt__update__tmp_h9 => Dafny.Helpers.Let(false, _pat_let28_0 => Dafny.Helpers.Let(_pat_let28_0, _1413_dt__update_hforTraitParents_h9 => Dafny.Helpers.Let(true, _pat_let29_0 => Dafny.Helpers.Let(_pat_let29_0, _1414_dt__update_hinFn_h0 => DCOMP.GenTypeContext.create((_1412_dt__update__tmp_h9).dtor_inBinding, _1414_dt__update_hinFn_h0, _1413_dt__update_hforTraitParents_h9)))))))); - _1411_generated = _out98; - _1409_argTypes = Dafny.Sequence.Concat(_1409_argTypes, Dafny.Sequence.FromElements(RAST.Type.create_Borrowed(_1411_generated))); - _1410_i = (_1410_i) + (BigInteger.One); + _out98 = (this).GenType((_1411_args).Select(_1414_i), Dafny.Helpers.Let(genTypeContext, _pat_let27_0 => Dafny.Helpers.Let(_pat_let27_0, _1416_dt__update__tmp_h9 => Dafny.Helpers.Let(false, _pat_let28_0 => Dafny.Helpers.Let(_pat_let28_0, _1417_dt__update_hforTraitParents_h9 => Dafny.Helpers.Let(true, _pat_let29_0 => Dafny.Helpers.Let(_pat_let29_0, _1418_dt__update_hinFn_h0 => DCOMP.GenTypeContext.create((_1416_dt__update__tmp_h9).dtor_inBinding, _1418_dt__update_hinFn_h0, _1417_dt__update_hforTraitParents_h9)))))))); + _1415_generated = _out98; + _1413_argTypes = Dafny.Sequence.Concat(_1413_argTypes, Dafny.Sequence.FromElements(RAST.Type.create_Borrowed(_1415_generated))); + _1414_i = (_1414_i) + (BigInteger.One); } - RAST._IType _1415_resultType; + RAST._IType _1419_resultType; RAST._IType _out99; - _out99 = (this).GenType(_1408_result, DCOMP.GenTypeContext.create(((genTypeContext).dtor_inFn) || ((genTypeContext).dtor_inBinding), false, false)); - _1415_resultType = _out99; - s = RAST.__default.Rc(RAST.Type.create_DynType(RAST.Type.create_FnType(_1409_argTypes, _1415_resultType))); + _out99 = (this).GenType(_1412_result, DCOMP.GenTypeContext.create(((genTypeContext).dtor_inFn) || ((genTypeContext).dtor_inBinding), false, false)); + _1419_resultType = _out99; + s = RAST.__default.Rc(RAST.Type.create_DynType(RAST.Type.create_FnType(_1413_argTypes, _1419_resultType))); } goto after_match8; } @@ -2037,16 +2058,16 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) { if (_source61.is_TypeArg) { Dafny.ISequence _h90 = _source61.dtor_TypeArg_a0; - Dafny.ISequence _1416_name = _h90; - s = RAST.Type.create_TIdentifier(DCOMP.__default.escapeName(_1416_name)); + Dafny.ISequence _1420_name = _h90; + s = RAST.Type.create_TIdentifier(DCOMP.__default.escapeName(_1420_name)); goto after_match8; } } { if (_source61.is_Primitive) { - DAST._IPrimitive _1417_p = _source61.dtor_Primitive_a0; + DAST._IPrimitive _1421_p = _source61.dtor_Primitive_a0; { - DAST._IPrimitive _source64 = _1417_p; + DAST._IPrimitive _source64 = _1421_p; { if (_source64.is_Int) { s = (RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("DafnyInt")); @@ -2080,8 +2101,8 @@ public RAST._IType GenType(DAST._IType c, DCOMP._IGenTypeContext genTypeContext) } } { - Dafny.ISequence _1418_v = _source61.dtor_Passthrough_a0; - s = RAST.__default.RawType(_1418_v); + Dafny.ISequence _1422_v = _source61.dtor_Passthrough_a0; + s = RAST.__default.RawType(_1422_v); } after_match8: ; return s; @@ -2096,41 +2117,41 @@ public void GenClassImplBody(Dafny.ISequence body, bool forTrait, s = Dafny.Sequence.FromElements(); traitBodies = Dafny.Map>, Dafny.ISequence>.FromElements(); BigInteger _hi25 = new BigInteger((body).Count); - for (BigInteger _1419_i = BigInteger.Zero; _1419_i < _hi25; _1419_i++) { - DAST._IMethod _source65 = (body).Select(_1419_i); + for (BigInteger _1423_i = BigInteger.Zero; _1423_i < _hi25; _1423_i++) { + DAST._IMethod _source65 = (body).Select(_1423_i); { - DAST._IMethod _1420_m = _source65; + DAST._IMethod _1424_m = _source65; { - Std.Wrappers._IOption>> _source66 = (_1420_m).dtor_overridingPath; + Std.Wrappers._IOption>> _source66 = (_1424_m).dtor_overridingPath; { if (_source66.is_Some) { - Dafny.ISequence> _1421_p = _source66.dtor_value; + Dafny.ISequence> _1425_p = _source66.dtor_value; { - Dafny.ISequence _1422_existing; - _1422_existing = Dafny.Sequence.FromElements(); - if ((traitBodies).Contains(_1421_p)) { - _1422_existing = Dafny.Map>, Dafny.ISequence>.Select(traitBodies,_1421_p); + Dafny.ISequence _1426_existing; + _1426_existing = Dafny.Sequence.FromElements(); + if ((traitBodies).Contains(_1425_p)) { + _1426_existing = Dafny.Map>, Dafny.ISequence>.Select(traitBodies,_1425_p); } - if (((new BigInteger(((_1420_m).dtor_typeParams).Count)).Sign == 1) && ((this).EnclosingIsTrait(enclosingType))) { + if (((new BigInteger(((_1424_m).dtor_typeParams).Count)).Sign == 1) && ((this).EnclosingIsTrait(enclosingType))) { (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.UnicodeFromString("Error: Rust does not support method with generic type parameters in traits")); } - RAST._IImplMember _1423_genMethod; + RAST._IImplMember _1427_genMethod; RAST._IImplMember _out100; - _out100 = (this).GenMethod(_1420_m, true, enclosingType, enclosingTypeParams); - _1423_genMethod = _out100; - _1422_existing = Dafny.Sequence.Concat(_1422_existing, Dafny.Sequence.FromElements(_1423_genMethod)); - traitBodies = Dafny.Map>, Dafny.ISequence>.Merge(traitBodies, Dafny.Map>, Dafny.ISequence>.FromElements(new Dafny.Pair>, Dafny.ISequence>(_1421_p, _1422_existing))); + _out100 = (this).GenMethod(_1424_m, true, enclosingType, enclosingTypeParams); + _1427_genMethod = _out100; + _1426_existing = Dafny.Sequence.Concat(_1426_existing, Dafny.Sequence.FromElements(_1427_genMethod)); + traitBodies = Dafny.Map>, Dafny.ISequence>.Merge(traitBodies, Dafny.Map>, Dafny.ISequence>.FromElements(new Dafny.Pair>, Dafny.ISequence>(_1425_p, _1426_existing))); } goto after_match13; } } { { - RAST._IImplMember _1424_generated; + RAST._IImplMember _1428_generated; RAST._IImplMember _out101; - _out101 = (this).GenMethod(_1420_m, forTrait, enclosingType, enclosingTypeParams); - _1424_generated = _out101; - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(_1424_generated)); + _out101 = (this).GenMethod(_1424_m, forTrait, enclosingType, enclosingTypeParams); + _1428_generated = _out101; + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(_1428_generated)); } } after_match13: ; @@ -2144,200 +2165,200 @@ public void GenClassImplBody(Dafny.ISequence body, bool forTrait, Dafny.ISequence s = Dafny.Sequence.Empty; s = Dafny.Sequence.FromElements(); BigInteger _hi26 = new BigInteger((@params).Count); - for (BigInteger _1425_i = BigInteger.Zero; _1425_i < _hi26; _1425_i++) { - DAST._IFormal _1426_param; - _1426_param = (@params).Select(_1425_i); - RAST._IType _1427_paramType; + for (BigInteger _1429_i = BigInteger.Zero; _1429_i < _hi26; _1429_i++) { + DAST._IFormal _1430_param; + _1430_param = (@params).Select(_1429_i); + RAST._IType _1431_paramType; RAST._IType _out102; - _out102 = (this).GenType((_1426_param).dtor_typ, DCOMP.GenTypeContext.@default()); - _1427_paramType = _out102; - if ((!((_1427_paramType).CanReadWithoutClone())) && (!((_1426_param).dtor_attributes).Contains(DCOMP.__default.AttributeOwned))) { - _1427_paramType = RAST.Type.create_Borrowed(_1427_paramType); + _out102 = (this).GenType((_1430_param).dtor_typ, DCOMP.GenTypeContext.@default()); + _1431_paramType = _out102; + if ((!((_1431_paramType).CanReadWithoutClone())) && (!((_1430_param).dtor_attributes).Contains(DCOMP.__default.AttributeOwned))) { + _1431_paramType = RAST.Type.create_Borrowed(_1431_paramType); } - s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.Formal.create(DCOMP.__default.escapeName((_1426_param).dtor_name), _1427_paramType))); + s = Dafny.Sequence.Concat(s, Dafny.Sequence.FromElements(RAST.Formal.create(DCOMP.__default.escapeName((_1430_param).dtor_name), _1431_paramType))); } return s; } public RAST._IImplMember GenMethod(DAST._IMethod m, bool forTrait, DAST._IType enclosingType, Dafny.ISequence enclosingTypeParams) { RAST._IImplMember s = RAST.ImplMember.Default(); - Dafny.ISequence _1428_params; + Dafny.ISequence _1432_params; Dafny.ISequence _out103; _out103 = (this).GenParams((m).dtor_params); - _1428_params = _out103; - Dafny.ISequence> _1429_paramNames; - _1429_paramNames = Dafny.Sequence>.FromElements(); - Dafny.IMap,RAST._IType> _1430_paramTypes; - _1430_paramTypes = Dafny.Map, RAST._IType>.FromElements(); + _1432_params = _out103; + Dafny.ISequence> _1433_paramNames; + _1433_paramNames = Dafny.Sequence>.FromElements(); + Dafny.IMap,RAST._IType> _1434_paramTypes; + _1434_paramTypes = Dafny.Map, RAST._IType>.FromElements(); BigInteger _hi27 = new BigInteger(((m).dtor_params).Count); - for (BigInteger _1431_paramI = BigInteger.Zero; _1431_paramI < _hi27; _1431_paramI++) { - DAST._IFormal _1432_dafny__formal; - _1432_dafny__formal = ((m).dtor_params).Select(_1431_paramI); - RAST._IFormal _1433_formal; - _1433_formal = (_1428_params).Select(_1431_paramI); - Dafny.ISequence _1434_name; - _1434_name = (_1433_formal).dtor_name; - _1429_paramNames = Dafny.Sequence>.Concat(_1429_paramNames, Dafny.Sequence>.FromElements(_1434_name)); - _1430_paramTypes = Dafny.Map, RAST._IType>.Update(_1430_paramTypes, _1434_name, (_1433_formal).dtor_tpe); - } - Dafny.ISequence _1435_fnName; - _1435_fnName = DCOMP.__default.escapeName((m).dtor_name); - DCOMP._ISelfInfo _1436_selfIdent; - _1436_selfIdent = DCOMP.SelfInfo.create_NoSelf(); + for (BigInteger _1435_paramI = BigInteger.Zero; _1435_paramI < _hi27; _1435_paramI++) { + DAST._IFormal _1436_dafny__formal; + _1436_dafny__formal = ((m).dtor_params).Select(_1435_paramI); + RAST._IFormal _1437_formal; + _1437_formal = (_1432_params).Select(_1435_paramI); + Dafny.ISequence _1438_name; + _1438_name = (_1437_formal).dtor_name; + _1433_paramNames = Dafny.Sequence>.Concat(_1433_paramNames, Dafny.Sequence>.FromElements(_1438_name)); + _1434_paramTypes = Dafny.Map, RAST._IType>.Update(_1434_paramTypes, _1438_name, (_1437_formal).dtor_tpe); + } + Dafny.ISequence _1439_fnName; + _1439_fnName = DCOMP.__default.escapeName((m).dtor_name); + DCOMP._ISelfInfo _1440_selfIdent; + _1440_selfIdent = DCOMP.SelfInfo.create_NoSelf(); if (!((m).dtor_isStatic)) { - Dafny.ISequence _1437_selfId; - _1437_selfId = Dafny.Sequence.UnicodeFromString("self"); + Dafny.ISequence _1441_selfId; + _1441_selfId = Dafny.Sequence.UnicodeFromString("self"); if ((m).dtor_outVarsAreUninitFieldsToAssign) { - _1437_selfId = Dafny.Sequence.UnicodeFromString("this"); + _1441_selfId = Dafny.Sequence.UnicodeFromString("this"); } var _pat_let_tv2 = enclosingTypeParams; - DAST._IType _1438_instanceType; + DAST._IType _1442_instanceType; DAST._IType _source67 = enclosingType; { if (_source67.is_UserDefined) { - DAST._IResolvedType _1439_r = _source67.dtor_resolved; - _1438_instanceType = DAST.Type.create_UserDefined(Dafny.Helpers.Let(_1439_r, _pat_let30_0 => Dafny.Helpers.Let(_pat_let30_0, _1440_dt__update__tmp_h0 => Dafny.Helpers.Let, DAST._IResolvedType>(_pat_let_tv2, _pat_let31_0 => Dafny.Helpers.Let, DAST._IResolvedType>(_pat_let31_0, _1441_dt__update_htypeArgs_h0 => DAST.ResolvedType.create((_1440_dt__update__tmp_h0).dtor_path, _1441_dt__update_htypeArgs_h0, (_1440_dt__update__tmp_h0).dtor_kind, (_1440_dt__update__tmp_h0).dtor_attributes, (_1440_dt__update__tmp_h0).dtor_properMethods, (_1440_dt__update__tmp_h0).dtor_extendedTypes)))))); + DAST._IResolvedType _1443_r = _source67.dtor_resolved; + _1442_instanceType = DAST.Type.create_UserDefined(Dafny.Helpers.Let(_1443_r, _pat_let30_0 => Dafny.Helpers.Let(_pat_let30_0, _1444_dt__update__tmp_h0 => Dafny.Helpers.Let, DAST._IResolvedType>(_pat_let_tv2, _pat_let31_0 => Dafny.Helpers.Let, DAST._IResolvedType>(_pat_let31_0, _1445_dt__update_htypeArgs_h0 => DAST.ResolvedType.create((_1444_dt__update__tmp_h0).dtor_path, _1445_dt__update_htypeArgs_h0, (_1444_dt__update__tmp_h0).dtor_kind, (_1444_dt__update__tmp_h0).dtor_attributes, (_1444_dt__update__tmp_h0).dtor_properMethods, (_1444_dt__update__tmp_h0).dtor_extendedTypes)))))); goto after_match14; } } { - _1438_instanceType = enclosingType; + _1442_instanceType = enclosingType; } after_match14: ; if (forTrait) { - RAST._IFormal _1442_selfFormal; + RAST._IFormal _1446_selfFormal; if ((m).dtor_wasFunction) { - _1442_selfFormal = RAST.Formal.selfBorrowed; + _1446_selfFormal = RAST.Formal.selfBorrowed; } else { - _1442_selfFormal = RAST.Formal.selfBorrowedMut; + _1446_selfFormal = RAST.Formal.selfBorrowedMut; } - _1428_params = Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_1442_selfFormal), _1428_params); + _1432_params = Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_1446_selfFormal), _1432_params); } else { - RAST._IType _1443_tpe; + RAST._IType _1447_tpe; RAST._IType _out104; - _out104 = (this).GenType(_1438_instanceType, DCOMP.GenTypeContext.@default()); - _1443_tpe = _out104; - if ((_1437_selfId).Equals(Dafny.Sequence.UnicodeFromString("this"))) { - _1443_tpe = RAST.Type.create_Borrowed(_1443_tpe); - } else if ((_1437_selfId).Equals(Dafny.Sequence.UnicodeFromString("self"))) { - if ((_1443_tpe).IsObjectOrPointer()) { + _out104 = (this).GenType(_1442_instanceType, DCOMP.GenTypeContext.@default()); + _1447_tpe = _out104; + if ((_1441_selfId).Equals(Dafny.Sequence.UnicodeFromString("this"))) { + _1447_tpe = RAST.Type.create_Borrowed(_1447_tpe); + } else if ((_1441_selfId).Equals(Dafny.Sequence.UnicodeFromString("self"))) { + if ((_1447_tpe).IsObjectOrPointer()) { if ((m).dtor_wasFunction) { - _1443_tpe = RAST.__default.SelfBorrowed; + _1447_tpe = RAST.__default.SelfBorrowed; } else { - _1443_tpe = RAST.__default.SelfBorrowedMut; + _1447_tpe = RAST.__default.SelfBorrowedMut; } } else { if ((((enclosingType).is_UserDefined) && ((((enclosingType).dtor_resolved).dtor_kind).is_Datatype)) && ((this).IsRcWrapped(((enclosingType).dtor_resolved).dtor_attributes))) { - _1443_tpe = RAST.Type.create_Borrowed(RAST.__default.Rc(RAST.Type.create_SelfOwned())); + _1447_tpe = RAST.Type.create_Borrowed(RAST.__default.Rc(RAST.Type.create_SelfOwned())); } else { - _1443_tpe = RAST.Type.create_Borrowed(RAST.Type.create_SelfOwned()); + _1447_tpe = RAST.Type.create_Borrowed(RAST.Type.create_SelfOwned()); } } } - _1428_params = Dafny.Sequence.Concat(Dafny.Sequence.FromElements(RAST.Formal.create(_1437_selfId, _1443_tpe)), _1428_params); + _1432_params = Dafny.Sequence.Concat(Dafny.Sequence.FromElements(RAST.Formal.create(_1441_selfId, _1447_tpe)), _1432_params); } - _1436_selfIdent = DCOMP.SelfInfo.create_ThisTyped(_1437_selfId, _1438_instanceType); + _1440_selfIdent = DCOMP.SelfInfo.create_ThisTyped(_1441_selfId, _1442_instanceType); } - Dafny.ISequence _1444_retTypeArgs; - _1444_retTypeArgs = Dafny.Sequence.FromElements(); - BigInteger _1445_typeI; - _1445_typeI = BigInteger.Zero; - while ((_1445_typeI) < (new BigInteger(((m).dtor_outTypes).Count))) { - RAST._IType _1446_typeExpr; + Dafny.ISequence _1448_retTypeArgs; + _1448_retTypeArgs = Dafny.Sequence.FromElements(); + BigInteger _1449_typeI; + _1449_typeI = BigInteger.Zero; + while ((_1449_typeI) < (new BigInteger(((m).dtor_outTypes).Count))) { + RAST._IType _1450_typeExpr; RAST._IType _out105; - _out105 = (this).GenType(((m).dtor_outTypes).Select(_1445_typeI), DCOMP.GenTypeContext.@default()); - _1446_typeExpr = _out105; - _1444_retTypeArgs = Dafny.Sequence.Concat(_1444_retTypeArgs, Dafny.Sequence.FromElements(_1446_typeExpr)); - _1445_typeI = (_1445_typeI) + (BigInteger.One); + _out105 = (this).GenType(((m).dtor_outTypes).Select(_1449_typeI), DCOMP.GenTypeContext.@default()); + _1450_typeExpr = _out105; + _1448_retTypeArgs = Dafny.Sequence.Concat(_1448_retTypeArgs, Dafny.Sequence.FromElements(_1450_typeExpr)); + _1449_typeI = (_1449_typeI) + (BigInteger.One); } - RAST._IVisibility _1447_visibility; + RAST._IVisibility _1451_visibility; if (forTrait) { - _1447_visibility = RAST.Visibility.create_PRIV(); + _1451_visibility = RAST.Visibility.create_PRIV(); } else { - _1447_visibility = RAST.Visibility.create_PUB(); + _1451_visibility = RAST.Visibility.create_PUB(); } - Dafny.ISequence _1448_typeParamsFiltered; - _1448_typeParamsFiltered = Dafny.Sequence.FromElements(); + Dafny.ISequence _1452_typeParamsFiltered; + _1452_typeParamsFiltered = Dafny.Sequence.FromElements(); BigInteger _hi28 = new BigInteger(((m).dtor_typeParams).Count); - for (BigInteger _1449_typeParamI = BigInteger.Zero; _1449_typeParamI < _hi28; _1449_typeParamI++) { - DAST._ITypeArgDecl _1450_typeParam; - _1450_typeParam = ((m).dtor_typeParams).Select(_1449_typeParamI); - if (!((enclosingTypeParams).Contains(DAST.Type.create_TypeArg((_1450_typeParam).dtor_name)))) { - _1448_typeParamsFiltered = Dafny.Sequence.Concat(_1448_typeParamsFiltered, Dafny.Sequence.FromElements(_1450_typeParam)); - } - } - Dafny.ISequence _1451_typeParams; - _1451_typeParams = Dafny.Sequence.FromElements(); - if ((new BigInteger((_1448_typeParamsFiltered).Count)).Sign == 1) { - BigInteger _hi29 = new BigInteger((_1448_typeParamsFiltered).Count); - for (BigInteger _1452_i = BigInteger.Zero; _1452_i < _hi29; _1452_i++) { - DAST._IType _1453_typeArg; - RAST._ITypeParamDecl _1454_rTypeParamDecl; + for (BigInteger _1453_typeParamI = BigInteger.Zero; _1453_typeParamI < _hi28; _1453_typeParamI++) { + DAST._ITypeArgDecl _1454_typeParam; + _1454_typeParam = ((m).dtor_typeParams).Select(_1453_typeParamI); + if (!((enclosingTypeParams).Contains(DAST.Type.create_TypeArg((_1454_typeParam).dtor_name)))) { + _1452_typeParamsFiltered = Dafny.Sequence.Concat(_1452_typeParamsFiltered, Dafny.Sequence.FromElements(_1454_typeParam)); + } + } + Dafny.ISequence _1455_typeParams; + _1455_typeParams = Dafny.Sequence.FromElements(); + if ((new BigInteger((_1452_typeParamsFiltered).Count)).Sign == 1) { + BigInteger _hi29 = new BigInteger((_1452_typeParamsFiltered).Count); + for (BigInteger _1456_i = BigInteger.Zero; _1456_i < _hi29; _1456_i++) { + DAST._IType _1457_typeArg; + RAST._ITypeParamDecl _1458_rTypeParamDecl; DAST._IType _out106; RAST._ITypeParamDecl _out107; - (this).GenTypeParam((_1448_typeParamsFiltered).Select(_1452_i), out _out106, out _out107); - _1453_typeArg = _out106; - _1454_rTypeParamDecl = _out107; - RAST._ITypeParamDecl _1455_dt__update__tmp_h1 = _1454_rTypeParamDecl; - Dafny.ISequence _1456_dt__update_hconstraints_h0 = Dafny.Sequence.Concat((_1454_rTypeParamDecl).dtor_constraints, Dafny.Sequence.FromElements(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("default"))).MSel(Dafny.Sequence.UnicodeFromString("Default")))); - _1454_rTypeParamDecl = RAST.TypeParamDecl.create((_1455_dt__update__tmp_h1).dtor_content, _1456_dt__update_hconstraints_h0); - _1451_typeParams = Dafny.Sequence.Concat(_1451_typeParams, Dafny.Sequence.FromElements(_1454_rTypeParamDecl)); - } - } - Std.Wrappers._IOption _1457_fBody = Std.Wrappers.Option.Default(); - DCOMP._IEnvironment _1458_env = DCOMP.Environment.Default(); - RAST._IExpr _1459_preBody; - _1459_preBody = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - Dafny.ISequence> _1460_preAssignNames; - _1460_preAssignNames = Dafny.Sequence>.FromElements(); - Dafny.IMap,RAST._IType> _1461_preAssignTypes; - _1461_preAssignTypes = Dafny.Map, RAST._IType>.FromElements(); + (this).GenTypeParam((_1452_typeParamsFiltered).Select(_1456_i), out _out106, out _out107); + _1457_typeArg = _out106; + _1458_rTypeParamDecl = _out107; + RAST._ITypeParamDecl _1459_dt__update__tmp_h1 = _1458_rTypeParamDecl; + Dafny.ISequence _1460_dt__update_hconstraints_h0 = Dafny.Sequence.Concat((_1458_rTypeParamDecl).dtor_constraints, Dafny.Sequence.FromElements(((RAST.__default.std__type).MSel(Dafny.Sequence.UnicodeFromString("default"))).MSel(Dafny.Sequence.UnicodeFromString("Default")))); + _1458_rTypeParamDecl = RAST.TypeParamDecl.create((_1459_dt__update__tmp_h1).dtor_content, _1460_dt__update_hconstraints_h0); + _1455_typeParams = Dafny.Sequence.Concat(_1455_typeParams, Dafny.Sequence.FromElements(_1458_rTypeParamDecl)); + } + } + Std.Wrappers._IOption _1461_fBody = Std.Wrappers.Option.Default(); + DCOMP._IEnvironment _1462_env = DCOMP.Environment.Default(); + RAST._IExpr _1463_preBody; + _1463_preBody = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); + Dafny.ISequence> _1464_preAssignNames; + _1464_preAssignNames = Dafny.Sequence>.FromElements(); + Dafny.IMap,RAST._IType> _1465_preAssignTypes; + _1465_preAssignTypes = Dafny.Map, RAST._IType>.FromElements(); if ((m).dtor_hasBody) { - Std.Wrappers._IOption>> _1462_earlyReturn; - _1462_earlyReturn = Std.Wrappers.Option>>.create_None(); + Std.Wrappers._IOption>> _1466_earlyReturn; + _1466_earlyReturn = Std.Wrappers.Option>>.create_None(); Std.Wrappers._IOption>> _source68 = (m).dtor_outVars; { if (_source68.is_Some) { - Dafny.ISequence> _1463_outVars = _source68.dtor_value; + Dafny.ISequence> _1467_outVars = _source68.dtor_value; { if ((m).dtor_outVarsAreUninitFieldsToAssign) { - _1462_earlyReturn = Std.Wrappers.Option>>.create_Some(Dafny.Sequence>.FromElements()); - BigInteger _hi30 = new BigInteger((_1463_outVars).Count); - for (BigInteger _1464_outI = BigInteger.Zero; _1464_outI < _hi30; _1464_outI++) { - Dafny.ISequence _1465_outVar; - _1465_outVar = (_1463_outVars).Select(_1464_outI); - Dafny.ISequence _1466_outName; - _1466_outName = DCOMP.__default.escapeName((_1465_outVar)); - Dafny.ISequence _1467_tracker__name; - _1467_tracker__name = DCOMP.__default.AddAssignedPrefix(_1466_outName); - _1460_preAssignNames = Dafny.Sequence>.Concat(_1460_preAssignNames, Dafny.Sequence>.FromElements(_1467_tracker__name)); - _1461_preAssignTypes = Dafny.Map, RAST._IType>.Update(_1461_preAssignTypes, _1467_tracker__name, RAST.Type.create_Bool()); - _1459_preBody = (_1459_preBody).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1467_tracker__name, Std.Wrappers.Option.create_Some(RAST.Type.create_Bool()), Std.Wrappers.Option.create_Some(RAST.Expr.create_LiteralBool(false)))); + _1466_earlyReturn = Std.Wrappers.Option>>.create_Some(Dafny.Sequence>.FromElements()); + BigInteger _hi30 = new BigInteger((_1467_outVars).Count); + for (BigInteger _1468_outI = BigInteger.Zero; _1468_outI < _hi30; _1468_outI++) { + Dafny.ISequence _1469_outVar; + _1469_outVar = (_1467_outVars).Select(_1468_outI); + Dafny.ISequence _1470_outName; + _1470_outName = DCOMP.__default.escapeName((_1469_outVar)); + Dafny.ISequence _1471_tracker__name; + _1471_tracker__name = DCOMP.__default.AddAssignedPrefix(_1470_outName); + _1464_preAssignNames = Dafny.Sequence>.Concat(_1464_preAssignNames, Dafny.Sequence>.FromElements(_1471_tracker__name)); + _1465_preAssignTypes = Dafny.Map, RAST._IType>.Update(_1465_preAssignTypes, _1471_tracker__name, RAST.Type.create_Bool()); + _1463_preBody = (_1463_preBody).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1471_tracker__name, Std.Wrappers.Option.create_Some(RAST.Type.create_Bool()), Std.Wrappers.Option.create_Some(RAST.Expr.create_LiteralBool(false)))); } } else { - Dafny.ISequence> _1468_tupleArgs; - _1468_tupleArgs = Dafny.Sequence>.FromElements(); - BigInteger _hi31 = new BigInteger((_1463_outVars).Count); - for (BigInteger _1469_outI = BigInteger.Zero; _1469_outI < _hi31; _1469_outI++) { - Dafny.ISequence _1470_outVar; - _1470_outVar = (_1463_outVars).Select(_1469_outI); - RAST._IType _1471_outType; + Dafny.ISequence> _1472_tupleArgs; + _1472_tupleArgs = Dafny.Sequence>.FromElements(); + BigInteger _hi31 = new BigInteger((_1467_outVars).Count); + for (BigInteger _1473_outI = BigInteger.Zero; _1473_outI < _hi31; _1473_outI++) { + Dafny.ISequence _1474_outVar; + _1474_outVar = (_1467_outVars).Select(_1473_outI); + RAST._IType _1475_outType; RAST._IType _out108; - _out108 = (this).GenType(((m).dtor_outTypes).Select(_1469_outI), DCOMP.GenTypeContext.@default()); - _1471_outType = _out108; - Dafny.ISequence _1472_outName; - _1472_outName = DCOMP.__default.escapeName((_1470_outVar)); - _1429_paramNames = Dafny.Sequence>.Concat(_1429_paramNames, Dafny.Sequence>.FromElements(_1472_outName)); - RAST._IType _1473_outMaybeType; - if ((_1471_outType).CanReadWithoutClone()) { - _1473_outMaybeType = _1471_outType; + _out108 = (this).GenType(((m).dtor_outTypes).Select(_1473_outI), DCOMP.GenTypeContext.@default()); + _1475_outType = _out108; + Dafny.ISequence _1476_outName; + _1476_outName = DCOMP.__default.escapeName((_1474_outVar)); + _1433_paramNames = Dafny.Sequence>.Concat(_1433_paramNames, Dafny.Sequence>.FromElements(_1476_outName)); + RAST._IType _1477_outMaybeType; + if ((_1475_outType).CanReadWithoutClone()) { + _1477_outMaybeType = _1475_outType; } else { - _1473_outMaybeType = RAST.__default.MaybePlaceboType(_1471_outType); + _1477_outMaybeType = RAST.__default.MaybePlaceboType(_1475_outType); } - _1430_paramTypes = Dafny.Map, RAST._IType>.Update(_1430_paramTypes, _1472_outName, _1473_outMaybeType); - _1468_tupleArgs = Dafny.Sequence>.Concat(_1468_tupleArgs, Dafny.Sequence>.FromElements(_1472_outName)); + _1434_paramTypes = Dafny.Map, RAST._IType>.Update(_1434_paramTypes, _1476_outName, _1477_outMaybeType); + _1472_tupleArgs = Dafny.Sequence>.Concat(_1472_tupleArgs, Dafny.Sequence>.FromElements(_1476_outName)); } - _1462_earlyReturn = Std.Wrappers.Option>>.create_Some(_1468_tupleArgs); + _1466_earlyReturn = Std.Wrappers.Option>>.create_Some(_1472_tupleArgs); } } goto after_match15; @@ -2346,23 +2367,23 @@ public RAST._IImplMember GenMethod(DAST._IMethod m, bool forTrait, DAST._IType e { } after_match15: ; - _1458_env = DCOMP.Environment.create(Dafny.Sequence>.Concat(_1460_preAssignNames, _1429_paramNames), Dafny.Map, RAST._IType>.Merge(_1461_preAssignTypes, _1430_paramTypes)); - RAST._IExpr _1474_body; - Dafny.ISet> _1475___v69; - DCOMP._IEnvironment _1476___v70; + _1462_env = DCOMP.Environment.create(Dafny.Sequence>.Concat(_1464_preAssignNames, _1433_paramNames), Dafny.Map, RAST._IType>.Merge(_1465_preAssignTypes, _1434_paramTypes)); + RAST._IExpr _1478_body; + Dafny.ISet> _1479___v69; + DCOMP._IEnvironment _1480___v70; RAST._IExpr _out109; Dafny.ISet> _out110; DCOMP._IEnvironment _out111; - (this).GenStmts((m).dtor_body, _1436_selfIdent, _1458_env, true, _1462_earlyReturn, out _out109, out _out110, out _out111); - _1474_body = _out109; - _1475___v69 = _out110; - _1476___v70 = _out111; - _1457_fBody = Std.Wrappers.Option.create_Some((_1459_preBody).Then(_1474_body)); + (this).GenStmts((m).dtor_body, _1440_selfIdent, _1462_env, true, _1466_earlyReturn, out _out109, out _out110, out _out111); + _1478_body = _out109; + _1479___v69 = _out110; + _1480___v70 = _out111; + _1461_fBody = Std.Wrappers.Option.create_Some((_1463_preBody).Then(_1478_body)); } else { - _1458_env = DCOMP.Environment.create(_1429_paramNames, _1430_paramTypes); - _1457_fBody = Std.Wrappers.Option.create_None(); + _1462_env = DCOMP.Environment.create(_1433_paramNames, _1434_paramTypes); + _1461_fBody = Std.Wrappers.Option.create_None(); } - s = RAST.ImplMember.create_FnDecl(_1447_visibility, RAST.Fn.create(_1435_fnName, _1451_typeParams, _1428_params, Std.Wrappers.Option.create_Some((((new BigInteger((_1444_retTypeArgs).Count)) == (BigInteger.One)) ? ((_1444_retTypeArgs).Select(BigInteger.Zero)) : (RAST.Type.create_TupleType(_1444_retTypeArgs)))), Dafny.Sequence.UnicodeFromString(""), _1457_fBody)); + s = RAST.ImplMember.create_FnDecl(_1451_visibility, RAST.Fn.create(_1439_fnName, _1455_typeParams, _1432_params, Std.Wrappers.Option.create_Some((((new BigInteger((_1448_retTypeArgs).Count)) == (BigInteger.One)) ? ((_1448_retTypeArgs).Select(BigInteger.Zero)) : (RAST.Type.create_TupleType(_1448_retTypeArgs)))), Dafny.Sequence.UnicodeFromString(""), _1461_fBody)); return s; } public void GenStmts(Dafny.ISequence stmts, DCOMP._ISelfInfo selfIdent, DCOMP._IEnvironment env, bool isLast, Std.Wrappers._IOption>> earlyReturn, out RAST._IExpr generated, out Dafny.ISet> readIdents, out DCOMP._IEnvironment newEnv) @@ -2371,36 +2392,36 @@ public void GenStmts(Dafny.ISequence stmts, DCOMP._ISelfInfo s readIdents = Dafny.Set>.Empty; newEnv = DCOMP.Environment.Default(); generated = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - Dafny.ISet> _1477_declarations; - _1477_declarations = Dafny.Set>.FromElements(); + Dafny.ISet> _1481_declarations; + _1481_declarations = Dafny.Set>.FromElements(); readIdents = Dafny.Set>.FromElements(); - BigInteger _1478_i; - _1478_i = BigInteger.Zero; + BigInteger _1482_i; + _1482_i = BigInteger.Zero; newEnv = env; - Dafny.ISequence _1479_stmts; - _1479_stmts = stmts; - while ((_1478_i) < (new BigInteger((_1479_stmts).Count))) { - DAST._IStatement _1480_stmt; - _1480_stmt = (_1479_stmts).Select(_1478_i); - DAST._IStatement _source69 = _1480_stmt; + Dafny.ISequence _1483_stmts; + _1483_stmts = stmts; + while ((_1482_i) < (new BigInteger((_1483_stmts).Count))) { + DAST._IStatement _1484_stmt; + _1484_stmt = (_1483_stmts).Select(_1482_i); + DAST._IStatement _source69 = _1484_stmt; { if (_source69.is_DeclareVar) { - Dafny.ISequence _1481_name = _source69.dtor_name; - DAST._IType _1482_optType = _source69.dtor_typ; + Dafny.ISequence _1485_name = _source69.dtor_name; + DAST._IType _1486_optType = _source69.dtor_typ; Std.Wrappers._IOption maybeValue0 = _source69.dtor_maybeValue; if (maybeValue0.is_None) { - if (((_1478_i) + (BigInteger.One)) < (new BigInteger((_1479_stmts).Count))) { - DAST._IStatement _source70 = (_1479_stmts).Select((_1478_i) + (BigInteger.One)); + if (((_1482_i) + (BigInteger.One)) < (new BigInteger((_1483_stmts).Count))) { + DAST._IStatement _source70 = (_1483_stmts).Select((_1482_i) + (BigInteger.One)); { if (_source70.is_Assign) { DAST._IAssignLhs lhs0 = _source70.dtor_lhs; if (lhs0.is_Ident) { Dafny.ISequence ident0 = lhs0.dtor_ident; - Dafny.ISequence _1483_name2 = ident0; - DAST._IExpression _1484_rhs = _source70.dtor_value; - if (object.Equals(_1483_name2, _1481_name)) { - _1479_stmts = Dafny.Sequence.Concat(Dafny.Sequence.Concat((_1479_stmts).Subsequence(BigInteger.Zero, _1478_i), Dafny.Sequence.FromElements(DAST.Statement.create_DeclareVar(_1481_name, _1482_optType, Std.Wrappers.Option.create_Some(_1484_rhs)))), (_1479_stmts).Drop((_1478_i) + (new BigInteger(2)))); - _1480_stmt = (_1479_stmts).Select(_1478_i); + Dafny.ISequence _1487_name2 = ident0; + DAST._IExpression _1488_rhs = _source70.dtor_value; + if (object.Equals(_1487_name2, _1485_name)) { + _1483_stmts = Dafny.Sequence.Concat(Dafny.Sequence.Concat((_1483_stmts).Subsequence(BigInteger.Zero, _1482_i), Dafny.Sequence.FromElements(DAST.Statement.create_DeclareVar(_1485_name, _1486_optType, Std.Wrappers.Option.create_Some(_1488_rhs)))), (_1483_stmts).Drop((_1482_i) + (new BigInteger(2)))); + _1484_stmt = (_1483_stmts).Select(_1482_i); } goto after_match17; } @@ -2417,23 +2438,23 @@ public void GenStmts(Dafny.ISequence stmts, DCOMP._ISelfInfo s { } after_match16: ; - RAST._IExpr _1485_stmtExpr; - Dafny.ISet> _1486_recIdents; - DCOMP._IEnvironment _1487_newEnv2; + RAST._IExpr _1489_stmtExpr; + Dafny.ISet> _1490_recIdents; + DCOMP._IEnvironment _1491_newEnv2; RAST._IExpr _out112; Dafny.ISet> _out113; DCOMP._IEnvironment _out114; - (this).GenStmt(_1480_stmt, selfIdent, newEnv, (isLast) && ((_1478_i) == ((new BigInteger((_1479_stmts).Count)) - (BigInteger.One))), earlyReturn, out _out112, out _out113, out _out114); - _1485_stmtExpr = _out112; - _1486_recIdents = _out113; - _1487_newEnv2 = _out114; - newEnv = _1487_newEnv2; - DAST._IStatement _source71 = _1480_stmt; + (this).GenStmt(_1484_stmt, selfIdent, newEnv, (isLast) && ((_1482_i) == ((new BigInteger((_1483_stmts).Count)) - (BigInteger.One))), earlyReturn, out _out112, out _out113, out _out114); + _1489_stmtExpr = _out112; + _1490_recIdents = _out113; + _1491_newEnv2 = _out114; + newEnv = _1491_newEnv2; + DAST._IStatement _source71 = _1484_stmt; { if (_source71.is_DeclareVar) { - Dafny.ISequence _1488_name = _source71.dtor_name; + Dafny.ISequence _1492_name = _source71.dtor_name; { - _1477_declarations = Dafny.Set>.Union(_1477_declarations, Dafny.Set>.FromElements(DCOMP.__default.escapeName(_1488_name))); + _1481_declarations = Dafny.Set>.Union(_1481_declarations, Dafny.Set>.FromElements(DCOMP.__default.escapeName(_1492_name))); } goto after_match18; } @@ -2441,10 +2462,10 @@ public void GenStmts(Dafny.ISequence stmts, DCOMP._ISelfInfo s { } after_match18: ; - readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.Difference(_1486_recIdents, _1477_declarations)); - generated = (generated).Then(_1485_stmtExpr); - _1478_i = (_1478_i) + (BigInteger.One); - if ((_1485_stmtExpr).is_Return) { + readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.Difference(_1490_recIdents, _1481_declarations)); + generated = (generated).Then(_1489_stmtExpr); + _1482_i = (_1482_i) + (BigInteger.One); + if ((_1489_stmtExpr).is_Return) { goto after_0; } continue_0: ; @@ -2462,16 +2483,16 @@ public void GenAssignLhs(DAST._IAssignLhs lhs, RAST._IExpr rhs, DCOMP._ISelfInfo { if (_source72.is_Ident) { Dafny.ISequence ident1 = _source72.dtor_ident; - Dafny.ISequence _1489_id = ident1; + Dafny.ISequence _1493_id = ident1; { - Dafny.ISequence _1490_idRust; - _1490_idRust = DCOMP.__default.escapeName(_1489_id); - if (((env).IsBorrowed(_1490_idRust)) || ((env).IsBorrowedMut(_1490_idRust))) { - generated = RAST.__default.AssignVar(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("*"), _1490_idRust), rhs); + Dafny.ISequence _1494_idRust; + _1494_idRust = DCOMP.__default.escapeName(_1493_id); + if (((env).IsBorrowed(_1494_idRust)) || ((env).IsBorrowedMut(_1494_idRust))) { + generated = RAST.__default.AssignVar(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("*"), _1494_idRust), rhs); } else { - generated = RAST.__default.AssignVar(_1490_idRust, rhs); + generated = RAST.__default.AssignVar(_1494_idRust, rhs); } - readIdents = Dafny.Set>.FromElements(_1490_idRust); + readIdents = Dafny.Set>.FromElements(_1494_idRust); needsIIFE = false; } goto after_match19; @@ -2479,22 +2500,22 @@ public void GenAssignLhs(DAST._IAssignLhs lhs, RAST._IExpr rhs, DCOMP._ISelfInfo } { if (_source72.is_Select) { - DAST._IExpression _1491_on = _source72.dtor_expr; - Dafny.ISequence _1492_field = _source72.dtor_field; + DAST._IExpression _1495_on = _source72.dtor_expr; + Dafny.ISequence _1496_field = _source72.dtor_field; { - Dafny.ISequence _1493_fieldName; - _1493_fieldName = DCOMP.__default.escapeName(_1492_field); - RAST._IExpr _1494_onExpr; - DCOMP._IOwnership _1495_onOwned; - Dafny.ISet> _1496_recIdents; + Dafny.ISequence _1497_fieldName; + _1497_fieldName = DCOMP.__default.escapeName(_1496_field); + RAST._IExpr _1498_onExpr; + DCOMP._IOwnership _1499_onOwned; + Dafny.ISet> _1500_recIdents; RAST._IExpr _out115; DCOMP._IOwnership _out116; Dafny.ISet> _out117; - (this).GenExpr(_1491_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out115, out _out116, out _out117); - _1494_onExpr = _out115; - _1495_onOwned = _out116; - _1496_recIdents = _out117; - RAST._IExpr _source73 = _1494_onExpr; + (this).GenExpr(_1495_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out115, out _out116, out _out117); + _1498_onExpr = _out115; + _1499_onOwned = _out116; + _1500_recIdents = _out117; + RAST._IExpr _source73 = _1498_onExpr; { bool disjunctiveMatch10 = false; if (_source73.is_Call) { @@ -2531,79 +2552,79 @@ public void GenAssignLhs(DAST._IAssignLhs lhs, RAST._IExpr rhs, DCOMP._ISelfInfo } } if (disjunctiveMatch10) { - Dafny.ISequence _1497_isAssignedVar; - _1497_isAssignedVar = DCOMP.__default.AddAssignedPrefix(_1493_fieldName); - if (((newEnv).dtor_names).Contains(_1497_isAssignedVar)) { - generated = ((RAST.__default.dafny__runtime).MSel((this).update__field__uninit__macro)).Apply(Dafny.Sequence.FromElements((this).thisInConstructor, RAST.Expr.create_Identifier(_1493_fieldName), RAST.Expr.create_Identifier(_1497_isAssignedVar), rhs)); - newEnv = (newEnv).RemoveAssigned(_1497_isAssignedVar); + Dafny.ISequence _1501_isAssignedVar; + _1501_isAssignedVar = DCOMP.__default.AddAssignedPrefix(_1497_fieldName); + if (((newEnv).dtor_names).Contains(_1501_isAssignedVar)) { + generated = ((RAST.__default.dafny__runtime).MSel((this).update__field__uninit__macro)).Apply(Dafny.Sequence.FromElements((this).thisInConstructor, RAST.Expr.create_Identifier(_1497_fieldName), RAST.Expr.create_Identifier(_1501_isAssignedVar), rhs)); + newEnv = (newEnv).RemoveAssigned(_1501_isAssignedVar); } else { - (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Unespected field to assign whose isAssignedVar is not in the environment: "), _1497_isAssignedVar)); - generated = RAST.__default.AssignMember(RAST.Expr.create_RawExpr((this.error).dtor_value), _1493_fieldName, rhs); + (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Unespected field to assign whose isAssignedVar is not in the environment: "), _1501_isAssignedVar)); + generated = RAST.__default.AssignMember(RAST.Expr.create_RawExpr((this.error).dtor_value), _1497_fieldName, rhs); } goto after_match20; } } { - if (!object.Equals(_1494_onExpr, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("self")))) { - _1494_onExpr = ((this).modify__macro).Apply1(_1494_onExpr); + if (!object.Equals(_1498_onExpr, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("self")))) { + _1498_onExpr = ((this).modify__macro).Apply1(_1498_onExpr); } - generated = RAST.__default.AssignMember(_1494_onExpr, _1493_fieldName, rhs); + generated = RAST.__default.AssignMember(_1498_onExpr, _1497_fieldName, rhs); } after_match20: ; - readIdents = _1496_recIdents; + readIdents = _1500_recIdents; needsIIFE = false; } goto after_match19; } } { - DAST._IExpression _1498_on = _source72.dtor_expr; - Dafny.ISequence _1499_indices = _source72.dtor_indices; + DAST._IExpression _1502_on = _source72.dtor_expr; + Dafny.ISequence _1503_indices = _source72.dtor_indices; { - RAST._IExpr _1500_onExpr; - DCOMP._IOwnership _1501_onOwned; - Dafny.ISet> _1502_recIdents; + RAST._IExpr _1504_onExpr; + DCOMP._IOwnership _1505_onOwned; + Dafny.ISet> _1506_recIdents; RAST._IExpr _out118; DCOMP._IOwnership _out119; Dafny.ISet> _out120; - (this).GenExpr(_1498_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out118, out _out119, out _out120); - _1500_onExpr = _out118; - _1501_onOwned = _out119; - _1502_recIdents = _out120; - readIdents = _1502_recIdents; - _1500_onExpr = ((this).modify__macro).Apply1(_1500_onExpr); - RAST._IExpr _1503_r; - _1503_r = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - Dafny.ISequence _1504_indicesExpr; - _1504_indicesExpr = Dafny.Sequence.FromElements(); - BigInteger _hi32 = new BigInteger((_1499_indices).Count); - for (BigInteger _1505_i = BigInteger.Zero; _1505_i < _hi32; _1505_i++) { - RAST._IExpr _1506_idx; - DCOMP._IOwnership _1507___v79; - Dafny.ISet> _1508_recIdentsIdx; + (this).GenExpr(_1502_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out118, out _out119, out _out120); + _1504_onExpr = _out118; + _1505_onOwned = _out119; + _1506_recIdents = _out120; + readIdents = _1506_recIdents; + _1504_onExpr = ((this).modify__macro).Apply1(_1504_onExpr); + RAST._IExpr _1507_r; + _1507_r = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); + Dafny.ISequence _1508_indicesExpr; + _1508_indicesExpr = Dafny.Sequence.FromElements(); + BigInteger _hi32 = new BigInteger((_1503_indices).Count); + for (BigInteger _1509_i = BigInteger.Zero; _1509_i < _hi32; _1509_i++) { + RAST._IExpr _1510_idx; + DCOMP._IOwnership _1511___v79; + Dafny.ISet> _1512_recIdentsIdx; RAST._IExpr _out121; DCOMP._IOwnership _out122; Dafny.ISet> _out123; - (this).GenExpr((_1499_indices).Select(_1505_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out121, out _out122, out _out123); - _1506_idx = _out121; - _1507___v79 = _out122; - _1508_recIdentsIdx = _out123; - Dafny.ISequence _1509_varName; - _1509_varName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("__idx"), Std.Strings.__default.OfNat(_1505_i)); - _1504_indicesExpr = Dafny.Sequence.Concat(_1504_indicesExpr, Dafny.Sequence.FromElements(RAST.Expr.create_Identifier(_1509_varName))); - _1503_r = (_1503_r).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), _1509_varName, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(RAST.__default.IntoUsize(_1506_idx)))); - readIdents = Dafny.Set>.Union(readIdents, _1508_recIdentsIdx); - } - if ((new BigInteger((_1499_indices).Count)) > (BigInteger.One)) { - _1500_onExpr = (_1500_onExpr).Sel(Dafny.Sequence.UnicodeFromString("data")); - } - RAST._IExpr _1510_rhs; - _1510_rhs = rhs; + (this).GenExpr((_1503_indices).Select(_1509_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out121, out _out122, out _out123); + _1510_idx = _out121; + _1511___v79 = _out122; + _1512_recIdentsIdx = _out123; + Dafny.ISequence _1513_varName; + _1513_varName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("__idx"), Std.Strings.__default.OfNat(_1509_i)); + _1508_indicesExpr = Dafny.Sequence.Concat(_1508_indicesExpr, Dafny.Sequence.FromElements(RAST.Expr.create_Identifier(_1513_varName))); + _1507_r = (_1507_r).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), _1513_varName, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(RAST.__default.IntoUsize(_1510_idx)))); + readIdents = Dafny.Set>.Union(readIdents, _1512_recIdentsIdx); + } + if ((new BigInteger((_1503_indices).Count)) > (BigInteger.One)) { + _1504_onExpr = (_1504_onExpr).Sel(Dafny.Sequence.UnicodeFromString("data")); + } + RAST._IExpr _1514_rhs; + _1514_rhs = rhs; var _pat_let_tv3 = env; - if (((_1500_onExpr).IsLhsIdentifier()) && (Dafny.Helpers.Let, bool>((_1500_onExpr).LhsIdentifierName(), _pat_let32_0 => Dafny.Helpers.Let, bool>(_pat_let32_0, _1511_name => (true) && (Dafny.Helpers.Let, bool>((_pat_let_tv3).GetType(_1511_name), _pat_let33_0 => Dafny.Helpers.Let, bool>(_pat_let33_0, _1512_tpe => ((_1512_tpe).is_Some) && (((_1512_tpe).dtor_value).IsUninitArray())))))))) { - _1510_rhs = RAST.__default.MaybeUninitNew(_1510_rhs); + if (((_1504_onExpr).IsLhsIdentifier()) && (Dafny.Helpers.Let, bool>((_1504_onExpr).LhsIdentifierName(), _pat_let32_0 => Dafny.Helpers.Let, bool>(_pat_let32_0, _1515_name => (true) && (Dafny.Helpers.Let, bool>((_pat_let_tv3).GetType(_1515_name), _pat_let33_0 => Dafny.Helpers.Let, bool>(_pat_let33_0, _1516_tpe => ((_1516_tpe).is_Some) && (((_1516_tpe).dtor_value).IsUninitArray())))))))) { + _1514_rhs = RAST.__default.MaybeUninitNew(_1514_rhs); } - generated = (_1503_r).Then(RAST.Expr.create_Assign(Std.Wrappers.Option.create_Some(RAST.AssignLhs.create_Index(_1500_onExpr, _1504_indicesExpr)), _1510_rhs)); + generated = (_1507_r).Then(RAST.Expr.create_Assign(Std.Wrappers.Option.create_Some(RAST.AssignLhs.create_Index(_1504_onExpr, _1508_indicesExpr)), _1514_rhs)); needsIIFE = true; } } @@ -2617,37 +2638,37 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE DAST._IStatement _source74 = stmt; { if (_source74.is_ConstructorNewSeparator) { - Dafny.ISequence _1513_fields = _source74.dtor_fields; + Dafny.ISequence _1517_fields = _source74.dtor_fields; { generated = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); readIdents = Dafny.Set>.FromElements(); newEnv = env; - BigInteger _hi33 = new BigInteger((_1513_fields).Count); - for (BigInteger _1514_i = BigInteger.Zero; _1514_i < _hi33; _1514_i++) { - DAST._IFormal _1515_field; - _1515_field = (_1513_fields).Select(_1514_i); - Dafny.ISequence _1516_fieldName; - _1516_fieldName = DCOMP.__default.escapeName((_1515_field).dtor_name); - RAST._IType _1517_fieldTyp; + BigInteger _hi33 = new BigInteger((_1517_fields).Count); + for (BigInteger _1518_i = BigInteger.Zero; _1518_i < _hi33; _1518_i++) { + DAST._IFormal _1519_field; + _1519_field = (_1517_fields).Select(_1518_i); + Dafny.ISequence _1520_fieldName; + _1520_fieldName = DCOMP.__default.escapeName((_1519_field).dtor_name); + RAST._IType _1521_fieldTyp; RAST._IType _out124; - _out124 = (this).GenType((_1515_field).dtor_typ, DCOMP.GenTypeContext.@default()); - _1517_fieldTyp = _out124; - Dafny.ISequence _1518_isAssignedVar; - _1518_isAssignedVar = DCOMP.__default.AddAssignedPrefix(_1516_fieldName); - if (((newEnv).dtor_names).Contains(_1518_isAssignedVar)) { - RAST._IExpr _1519_rhs; - DCOMP._IOwnership _1520___v80; - Dafny.ISet> _1521___v81; + _out124 = (this).GenType((_1519_field).dtor_typ, DCOMP.GenTypeContext.@default()); + _1521_fieldTyp = _out124; + Dafny.ISequence _1522_isAssignedVar; + _1522_isAssignedVar = DCOMP.__default.AddAssignedPrefix(_1520_fieldName); + if (((newEnv).dtor_names).Contains(_1522_isAssignedVar)) { + RAST._IExpr _1523_rhs; + DCOMP._IOwnership _1524___v80; + Dafny.ISet> _1525___v81; RAST._IExpr _out125; DCOMP._IOwnership _out126; Dafny.ISet> _out127; - (this).GenExpr(DAST.Expression.create_InitializationValue((_1515_field).dtor_typ), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out125, out _out126, out _out127); - _1519_rhs = _out125; - _1520___v80 = _out126; - _1521___v81 = _out127; - readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.FromElements(_1518_isAssignedVar)); - generated = (generated).Then(((RAST.__default.dafny__runtime).MSel((this).update__field__if__uninit__macro)).Apply(Dafny.Sequence.FromElements(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("this")), RAST.Expr.create_Identifier(_1516_fieldName), RAST.Expr.create_Identifier(_1518_isAssignedVar), _1519_rhs))); - newEnv = (newEnv).RemoveAssigned(_1518_isAssignedVar); + (this).GenExpr(DAST.Expression.create_InitializationValue((_1519_field).dtor_typ), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out125, out _out126, out _out127); + _1523_rhs = _out125; + _1524___v80 = _out126; + _1525___v81 = _out127; + readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.FromElements(_1522_isAssignedVar)); + generated = (generated).Then(((RAST.__default.dafny__runtime).MSel((this).update__field__if__uninit__macro)).Apply(Dafny.Sequence.FromElements(RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("this")), RAST.Expr.create_Identifier(_1520_fieldName), RAST.Expr.create_Identifier(_1522_isAssignedVar), _1523_rhs))); + newEnv = (newEnv).RemoveAssigned(_1522_isAssignedVar); } } } @@ -2656,48 +2677,48 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_DeclareVar) { - Dafny.ISequence _1522_name = _source74.dtor_name; - DAST._IType _1523_typ = _source74.dtor_typ; + Dafny.ISequence _1526_name = _source74.dtor_name; + DAST._IType _1527_typ = _source74.dtor_typ; Std.Wrappers._IOption maybeValue1 = _source74.dtor_maybeValue; if (maybeValue1.is_Some) { - DAST._IExpression _1524_expression = maybeValue1.dtor_value; + DAST._IExpression _1528_expression = maybeValue1.dtor_value; { - RAST._IType _1525_tpe; + RAST._IType _1529_tpe; RAST._IType _out128; - _out128 = (this).GenType(_1523_typ, DCOMP.GenTypeContext.InBinding()); - _1525_tpe = _out128; - Dafny.ISequence _1526_varName; - _1526_varName = DCOMP.__default.escapeName(_1522_name); - bool _1527_hasCopySemantics; - _1527_hasCopySemantics = (_1525_tpe).CanReadWithoutClone(); - if (((_1524_expression).is_InitializationValue) && (!(_1527_hasCopySemantics))) { - generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1526_varName, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("MaybePlacebo"))).ApplyType1(_1525_tpe)).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()))); + _out128 = (this).GenType(_1527_typ, DCOMP.GenTypeContext.InBinding()); + _1529_tpe = _out128; + Dafny.ISequence _1530_varName; + _1530_varName = DCOMP.__default.escapeName(_1526_name); + bool _1531_hasCopySemantics; + _1531_hasCopySemantics = (_1529_tpe).CanReadWithoutClone(); + if (((_1528_expression).is_InitializationValue) && (!(_1531_hasCopySemantics))) { + generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1530_varName, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("MaybePlacebo"))).ApplyType1(_1529_tpe)).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()))); readIdents = Dafny.Set>.FromElements(); - newEnv = (env).AddAssigned(_1526_varName, RAST.__default.MaybePlaceboType(_1525_tpe)); + newEnv = (env).AddAssigned(_1530_varName, RAST.__default.MaybePlaceboType(_1529_tpe)); } else { - RAST._IExpr _1528_expr = RAST.Expr.Default(); - Dafny.ISet> _1529_recIdents = Dafny.Set>.Empty; - if (((_1524_expression).is_InitializationValue) && ((_1525_tpe).IsObjectOrPointer())) { - _1528_expr = (_1525_tpe).ToNullExpr(); - _1529_recIdents = Dafny.Set>.FromElements(); + RAST._IExpr _1532_expr = RAST.Expr.Default(); + Dafny.ISet> _1533_recIdents = Dafny.Set>.Empty; + if (((_1528_expression).is_InitializationValue) && ((_1529_tpe).IsObjectOrPointer())) { + _1532_expr = (_1529_tpe).ToNullExpr(); + _1533_recIdents = Dafny.Set>.FromElements(); } else { - DCOMP._IOwnership _1530_exprOwnership = DCOMP.Ownership.Default(); + DCOMP._IOwnership _1534_exprOwnership = DCOMP.Ownership.Default(); RAST._IExpr _out129; DCOMP._IOwnership _out130; Dafny.ISet> _out131; - (this).GenExpr(_1524_expression, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out129, out _out130, out _out131); - _1528_expr = _out129; - _1530_exprOwnership = _out130; - _1529_recIdents = _out131; + (this).GenExpr(_1528_expression, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out129, out _out130, out _out131); + _1532_expr = _out129; + _1534_exprOwnership = _out130; + _1533_recIdents = _out131; } - readIdents = _1529_recIdents; - if ((_1524_expression).is_NewUninitArray) { - _1525_tpe = (_1525_tpe).TypeAtInitialization(); + readIdents = _1533_recIdents; + if ((_1528_expression).is_NewUninitArray) { + _1529_tpe = (_1529_tpe).TypeAtInitialization(); } else { - _1525_tpe = _1525_tpe; + _1529_tpe = _1529_tpe; } - generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), DCOMP.__default.escapeName(_1522_name), Std.Wrappers.Option.create_Some(_1525_tpe), Std.Wrappers.Option.create_Some(_1528_expr)); - newEnv = (env).AddAssigned(DCOMP.__default.escapeName(_1522_name), _1525_tpe); + generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), DCOMP.__default.escapeName(_1526_name), Std.Wrappers.Option.create_Some(_1529_tpe), Std.Wrappers.Option.create_Some(_1532_expr)); + newEnv = (env).AddAssigned(DCOMP.__default.escapeName(_1526_name), _1529_tpe); } } goto after_match21; @@ -2706,17 +2727,17 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_DeclareVar) { - Dafny.ISequence _1531_name = _source74.dtor_name; - DAST._IType _1532_typ = _source74.dtor_typ; + Dafny.ISequence _1535_name = _source74.dtor_name; + DAST._IType _1536_typ = _source74.dtor_typ; Std.Wrappers._IOption maybeValue2 = _source74.dtor_maybeValue; if (maybeValue2.is_None) { { - DAST._IStatement _1533_newStmt; - _1533_newStmt = DAST.Statement.create_DeclareVar(_1531_name, _1532_typ, Std.Wrappers.Option.create_Some(DAST.Expression.create_InitializationValue(_1532_typ))); + DAST._IStatement _1537_newStmt; + _1537_newStmt = DAST.Statement.create_DeclareVar(_1535_name, _1536_typ, Std.Wrappers.Option.create_Some(DAST.Expression.create_InitializationValue(_1536_typ))); RAST._IExpr _out132; Dafny.ISet> _out133; DCOMP._IEnvironment _out134; - (this).GenStmt(_1533_newStmt, selfIdent, env, isLast, earlyReturn, out _out132, out _out133, out _out134); + (this).GenStmt(_1537_newStmt, selfIdent, env, isLast, earlyReturn, out _out132, out _out133, out _out134); generated = _out132; readIdents = _out133; newEnv = _out134; @@ -2727,124 +2748,124 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_Assign) { - DAST._IAssignLhs _1534_lhs = _source74.dtor_lhs; - DAST._IExpression _1535_expression = _source74.dtor_value; + DAST._IAssignLhs _1538_lhs = _source74.dtor_lhs; + DAST._IExpression _1539_expression = _source74.dtor_value; { - RAST._IExpr _1536_exprGen; - DCOMP._IOwnership _1537___v82; - Dafny.ISet> _1538_exprIdents; + RAST._IExpr _1540_exprGen; + DCOMP._IOwnership _1541___v82; + Dafny.ISet> _1542_exprIdents; RAST._IExpr _out135; DCOMP._IOwnership _out136; Dafny.ISet> _out137; - (this).GenExpr(_1535_expression, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out135, out _out136, out _out137); - _1536_exprGen = _out135; - _1537___v82 = _out136; - _1538_exprIdents = _out137; - if ((_1534_lhs).is_Ident) { - Dafny.ISequence _1539_rustId; - _1539_rustId = DCOMP.__default.escapeName(((_1534_lhs).dtor_ident)); - Std.Wrappers._IOption _1540_tpe; - _1540_tpe = (env).GetType(_1539_rustId); - if (((_1540_tpe).is_Some) && ((((_1540_tpe).dtor_value).ExtractMaybePlacebo()).is_Some)) { - _1536_exprGen = RAST.__default.MaybePlacebo(_1536_exprGen); + (this).GenExpr(_1539_expression, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out135, out _out136, out _out137); + _1540_exprGen = _out135; + _1541___v82 = _out136; + _1542_exprIdents = _out137; + if ((_1538_lhs).is_Ident) { + Dafny.ISequence _1543_rustId; + _1543_rustId = DCOMP.__default.escapeName(((_1538_lhs).dtor_ident)); + Std.Wrappers._IOption _1544_tpe; + _1544_tpe = (env).GetType(_1543_rustId); + if (((_1544_tpe).is_Some) && ((((_1544_tpe).dtor_value).ExtractMaybePlacebo()).is_Some)) { + _1540_exprGen = RAST.__default.MaybePlacebo(_1540_exprGen); } } - if (((_1534_lhs).is_Index) && (((_1534_lhs).dtor_expr).is_Ident)) { - Dafny.ISequence _1541_rustId; - _1541_rustId = DCOMP.__default.escapeName(((_1534_lhs).dtor_expr).dtor_name); - Std.Wrappers._IOption _1542_tpe; - _1542_tpe = (env).GetType(_1541_rustId); - if (((_1542_tpe).is_Some) && ((((_1542_tpe).dtor_value).ExtractMaybeUninitArrayElement()).is_Some)) { - _1536_exprGen = RAST.__default.MaybeUninitNew(_1536_exprGen); + if (((_1538_lhs).is_Index) && (((_1538_lhs).dtor_expr).is_Ident)) { + Dafny.ISequence _1545_rustId; + _1545_rustId = DCOMP.__default.escapeName(((_1538_lhs).dtor_expr).dtor_name); + Std.Wrappers._IOption _1546_tpe; + _1546_tpe = (env).GetType(_1545_rustId); + if (((_1546_tpe).is_Some) && ((((_1546_tpe).dtor_value).ExtractMaybeUninitArrayElement()).is_Some)) { + _1540_exprGen = RAST.__default.MaybeUninitNew(_1540_exprGen); } } - RAST._IExpr _1543_lhsGen; - bool _1544_needsIIFE; - Dafny.ISet> _1545_recIdents; - DCOMP._IEnvironment _1546_resEnv; + RAST._IExpr _1547_lhsGen; + bool _1548_needsIIFE; + Dafny.ISet> _1549_recIdents; + DCOMP._IEnvironment _1550_resEnv; RAST._IExpr _out138; bool _out139; Dafny.ISet> _out140; DCOMP._IEnvironment _out141; - (this).GenAssignLhs(_1534_lhs, _1536_exprGen, selfIdent, env, out _out138, out _out139, out _out140, out _out141); - _1543_lhsGen = _out138; - _1544_needsIIFE = _out139; - _1545_recIdents = _out140; - _1546_resEnv = _out141; - generated = _1543_lhsGen; - newEnv = _1546_resEnv; - if (_1544_needsIIFE) { + (this).GenAssignLhs(_1538_lhs, _1540_exprGen, selfIdent, env, out _out138, out _out139, out _out140, out _out141); + _1547_lhsGen = _out138; + _1548_needsIIFE = _out139; + _1549_recIdents = _out140; + _1550_resEnv = _out141; + generated = _1547_lhsGen; + newEnv = _1550_resEnv; + if (_1548_needsIIFE) { generated = RAST.Expr.create_Block(generated); } - readIdents = Dafny.Set>.Union(_1545_recIdents, _1538_exprIdents); + readIdents = Dafny.Set>.Union(_1549_recIdents, _1542_exprIdents); } goto after_match21; } } { if (_source74.is_If) { - DAST._IExpression _1547_cond = _source74.dtor_cond; - Dafny.ISequence _1548_thnDafny = _source74.dtor_thn; - Dafny.ISequence _1549_elsDafny = _source74.dtor_els; + DAST._IExpression _1551_cond = _source74.dtor_cond; + Dafny.ISequence _1552_thnDafny = _source74.dtor_thn; + Dafny.ISequence _1553_elsDafny = _source74.dtor_els; { - RAST._IExpr _1550_cond; - DCOMP._IOwnership _1551___v83; - Dafny.ISet> _1552_recIdents; + RAST._IExpr _1554_cond; + DCOMP._IOwnership _1555___v83; + Dafny.ISet> _1556_recIdents; RAST._IExpr _out142; DCOMP._IOwnership _out143; Dafny.ISet> _out144; - (this).GenExpr(_1547_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out142, out _out143, out _out144); - _1550_cond = _out142; - _1551___v83 = _out143; - _1552_recIdents = _out144; - Dafny.ISequence _1553_condString; - _1553_condString = (_1550_cond)._ToString(DCOMP.__default.IND); - readIdents = _1552_recIdents; - RAST._IExpr _1554_thn; - Dafny.ISet> _1555_thnIdents; - DCOMP._IEnvironment _1556_thnEnv; + (this).GenExpr(_1551_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out142, out _out143, out _out144); + _1554_cond = _out142; + _1555___v83 = _out143; + _1556_recIdents = _out144; + Dafny.ISequence _1557_condString; + _1557_condString = (_1554_cond)._ToString(DCOMP.__default.IND); + readIdents = _1556_recIdents; + RAST._IExpr _1558_thn; + Dafny.ISet> _1559_thnIdents; + DCOMP._IEnvironment _1560_thnEnv; RAST._IExpr _out145; Dafny.ISet> _out146; DCOMP._IEnvironment _out147; - (this).GenStmts(_1548_thnDafny, selfIdent, env, isLast, earlyReturn, out _out145, out _out146, out _out147); - _1554_thn = _out145; - _1555_thnIdents = _out146; - _1556_thnEnv = _out147; - readIdents = Dafny.Set>.Union(readIdents, _1555_thnIdents); - RAST._IExpr _1557_els; - Dafny.ISet> _1558_elsIdents; - DCOMP._IEnvironment _1559_elsEnv; + (this).GenStmts(_1552_thnDafny, selfIdent, env, isLast, earlyReturn, out _out145, out _out146, out _out147); + _1558_thn = _out145; + _1559_thnIdents = _out146; + _1560_thnEnv = _out147; + readIdents = Dafny.Set>.Union(readIdents, _1559_thnIdents); + RAST._IExpr _1561_els; + Dafny.ISet> _1562_elsIdents; + DCOMP._IEnvironment _1563_elsEnv; RAST._IExpr _out148; Dafny.ISet> _out149; DCOMP._IEnvironment _out150; - (this).GenStmts(_1549_elsDafny, selfIdent, env, isLast, earlyReturn, out _out148, out _out149, out _out150); - _1557_els = _out148; - _1558_elsIdents = _out149; - _1559_elsEnv = _out150; - readIdents = Dafny.Set>.Union(readIdents, _1558_elsIdents); + (this).GenStmts(_1553_elsDafny, selfIdent, env, isLast, earlyReturn, out _out148, out _out149, out _out150); + _1561_els = _out148; + _1562_elsIdents = _out149; + _1563_elsEnv = _out150; + readIdents = Dafny.Set>.Union(readIdents, _1562_elsIdents); newEnv = env; - generated = RAST.Expr.create_IfExpr(_1550_cond, _1554_thn, _1557_els); + generated = RAST.Expr.create_IfExpr(_1554_cond, _1558_thn, _1561_els); } goto after_match21; } } { if (_source74.is_Labeled) { - Dafny.ISequence _1560_lbl = _source74.dtor_lbl; - Dafny.ISequence _1561_body = _source74.dtor_body; + Dafny.ISequence _1564_lbl = _source74.dtor_lbl; + Dafny.ISequence _1565_body = _source74.dtor_body; { - RAST._IExpr _1562_body; - Dafny.ISet> _1563_bodyIdents; - DCOMP._IEnvironment _1564_env2; + RAST._IExpr _1566_body; + Dafny.ISet> _1567_bodyIdents; + DCOMP._IEnvironment _1568_env2; RAST._IExpr _out151; Dafny.ISet> _out152; DCOMP._IEnvironment _out153; - (this).GenStmts(_1561_body, selfIdent, env, isLast, earlyReturn, out _out151, out _out152, out _out153); - _1562_body = _out151; - _1563_bodyIdents = _out152; - _1564_env2 = _out153; - readIdents = _1563_bodyIdents; - generated = RAST.Expr.create_Labelled(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("label_"), _1560_lbl), RAST.Expr.create_Loop(Std.Wrappers.Option.create_None(), RAST.Expr.create_StmtExpr(_1562_body, RAST.Expr.create_Break(Std.Wrappers.Option>.create_None())))); + (this).GenStmts(_1565_body, selfIdent, env, isLast, earlyReturn, out _out151, out _out152, out _out153); + _1566_body = _out151; + _1567_bodyIdents = _out152; + _1568_env2 = _out153; + readIdents = _1567_bodyIdents; + generated = RAST.Expr.create_Labelled(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("label_"), _1564_lbl), RAST.Expr.create_Loop(Std.Wrappers.Option.create_None(), RAST.Expr.create_StmtExpr(_1566_body, RAST.Expr.create_Break(Std.Wrappers.Option>.create_None())))); newEnv = env; } goto after_match21; @@ -2852,91 +2873,91 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_While) { - DAST._IExpression _1565_cond = _source74.dtor_cond; - Dafny.ISequence _1566_body = _source74.dtor_body; + DAST._IExpression _1569_cond = _source74.dtor_cond; + Dafny.ISequence _1570_body = _source74.dtor_body; { - RAST._IExpr _1567_cond; - DCOMP._IOwnership _1568___v84; - Dafny.ISet> _1569_recIdents; + RAST._IExpr _1571_cond; + DCOMP._IOwnership _1572___v84; + Dafny.ISet> _1573_recIdents; RAST._IExpr _out154; DCOMP._IOwnership _out155; Dafny.ISet> _out156; - (this).GenExpr(_1565_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out154, out _out155, out _out156); - _1567_cond = _out154; - _1568___v84 = _out155; - _1569_recIdents = _out156; - readIdents = _1569_recIdents; - RAST._IExpr _1570_bodyExpr; - Dafny.ISet> _1571_bodyIdents; - DCOMP._IEnvironment _1572_bodyEnv; + (this).GenExpr(_1569_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out154, out _out155, out _out156); + _1571_cond = _out154; + _1572___v84 = _out155; + _1573_recIdents = _out156; + readIdents = _1573_recIdents; + RAST._IExpr _1574_bodyExpr; + Dafny.ISet> _1575_bodyIdents; + DCOMP._IEnvironment _1576_bodyEnv; RAST._IExpr _out157; Dafny.ISet> _out158; DCOMP._IEnvironment _out159; - (this).GenStmts(_1566_body, selfIdent, env, false, earlyReturn, out _out157, out _out158, out _out159); - _1570_bodyExpr = _out157; - _1571_bodyIdents = _out158; - _1572_bodyEnv = _out159; + (this).GenStmts(_1570_body, selfIdent, env, false, earlyReturn, out _out157, out _out158, out _out159); + _1574_bodyExpr = _out157; + _1575_bodyIdents = _out158; + _1576_bodyEnv = _out159; newEnv = env; - readIdents = Dafny.Set>.Union(readIdents, _1571_bodyIdents); - generated = RAST.Expr.create_Loop(Std.Wrappers.Option.create_Some(_1567_cond), _1570_bodyExpr); + readIdents = Dafny.Set>.Union(readIdents, _1575_bodyIdents); + generated = RAST.Expr.create_Loop(Std.Wrappers.Option.create_Some(_1571_cond), _1574_bodyExpr); } goto after_match21; } } { if (_source74.is_Foreach) { - Dafny.ISequence _1573_boundName = _source74.dtor_boundName; - DAST._IType _1574_boundType = _source74.dtor_boundType; - DAST._IExpression _1575_overExpr = _source74.dtor_over; - Dafny.ISequence _1576_body = _source74.dtor_body; + Dafny.ISequence _1577_boundName = _source74.dtor_boundName; + DAST._IType _1578_boundType = _source74.dtor_boundType; + DAST._IExpression _1579_overExpr = _source74.dtor_over; + Dafny.ISequence _1580_body = _source74.dtor_body; { - RAST._IExpr _1577_over; - DCOMP._IOwnership _1578___v85; - Dafny.ISet> _1579_recIdents; + RAST._IExpr _1581_over; + DCOMP._IOwnership _1582___v85; + Dafny.ISet> _1583_recIdents; RAST._IExpr _out160; DCOMP._IOwnership _out161; Dafny.ISet> _out162; - (this).GenExpr(_1575_overExpr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out160, out _out161, out _out162); - _1577_over = _out160; - _1578___v85 = _out161; - _1579_recIdents = _out162; - if (((_1575_overExpr).is_MapBoundedPool) || ((_1575_overExpr).is_SetBoundedPool)) { - _1577_over = ((_1577_over).Sel(Dafny.Sequence.UnicodeFromString("cloned"))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(_1579_overExpr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out160, out _out161, out _out162); + _1581_over = _out160; + _1582___v85 = _out161; + _1583_recIdents = _out162; + if (((_1579_overExpr).is_MapBoundedPool) || ((_1579_overExpr).is_SetBoundedPool)) { + _1581_over = ((_1581_over).Sel(Dafny.Sequence.UnicodeFromString("cloned"))).Apply(Dafny.Sequence.FromElements()); } - RAST._IType _1580_boundTpe; + RAST._IType _1584_boundTpe; RAST._IType _out163; - _out163 = (this).GenType(_1574_boundType, DCOMP.GenTypeContext.@default()); - _1580_boundTpe = _out163; - readIdents = _1579_recIdents; - Dafny.ISequence _1581_boundRName; - _1581_boundRName = DCOMP.__default.escapeName(_1573_boundName); - RAST._IExpr _1582_bodyExpr; - Dafny.ISet> _1583_bodyIdents; - DCOMP._IEnvironment _1584_bodyEnv; + _out163 = (this).GenType(_1578_boundType, DCOMP.GenTypeContext.@default()); + _1584_boundTpe = _out163; + readIdents = _1583_recIdents; + Dafny.ISequence _1585_boundRName; + _1585_boundRName = DCOMP.__default.escapeName(_1577_boundName); + RAST._IExpr _1586_bodyExpr; + Dafny.ISet> _1587_bodyIdents; + DCOMP._IEnvironment _1588_bodyEnv; RAST._IExpr _out164; Dafny.ISet> _out165; DCOMP._IEnvironment _out166; - (this).GenStmts(_1576_body, selfIdent, (env).AddAssigned(_1581_boundRName, _1580_boundTpe), false, earlyReturn, out _out164, out _out165, out _out166); - _1582_bodyExpr = _out164; - _1583_bodyIdents = _out165; - _1584_bodyEnv = _out166; - readIdents = Dafny.Set>.Difference(Dafny.Set>.Union(readIdents, _1583_bodyIdents), Dafny.Set>.FromElements(_1581_boundRName)); + (this).GenStmts(_1580_body, selfIdent, (env).AddAssigned(_1585_boundRName, _1584_boundTpe), false, earlyReturn, out _out164, out _out165, out _out166); + _1586_bodyExpr = _out164; + _1587_bodyIdents = _out165; + _1588_bodyEnv = _out166; + readIdents = Dafny.Set>.Difference(Dafny.Set>.Union(readIdents, _1587_bodyIdents), Dafny.Set>.FromElements(_1585_boundRName)); newEnv = env; - generated = RAST.Expr.create_For(_1581_boundRName, _1577_over, _1582_bodyExpr); + generated = RAST.Expr.create_For(_1585_boundRName, _1581_over, _1586_bodyExpr); } goto after_match21; } } { if (_source74.is_Break) { - Std.Wrappers._IOption> _1585_toLabel = _source74.dtor_toLabel; + Std.Wrappers._IOption> _1589_toLabel = _source74.dtor_toLabel; { - Std.Wrappers._IOption> _source75 = _1585_toLabel; + Std.Wrappers._IOption> _source75 = _1589_toLabel; { if (_source75.is_Some) { - Dafny.ISequence _1586_lbl = _source75.dtor_value; + Dafny.ISequence _1590_lbl = _source75.dtor_value; { - generated = RAST.Expr.create_Break(Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("label_"), _1586_lbl))); + generated = RAST.Expr.create_Break(Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("label_"), _1590_lbl))); } goto after_match22; } @@ -2955,56 +2976,56 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_TailRecursive) { - Dafny.ISequence _1587_body = _source74.dtor_body; + Dafny.ISequence _1591_body = _source74.dtor_body; { generated = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); if (!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) { - RAST._IExpr _1588_selfClone; - DCOMP._IOwnership _1589___v86; - Dafny.ISet> _1590___v87; + RAST._IExpr _1592_selfClone; + DCOMP._IOwnership _1593___v86; + Dafny.ISet> _1594___v87; RAST._IExpr _out167; DCOMP._IOwnership _out168; Dafny.ISet> _out169; (this).GenIdent((selfIdent).dtor_rSelfName, selfIdent, DCOMP.Environment.Empty(), DCOMP.Ownership.create_OwnershipOwned(), out _out167, out _out168, out _out169); - _1588_selfClone = _out167; - _1589___v86 = _out168; - _1590___v87 = _out169; - generated = (generated).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), Dafny.Sequence.UnicodeFromString("_this"), Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_1588_selfClone))); + _1592_selfClone = _out167; + _1593___v86 = _out168; + _1594___v87 = _out169; + generated = (generated).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), Dafny.Sequence.UnicodeFromString("_this"), Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_1592_selfClone))); } newEnv = env; BigInteger _hi34 = new BigInteger(((env).dtor_names).Count); - for (BigInteger _1591_paramI = BigInteger.Zero; _1591_paramI < _hi34; _1591_paramI++) { - Dafny.ISequence _1592_param; - _1592_param = ((env).dtor_names).Select(_1591_paramI); - RAST._IExpr _1593_paramInit; - DCOMP._IOwnership _1594___v88; - Dafny.ISet> _1595___v89; + for (BigInteger _1595_paramI = BigInteger.Zero; _1595_paramI < _hi34; _1595_paramI++) { + Dafny.ISequence _1596_param; + _1596_param = ((env).dtor_names).Select(_1595_paramI); + RAST._IExpr _1597_paramInit; + DCOMP._IOwnership _1598___v88; + Dafny.ISet> _1599___v89; RAST._IExpr _out170; DCOMP._IOwnership _out171; Dafny.ISet> _out172; - (this).GenIdent(_1592_param, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out170, out _out171, out _out172); - _1593_paramInit = _out170; - _1594___v88 = _out171; - _1595___v89 = _out172; - generated = (generated).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1592_param, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_1593_paramInit))); - if (((env).dtor_types).Contains(_1592_param)) { - RAST._IType _1596_declaredType; - _1596_declaredType = (Dafny.Map, RAST._IType>.Select((env).dtor_types,_1592_param)).ToOwned(); - newEnv = (newEnv).AddAssigned(_1592_param, _1596_declaredType); + (this).GenIdent(_1596_param, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out170, out _out171, out _out172); + _1597_paramInit = _out170; + _1598___v88 = _out171; + _1599___v89 = _out172; + generated = (generated).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _1596_param, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_1597_paramInit))); + if (((env).dtor_types).Contains(_1596_param)) { + RAST._IType _1600_declaredType; + _1600_declaredType = (Dafny.Map, RAST._IType>.Select((env).dtor_types,_1596_param)).ToOwned(); + newEnv = (newEnv).AddAssigned(_1596_param, _1600_declaredType); } } - RAST._IExpr _1597_bodyExpr; - Dafny.ISet> _1598_bodyIdents; - DCOMP._IEnvironment _1599_bodyEnv; + RAST._IExpr _1601_bodyExpr; + Dafny.ISet> _1602_bodyIdents; + DCOMP._IEnvironment _1603_bodyEnv; RAST._IExpr _out173; Dafny.ISet> _out174; DCOMP._IEnvironment _out175; - (this).GenStmts(_1587_body, ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) ? (DCOMP.SelfInfo.create_ThisTyped(Dafny.Sequence.UnicodeFromString("_this"), (selfIdent).dtor_dafnyType)) : (DCOMP.SelfInfo.create_NoSelf())), newEnv, false, earlyReturn, out _out173, out _out174, out _out175); - _1597_bodyExpr = _out173; - _1598_bodyIdents = _out174; - _1599_bodyEnv = _out175; - readIdents = _1598_bodyIdents; - generated = (generated).Then(RAST.Expr.create_Labelled(Dafny.Sequence.UnicodeFromString("TAIL_CALL_START"), RAST.Expr.create_Loop(Std.Wrappers.Option.create_None(), _1597_bodyExpr))); + (this).GenStmts(_1591_body, ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) ? (DCOMP.SelfInfo.create_ThisTyped(Dafny.Sequence.UnicodeFromString("_this"), (selfIdent).dtor_dafnyType)) : (DCOMP.SelfInfo.create_NoSelf())), newEnv, false, earlyReturn, out _out173, out _out174, out _out175); + _1601_bodyExpr = _out173; + _1602_bodyIdents = _out174; + _1603_bodyEnv = _out175; + readIdents = _1602_bodyIdents; + generated = (generated).Then(RAST.Expr.create_Labelled(Dafny.Sequence.UnicodeFromString("TAIL_CALL_START"), RAST.Expr.create_Loop(Std.Wrappers.Option.create_None(), _1601_bodyExpr))); } goto after_match21; } @@ -3021,86 +3042,86 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_Call) { - DAST._IExpression _1600_on = _source74.dtor_on; - DAST._ICallName _1601_name = _source74.dtor_callName; - Dafny.ISequence _1602_typeArgs = _source74.dtor_typeArgs; - Dafny.ISequence _1603_args = _source74.dtor_args; - Std.Wrappers._IOption>> _1604_maybeOutVars = _source74.dtor_outs; + DAST._IExpression _1604_on = _source74.dtor_on; + DAST._ICallName _1605_name = _source74.dtor_callName; + Dafny.ISequence _1606_typeArgs = _source74.dtor_typeArgs; + Dafny.ISequence _1607_args = _source74.dtor_args; + Std.Wrappers._IOption>> _1608_maybeOutVars = _source74.dtor_outs; { - Dafny.ISequence _1605_argExprs; - Dafny.ISet> _1606_recIdents; - Dafny.ISequence _1607_typeExprs; - Std.Wrappers._IOption _1608_fullNameQualifier; + Dafny.ISequence _1609_argExprs; + Dafny.ISet> _1610_recIdents; + Dafny.ISequence _1611_typeExprs; + Std.Wrappers._IOption _1612_fullNameQualifier; Dafny.ISequence _out176; Dafny.ISet> _out177; Dafny.ISequence _out178; Std.Wrappers._IOption _out179; - (this).GenArgs(selfIdent, _1601_name, _1602_typeArgs, _1603_args, env, out _out176, out _out177, out _out178, out _out179); - _1605_argExprs = _out176; - _1606_recIdents = _out177; - _1607_typeExprs = _out178; - _1608_fullNameQualifier = _out179; - readIdents = _1606_recIdents; - Std.Wrappers._IOption _source76 = _1608_fullNameQualifier; + (this).GenArgs(selfIdent, _1605_name, _1606_typeArgs, _1607_args, env, out _out176, out _out177, out _out178, out _out179); + _1609_argExprs = _out176; + _1610_recIdents = _out177; + _1611_typeExprs = _out178; + _1612_fullNameQualifier = _out179; + readIdents = _1610_recIdents; + Std.Wrappers._IOption _source76 = _1612_fullNameQualifier; { if (_source76.is_Some) { DAST._IResolvedType value9 = _source76.dtor_value; - Dafny.ISequence> _1609_path = value9.dtor_path; - Dafny.ISequence _1610_onTypeArgs = value9.dtor_typeArgs; - DAST._IResolvedTypeBase _1611_base = value9.dtor_kind; - RAST._IExpr _1612_fullPath; + Dafny.ISequence> _1613_path = value9.dtor_path; + Dafny.ISequence _1614_onTypeArgs = value9.dtor_typeArgs; + DAST._IResolvedTypeBase _1615_base = value9.dtor_kind; + RAST._IExpr _1616_fullPath; RAST._IExpr _out180; - _out180 = DCOMP.COMP.GenPathExpr(_1609_path); - _1612_fullPath = _out180; - Dafny.ISequence _1613_onTypeExprs; + _out180 = DCOMP.COMP.GenPathExpr(_1613_path); + _1616_fullPath = _out180; + Dafny.ISequence _1617_onTypeExprs; Dafny.ISequence _out181; - _out181 = (this).GenTypeArgs(_1610_onTypeArgs, DCOMP.GenTypeContext.@default()); - _1613_onTypeExprs = _out181; - RAST._IExpr _1614_onExpr = RAST.Expr.Default(); - DCOMP._IOwnership _1615_recOwnership = DCOMP.Ownership.Default(); - Dafny.ISet> _1616_recIdents = Dafny.Set>.Empty; - if (((_1611_base).is_Trait) || ((_1611_base).is_Class)) { + _out181 = (this).GenTypeArgs(_1614_onTypeArgs, DCOMP.GenTypeContext.@default()); + _1617_onTypeExprs = _out181; + RAST._IExpr _1618_onExpr = RAST.Expr.Default(); + DCOMP._IOwnership _1619_recOwnership = DCOMP.Ownership.Default(); + Dafny.ISet> _1620_recIdents = Dafny.Set>.Empty; + if (((_1615_base).is_Trait) || ((_1615_base).is_Class)) { RAST._IExpr _out182; DCOMP._IOwnership _out183; Dafny.ISet> _out184; - (this).GenExpr(_1600_on, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out182, out _out183, out _out184); - _1614_onExpr = _out182; - _1615_recOwnership = _out183; - _1616_recIdents = _out184; - _1614_onExpr = ((this).modify__macro).Apply1(_1614_onExpr); - readIdents = Dafny.Set>.Union(readIdents, _1616_recIdents); + (this).GenExpr(_1604_on, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out182, out _out183, out _out184); + _1618_onExpr = _out182; + _1619_recOwnership = _out183; + _1620_recIdents = _out184; + _1618_onExpr = ((this).modify__macro).Apply1(_1618_onExpr); + readIdents = Dafny.Set>.Union(readIdents, _1620_recIdents); } else { RAST._IExpr _out185; DCOMP._IOwnership _out186; Dafny.ISet> _out187; - (this).GenExpr(_1600_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowedMut(), out _out185, out _out186, out _out187); - _1614_onExpr = _out185; - _1615_recOwnership = _out186; - _1616_recIdents = _out187; - readIdents = Dafny.Set>.Union(readIdents, _1616_recIdents); + (this).GenExpr(_1604_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowedMut(), out _out185, out _out186, out _out187); + _1618_onExpr = _out185; + _1619_recOwnership = _out186; + _1620_recIdents = _out187; + readIdents = Dafny.Set>.Union(readIdents, _1620_recIdents); } - generated = ((((_1612_fullPath).ApplyType(_1613_onTypeExprs)).MSel(DCOMP.__default.escapeName((_1601_name).dtor_name))).ApplyType(_1607_typeExprs)).Apply(Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_1614_onExpr), _1605_argExprs)); + generated = ((((_1616_fullPath).ApplyType(_1617_onTypeExprs)).MSel(DCOMP.__default.escapeName((_1605_name).dtor_name))).ApplyType(_1611_typeExprs)).Apply(Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_1618_onExpr), _1609_argExprs)); goto after_match23; } } { - RAST._IExpr _1617_onExpr; - DCOMP._IOwnership _1618___v94; - Dafny.ISet> _1619_enclosingIdents; + RAST._IExpr _1621_onExpr; + DCOMP._IOwnership _1622___v94; + Dafny.ISet> _1623_enclosingIdents; RAST._IExpr _out188; DCOMP._IOwnership _out189; Dafny.ISet> _out190; - (this).GenExpr(_1600_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out188, out _out189, out _out190); - _1617_onExpr = _out188; - _1618___v94 = _out189; - _1619_enclosingIdents = _out190; - readIdents = Dafny.Set>.Union(readIdents, _1619_enclosingIdents); - Dafny.ISequence _1620_renderedName; - DAST._ICallName _source77 = _1601_name; + (this).GenExpr(_1604_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out188, out _out189, out _out190); + _1621_onExpr = _out188; + _1622___v94 = _out189; + _1623_enclosingIdents = _out190; + readIdents = Dafny.Set>.Union(readIdents, _1623_enclosingIdents); + Dafny.ISequence _1624_renderedName; + DAST._ICallName _source77 = _1605_name; { if (_source77.is_CallName) { - Dafny.ISequence _1621_name = _source77.dtor_name; - _1620_renderedName = DCOMP.__default.escapeName(_1621_name); + Dafny.ISequence _1625_name = _source77.dtor_name; + _1624_renderedName = DCOMP.__default.escapeName(_1625_name); goto after_match24; } } @@ -3113,38 +3134,38 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE disjunctiveMatch11 = true; } if (disjunctiveMatch11) { - _1620_renderedName = Dafny.Sequence.UnicodeFromString("add"); + _1624_renderedName = Dafny.Sequence.UnicodeFromString("add"); goto after_match24; } } { - _1620_renderedName = Dafny.Sequence.UnicodeFromString("build"); + _1624_renderedName = Dafny.Sequence.UnicodeFromString("build"); } after_match24: ; - DAST._IExpression _source78 = _1600_on; + DAST._IExpression _source78 = _1604_on; { if (_source78.is_Companion) { { - _1617_onExpr = (_1617_onExpr).MSel(_1620_renderedName); + _1621_onExpr = (_1621_onExpr).MSel(_1624_renderedName); } goto after_match25; } } { { - if (!object.Equals(_1617_onExpr, RAST.__default.self)) { - DAST._ICallName _source79 = _1601_name; + if (!object.Equals(_1621_onExpr, RAST.__default.self)) { + DAST._ICallName _source79 = _1605_name; { if (_source79.is_CallName) { Std.Wrappers._IOption onType0 = _source79.dtor_onType; if (onType0.is_Some) { - DAST._IType _1622_tpe = onType0.dtor_value; - RAST._IType _1623_typ; + DAST._IType _1626_tpe = onType0.dtor_value; + RAST._IType _1627_typ; RAST._IType _out191; - _out191 = (this).GenType(_1622_tpe, DCOMP.GenTypeContext.@default()); - _1623_typ = _out191; - if (((_1623_typ).IsObjectOrPointer()) && (!object.Equals(_1617_onExpr, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("self"))))) { - _1617_onExpr = ((this).modify__macro).Apply1(_1617_onExpr); + _out191 = (this).GenType(_1626_tpe, DCOMP.GenTypeContext.@default()); + _1627_typ = _out191; + if (((_1627_typ).IsObjectOrPointer()) && (!object.Equals(_1621_onExpr, RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("self"))))) { + _1621_onExpr = ((this).modify__macro).Apply1(_1621_onExpr); } goto after_match26; } @@ -3154,39 +3175,39 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } after_match26: ; } - _1617_onExpr = (_1617_onExpr).Sel(_1620_renderedName); + _1621_onExpr = (_1621_onExpr).Sel(_1624_renderedName); } } after_match25: ; - generated = ((_1617_onExpr).ApplyType(_1607_typeExprs)).Apply(_1605_argExprs); + generated = ((_1621_onExpr).ApplyType(_1611_typeExprs)).Apply(_1609_argExprs); } after_match23: ; - if (((_1604_maybeOutVars).is_Some) && ((new BigInteger(((_1604_maybeOutVars).dtor_value).Count)) == (BigInteger.One))) { - Dafny.ISequence _1624_outVar; - _1624_outVar = DCOMP.__default.escapeName((((_1604_maybeOutVars).dtor_value).Select(BigInteger.Zero))); - if (!((env).CanReadWithoutClone(_1624_outVar))) { + if (((_1608_maybeOutVars).is_Some) && ((new BigInteger(((_1608_maybeOutVars).dtor_value).Count)) == (BigInteger.One))) { + Dafny.ISequence _1628_outVar; + _1628_outVar = DCOMP.__default.escapeName((((_1608_maybeOutVars).dtor_value).Select(BigInteger.Zero))); + if (!((env).CanReadWithoutClone(_1628_outVar))) { generated = RAST.__default.MaybePlacebo(generated); } - generated = RAST.__default.AssignVar(_1624_outVar, generated); - } else if (((_1604_maybeOutVars).is_None) || ((new BigInteger(((_1604_maybeOutVars).dtor_value).Count)).Sign == 0)) { + generated = RAST.__default.AssignVar(_1628_outVar, generated); + } else if (((_1608_maybeOutVars).is_None) || ((new BigInteger(((_1608_maybeOutVars).dtor_value).Count)).Sign == 0)) { } else { - Dafny.ISequence _1625_tmpVar; - _1625_tmpVar = Dafny.Sequence.UnicodeFromString("_x"); - RAST._IExpr _1626_tmpId; - _1626_tmpId = RAST.Expr.create_Identifier(_1625_tmpVar); - generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), _1625_tmpVar, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(generated)); - Dafny.ISequence> _1627_outVars; - _1627_outVars = (_1604_maybeOutVars).dtor_value; - BigInteger _hi35 = new BigInteger((_1627_outVars).Count); - for (BigInteger _1628_outI = BigInteger.Zero; _1628_outI < _hi35; _1628_outI++) { - Dafny.ISequence _1629_outVar; - _1629_outVar = DCOMP.__default.escapeName(((_1627_outVars).Select(_1628_outI))); - RAST._IExpr _1630_rhs; - _1630_rhs = (_1626_tmpId).Sel(Std.Strings.__default.OfNat(_1628_outI)); - if (!((env).CanReadWithoutClone(_1629_outVar))) { - _1630_rhs = RAST.__default.MaybePlacebo(_1630_rhs); + Dafny.ISequence _1629_tmpVar; + _1629_tmpVar = Dafny.Sequence.UnicodeFromString("_x"); + RAST._IExpr _1630_tmpId; + _1630_tmpId = RAST.Expr.create_Identifier(_1629_tmpVar); + generated = RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), _1629_tmpVar, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(generated)); + Dafny.ISequence> _1631_outVars; + _1631_outVars = (_1608_maybeOutVars).dtor_value; + BigInteger _hi35 = new BigInteger((_1631_outVars).Count); + for (BigInteger _1632_outI = BigInteger.Zero; _1632_outI < _hi35; _1632_outI++) { + Dafny.ISequence _1633_outVar; + _1633_outVar = DCOMP.__default.escapeName(((_1631_outVars).Select(_1632_outI))); + RAST._IExpr _1634_rhs; + _1634_rhs = (_1630_tmpId).Sel(Std.Strings.__default.OfNat(_1632_outI)); + if (!((env).CanReadWithoutClone(_1633_outVar))) { + _1634_rhs = RAST.__default.MaybePlacebo(_1634_rhs); } - generated = (generated).Then(RAST.__default.AssignVar(_1629_outVar, _1630_rhs)); + generated = (generated).Then(RAST.__default.AssignVar(_1633_outVar, _1634_rhs)); } } newEnv = env; @@ -3196,23 +3217,23 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } { if (_source74.is_Return) { - DAST._IExpression _1631_exprDafny = _source74.dtor_expr; + DAST._IExpression _1635_exprDafny = _source74.dtor_expr; { - RAST._IExpr _1632_expr; - DCOMP._IOwnership _1633___v105; - Dafny.ISet> _1634_recIdents; + RAST._IExpr _1636_expr; + DCOMP._IOwnership _1637___v105; + Dafny.ISet> _1638_recIdents; RAST._IExpr _out192; DCOMP._IOwnership _out193; Dafny.ISet> _out194; - (this).GenExpr(_1631_exprDafny, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out192, out _out193, out _out194); - _1632_expr = _out192; - _1633___v105 = _out193; - _1634_recIdents = _out194; - readIdents = _1634_recIdents; + (this).GenExpr(_1635_exprDafny, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out192, out _out193, out _out194); + _1636_expr = _out192; + _1637___v105 = _out193; + _1638_recIdents = _out194; + readIdents = _1638_recIdents; if (isLast) { - generated = _1632_expr; + generated = _1636_expr; } else { - generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some(_1632_expr)); + generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some(_1636_expr)); } newEnv = env; } @@ -3230,27 +3251,27 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } } { - Dafny.ISequence> _1635_rustIdents = _source80.dtor_value; - Dafny.ISequence _1636_tupleArgs; - _1636_tupleArgs = Dafny.Sequence.FromElements(); - BigInteger _hi36 = new BigInteger((_1635_rustIdents).Count); - for (BigInteger _1637_i = BigInteger.Zero; _1637_i < _hi36; _1637_i++) { - RAST._IExpr _1638_rIdent; - DCOMP._IOwnership _1639___v106; - Dafny.ISet> _1640___v107; + Dafny.ISequence> _1639_rustIdents = _source80.dtor_value; + Dafny.ISequence _1640_tupleArgs; + _1640_tupleArgs = Dafny.Sequence.FromElements(); + BigInteger _hi36 = new BigInteger((_1639_rustIdents).Count); + for (BigInteger _1641_i = BigInteger.Zero; _1641_i < _hi36; _1641_i++) { + RAST._IExpr _1642_rIdent; + DCOMP._IOwnership _1643___v106; + Dafny.ISet> _1644___v107; RAST._IExpr _out195; DCOMP._IOwnership _out196; Dafny.ISet> _out197; - (this).GenIdent((_1635_rustIdents).Select(_1637_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out195, out _out196, out _out197); - _1638_rIdent = _out195; - _1639___v106 = _out196; - _1640___v107 = _out197; - _1636_tupleArgs = Dafny.Sequence.Concat(_1636_tupleArgs, Dafny.Sequence.FromElements(_1638_rIdent)); + (this).GenIdent((_1639_rustIdents).Select(_1641_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out195, out _out196, out _out197); + _1642_rIdent = _out195; + _1643___v106 = _out196; + _1644___v107 = _out197; + _1640_tupleArgs = Dafny.Sequence.Concat(_1640_tupleArgs, Dafny.Sequence.FromElements(_1642_rIdent)); } - if ((new BigInteger((_1636_tupleArgs).Count)) == (BigInteger.One)) { - generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some((_1636_tupleArgs).Select(BigInteger.Zero))); + if ((new BigInteger((_1640_tupleArgs).Count)) == (BigInteger.One)) { + generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some((_1640_tupleArgs).Select(BigInteger.Zero))); } else { - generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some(RAST.Expr.create_Tuple(_1636_tupleArgs))); + generated = RAST.Expr.create_Return(Std.Wrappers.Option.create_Some(RAST.Expr.create_Tuple(_1640_tupleArgs))); } } after_match27: ; @@ -3271,20 +3292,20 @@ public void GenStmt(DAST._IStatement stmt, DCOMP._ISelfInfo selfIdent, DCOMP._IE } } { - DAST._IExpression _1641_e = _source74.dtor_Print_a0; + DAST._IExpression _1645_e = _source74.dtor_Print_a0; { - RAST._IExpr _1642_printedExpr; - DCOMP._IOwnership _1643_recOwnership; - Dafny.ISet> _1644_recIdents; + RAST._IExpr _1646_printedExpr; + DCOMP._IOwnership _1647_recOwnership; + Dafny.ISet> _1648_recIdents; RAST._IExpr _out198; DCOMP._IOwnership _out199; Dafny.ISet> _out200; - (this).GenExpr(_1641_e, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out198, out _out199, out _out200); - _1642_printedExpr = _out198; - _1643_recOwnership = _out199; - _1644_recIdents = _out200; - generated = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("print!"))).Apply(Dafny.Sequence.FromElements(RAST.Expr.create_LiteralString(Dafny.Sequence.UnicodeFromString("{}"), false, false), ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("DafnyPrintWrapper"))).Apply1(_1642_printedExpr))); - readIdents = _1644_recIdents; + (this).GenExpr(_1645_e, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out198, out _out199, out _out200); + _1646_printedExpr = _out198; + _1647_recOwnership = _out199; + _1648_recIdents = _out200; + generated = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("print!"))).Apply(Dafny.Sequence.FromElements(RAST.Expr.create_LiteralString(Dafny.Sequence.UnicodeFromString("{}"), false, false), ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("DafnyPrintWrapper"))).Apply1(_1646_printedExpr))); + readIdents = _1648_recIdents; newEnv = env; } } @@ -3426,11 +3447,11 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h170 = _source82.dtor_Literal_a0; if (_h170.is_BoolLiteral) { - bool _1645_b = _h170.dtor_BoolLiteral_a0; + bool _1649_b = _h170.dtor_BoolLiteral_a0; { RAST._IExpr _out205; DCOMP._IOwnership _out206; - (this).FromOwned(RAST.Expr.create_LiteralBool(_1645_b), expectedOwnership, out _out205, out _out206); + (this).FromOwned(RAST.Expr.create_LiteralBool(_1649_b), expectedOwnership, out _out205, out _out206); r = _out205; resultingOwnership = _out206; readIdents = Dafny.Set>.FromElements(); @@ -3444,19 +3465,19 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h171 = _source82.dtor_Literal_a0; if (_h171.is_IntLiteral) { - Dafny.ISequence _1646_i = _h171.dtor_IntLiteral_a0; - DAST._IType _1647_t = _h171.dtor_IntLiteral_a1; + Dafny.ISequence _1650_i = _h171.dtor_IntLiteral_a0; + DAST._IType _1651_t = _h171.dtor_IntLiteral_a1; { - DAST._IType _source83 = _1647_t; + DAST._IType _source83 = _1651_t; { if (_source83.is_Primitive) { DAST._IPrimitive _h70 = _source83.dtor_Primitive_a0; if (_h70.is_Int) { { - if ((new BigInteger((_1646_i).Count)) <= (new BigInteger(4))) { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(RAST.Expr.create_LiteralInt(_1646_i)); + if ((new BigInteger((_1650_i).Count)) <= (new BigInteger(4))) { + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(RAST.Expr.create_LiteralInt(_1650_i)); } else { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(RAST.Expr.create_LiteralString(_1646_i, true, false)); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(RAST.Expr.create_LiteralString(_1650_i, true, false)); } } goto after_match29; @@ -3464,13 +3485,13 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM } } { - DAST._IType _1648_o = _source83; + DAST._IType _1652_o = _source83; { - RAST._IType _1649_genType; + RAST._IType _1653_genType; RAST._IType _out207; - _out207 = (this).GenType(_1648_o, DCOMP.GenTypeContext.@default()); - _1649_genType = _out207; - r = RAST.Expr.create_TypeAscription(RAST.Expr.create_RawExpr(_1646_i), _1649_genType); + _out207 = (this).GenType(_1652_o, DCOMP.GenTypeContext.@default()); + _1653_genType = _out207; + r = RAST.Expr.create_TypeAscription(RAST.Expr.create_RawExpr(_1650_i), _1653_genType); } } after_match29: ; @@ -3490,30 +3511,30 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h172 = _source82.dtor_Literal_a0; if (_h172.is_DecLiteral) { - Dafny.ISequence _1650_n = _h172.dtor_DecLiteral_a0; - Dafny.ISequence _1651_d = _h172.dtor_DecLiteral_a1; - DAST._IType _1652_t = _h172.dtor_DecLiteral_a2; + Dafny.ISequence _1654_n = _h172.dtor_DecLiteral_a0; + Dafny.ISequence _1655_d = _h172.dtor_DecLiteral_a1; + DAST._IType _1656_t = _h172.dtor_DecLiteral_a2; { - DAST._IType _source84 = _1652_t; + DAST._IType _source84 = _1656_t; { if (_source84.is_Primitive) { DAST._IPrimitive _h71 = _source84.dtor_Primitive_a0; if (_h71.is_Real) { { - r = RAST.__default.RcNew(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::BigRational::new(::dafny_runtime::BigInt::parse_bytes(b\""), _1650_n), Dafny.Sequence.UnicodeFromString("\", 10).unwrap(), ::dafny_runtime::BigInt::parse_bytes(b\"")), _1651_d), Dafny.Sequence.UnicodeFromString("\", 10).unwrap())")))); + r = RAST.__default.RcNew(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::BigRational::new(::dafny_runtime::BigInt::parse_bytes(b\""), _1654_n), Dafny.Sequence.UnicodeFromString("\", 10).unwrap(), ::dafny_runtime::BigInt::parse_bytes(b\"")), _1655_d), Dafny.Sequence.UnicodeFromString("\", 10).unwrap())")))); } goto after_match30; } } } { - DAST._IType _1653_o = _source84; + DAST._IType _1657_o = _source84; { - RAST._IType _1654_genType; + RAST._IType _1658_genType; RAST._IType _out210; - _out210 = (this).GenType(_1653_o, DCOMP.GenTypeContext.@default()); - _1654_genType = _out210; - r = RAST.Expr.create_TypeAscription(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("("), _1650_n), Dafny.Sequence.UnicodeFromString(".0 / ")), _1651_d), Dafny.Sequence.UnicodeFromString(".0")), Dafny.Sequence.UnicodeFromString(")"))), _1654_genType); + _out210 = (this).GenType(_1657_o, DCOMP.GenTypeContext.@default()); + _1658_genType = _out210; + r = RAST.Expr.create_TypeAscription(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("("), _1654_n), Dafny.Sequence.UnicodeFromString(".0 / ")), _1655_d), Dafny.Sequence.UnicodeFromString(".0")), Dafny.Sequence.UnicodeFromString(")"))), _1658_genType); } } after_match30: ; @@ -3533,10 +3554,10 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h173 = _source82.dtor_Literal_a0; if (_h173.is_StringLiteral) { - Dafny.ISequence _1655_l = _h173.dtor_StringLiteral_a0; - bool _1656_verbatim = _h173.dtor_verbatim; + Dafny.ISequence _1659_l = _h173.dtor_StringLiteral_a0; + bool _1660_verbatim = _h173.dtor_verbatim; { - r = ((RAST.__default.dafny__runtime).MSel((this).string__of)).Apply1(RAST.Expr.create_LiteralString(_1655_l, false, _1656_verbatim)); + r = ((RAST.__default.dafny__runtime).MSel((this).string__of)).Apply1(RAST.Expr.create_LiteralString(_1659_l, false, _1660_verbatim)); RAST._IExpr _out213; DCOMP._IOwnership _out214; (this).FromOwned(r, expectedOwnership, out _out213, out _out214); @@ -3553,9 +3574,9 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h174 = _source82.dtor_Literal_a0; if (_h174.is_CharLiteralUTF16) { - BigInteger _1657_c = _h174.dtor_CharLiteralUTF16_a0; + BigInteger _1661_c = _h174.dtor_CharLiteralUTF16_a0; { - r = RAST.Expr.create_LiteralInt(Std.Strings.__default.OfNat(_1657_c)); + r = RAST.Expr.create_LiteralInt(Std.Strings.__default.OfNat(_1661_c)); r = RAST.Expr.create_TypeAscription(r, RAST.Type.create_U16()); r = ((RAST.__default.dafny__runtime).MSel((this).DafnyChar)).Apply1(r); RAST._IExpr _out215; @@ -3574,9 +3595,9 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM if (_source82.is_Literal) { DAST._ILiteral _h175 = _source82.dtor_Literal_a0; if (_h175.is_CharLiteral) { - Dafny.Rune _1658_c = _h175.dtor_CharLiteral_a0; + Dafny.Rune _1662_c = _h175.dtor_CharLiteral_a0; { - r = RAST.Expr.create_LiteralInt(Std.Strings.__default.OfNat(new BigInteger((_1658_c).Value))); + r = RAST.Expr.create_LiteralInt(Std.Strings.__default.OfNat(new BigInteger((_1662_c).Value))); if (!((this).UnicodeChars)) { r = RAST.Expr.create_TypeAscription(r, RAST.Type.create_U16()); } else { @@ -3597,16 +3618,16 @@ public void GenExprLiteral(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM } { DAST._ILiteral _h176 = _source82.dtor_Literal_a0; - DAST._IType _1659_tpe = _h176.dtor_Null_a0; + DAST._IType _1663_tpe = _h176.dtor_Null_a0; { - RAST._IType _1660_tpeGen; + RAST._IType _1664_tpeGen; RAST._IType _out219; - _out219 = (this).GenType(_1659_tpe, DCOMP.GenTypeContext.@default()); - _1660_tpeGen = _out219; + _out219 = (this).GenType(_1663_tpe, DCOMP.GenTypeContext.@default()); + _1664_tpeGen = _out219; if (((this).ObjectType).is_RawPointers) { r = ((RAST.__default.std).MSel(Dafny.Sequence.UnicodeFromString("ptr"))).MSel(Dafny.Sequence.UnicodeFromString("null")); } else { - r = RAST.Expr.create_TypeAscription(((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("Object"))).Apply1(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("None"))), _1660_tpeGen); + r = RAST.Expr.create_TypeAscription(((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("Object"))).Apply1(RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("None"))), _1664_tpeGen); } RAST._IExpr _out220; DCOMP._IOwnership _out221; @@ -3625,12 +3646,12 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; DAST._IExpression _let_tmp_rhs54 = e; - DAST._IBinOp _1661_op = _let_tmp_rhs54.dtor_op; - DAST._IExpression _1662_lExpr = _let_tmp_rhs54.dtor_left; - DAST._IExpression _1663_rExpr = _let_tmp_rhs54.dtor_right; - DAST.Format._IBinaryOpFormat _1664_format = _let_tmp_rhs54.dtor_format2; - bool _1665_becomesLeftCallsRight; - DAST._IBinOp _source85 = _1661_op; + DAST._IBinOp _1665_op = _let_tmp_rhs54.dtor_op; + DAST._IExpression _1666_lExpr = _let_tmp_rhs54.dtor_left; + DAST._IExpression _1667_rExpr = _let_tmp_rhs54.dtor_right; + DAST.Format._IBinaryOpFormat _1668_format = _let_tmp_rhs54.dtor_format2; + bool _1669_becomesLeftCallsRight; + DAST._IBinOp _source85 = _1665_op; { bool disjunctiveMatch12 = false; if (_source85.is_SetMerge) { @@ -3667,168 +3688,168 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP disjunctiveMatch12 = true; } if (disjunctiveMatch12) { - _1665_becomesLeftCallsRight = true; + _1669_becomesLeftCallsRight = true; goto after_match31; } } { - _1665_becomesLeftCallsRight = false; + _1669_becomesLeftCallsRight = false; } after_match31: ; - bool _1666_becomesRightCallsLeft; - DAST._IBinOp _source86 = _1661_op; + bool _1670_becomesRightCallsLeft; + DAST._IBinOp _source86 = _1665_op; { if (_source86.is_In) { - _1666_becomesRightCallsLeft = true; + _1670_becomesRightCallsLeft = true; goto after_match32; } } { - _1666_becomesRightCallsLeft = false; + _1670_becomesRightCallsLeft = false; } after_match32: ; - bool _1667_becomesCallLeftRight; - DAST._IBinOp _source87 = _1661_op; + bool _1671_becomesCallLeftRight; + DAST._IBinOp _source87 = _1665_op; { if (_source87.is_Eq) { bool referential0 = _source87.dtor_referential; if ((referential0) == (true)) { - _1667_becomesCallLeftRight = false; + _1671_becomesCallLeftRight = false; goto after_match33; } } } { if (_source87.is_SetMerge) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_SetSubtraction) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_SetIntersection) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_SetDisjoint) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MapMerge) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MapSubtraction) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MultisetMerge) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MultisetSubtraction) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MultisetIntersection) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_MultisetDisjoint) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { if (_source87.is_Concat) { - _1667_becomesCallLeftRight = true; + _1671_becomesCallLeftRight = true; goto after_match33; } } { - _1667_becomesCallLeftRight = false; + _1671_becomesCallLeftRight = false; } after_match33: ; - DCOMP._IOwnership _1668_expectedLeftOwnership; - if (_1665_becomesLeftCallsRight) { - _1668_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipAutoBorrowed(); - } else if ((_1666_becomesRightCallsLeft) || (_1667_becomesCallLeftRight)) { - _1668_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); + DCOMP._IOwnership _1672_expectedLeftOwnership; + if (_1669_becomesLeftCallsRight) { + _1672_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipAutoBorrowed(); + } else if ((_1670_becomesRightCallsLeft) || (_1671_becomesCallLeftRight)) { + _1672_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); } else { - _1668_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipOwned(); + _1672_expectedLeftOwnership = DCOMP.Ownership.create_OwnershipOwned(); } - DCOMP._IOwnership _1669_expectedRightOwnership; - if ((_1665_becomesLeftCallsRight) || (_1667_becomesCallLeftRight)) { - _1669_expectedRightOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); - } else if (_1666_becomesRightCallsLeft) { - _1669_expectedRightOwnership = DCOMP.Ownership.create_OwnershipAutoBorrowed(); + DCOMP._IOwnership _1673_expectedRightOwnership; + if ((_1669_becomesLeftCallsRight) || (_1671_becomesCallLeftRight)) { + _1673_expectedRightOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); + } else if (_1670_becomesRightCallsLeft) { + _1673_expectedRightOwnership = DCOMP.Ownership.create_OwnershipAutoBorrowed(); } else { - _1669_expectedRightOwnership = DCOMP.Ownership.create_OwnershipOwned(); + _1673_expectedRightOwnership = DCOMP.Ownership.create_OwnershipOwned(); } - RAST._IExpr _1670_left; - DCOMP._IOwnership _1671___v112; - Dafny.ISet> _1672_recIdentsL; + RAST._IExpr _1674_left; + DCOMP._IOwnership _1675___v112; + Dafny.ISet> _1676_recIdentsL; RAST._IExpr _out222; DCOMP._IOwnership _out223; Dafny.ISet> _out224; - (this).GenExpr(_1662_lExpr, selfIdent, env, _1668_expectedLeftOwnership, out _out222, out _out223, out _out224); - _1670_left = _out222; - _1671___v112 = _out223; - _1672_recIdentsL = _out224; - RAST._IExpr _1673_right; - DCOMP._IOwnership _1674___v113; - Dafny.ISet> _1675_recIdentsR; + (this).GenExpr(_1666_lExpr, selfIdent, env, _1672_expectedLeftOwnership, out _out222, out _out223, out _out224); + _1674_left = _out222; + _1675___v112 = _out223; + _1676_recIdentsL = _out224; + RAST._IExpr _1677_right; + DCOMP._IOwnership _1678___v113; + Dafny.ISet> _1679_recIdentsR; RAST._IExpr _out225; DCOMP._IOwnership _out226; Dafny.ISet> _out227; - (this).GenExpr(_1663_rExpr, selfIdent, env, _1669_expectedRightOwnership, out _out225, out _out226, out _out227); - _1673_right = _out225; - _1674___v113 = _out226; - _1675_recIdentsR = _out227; - DAST._IBinOp _source88 = _1661_op; + (this).GenExpr(_1667_rExpr, selfIdent, env, _1673_expectedRightOwnership, out _out225, out _out226, out _out227); + _1677_right = _out225; + _1678___v113 = _out226; + _1679_recIdentsR = _out227; + DAST._IBinOp _source88 = _1665_op; { if (_source88.is_In) { { - r = ((_1673_right).Sel(Dafny.Sequence.UnicodeFromString("contains"))).Apply1(_1670_left); + r = ((_1677_right).Sel(Dafny.Sequence.UnicodeFromString("contains"))).Apply1(_1674_left); } goto after_match34; } } { if (_source88.is_SeqProperPrefix) { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1674_left, _1677_right, _1668_format); goto after_match34; } } { if (_source88.is_SeqPrefix) { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1674_left, _1677_right, _1668_format); goto after_match34; } } { if (_source88.is_SetMerge) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1677_right); } goto after_match34; } @@ -3836,7 +3857,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_SetSubtraction) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1677_right); } goto after_match34; } @@ -3844,7 +3865,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_SetIntersection) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("intersect"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("intersect"))).Apply1(_1677_right); } goto after_match34; } @@ -3852,7 +3873,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_Subset) { { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1674_left, _1677_right, _1668_format); } goto after_match34; } @@ -3860,7 +3881,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_ProperSubset) { { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1674_left, _1677_right, _1668_format); } goto after_match34; } @@ -3868,7 +3889,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_SetDisjoint) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("disjoint"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("disjoint"))).Apply1(_1677_right); } goto after_match34; } @@ -3876,7 +3897,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MapMerge) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1677_right); } goto after_match34; } @@ -3884,7 +3905,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MapSubtraction) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1677_right); } goto after_match34; } @@ -3892,7 +3913,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MultisetMerge) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("merge"))).Apply1(_1677_right); } goto after_match34; } @@ -3900,7 +3921,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MultisetSubtraction) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("subtract"))).Apply1(_1677_right); } goto after_match34; } @@ -3908,7 +3929,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MultisetIntersection) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("intersect"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("intersect"))).Apply1(_1677_right); } goto after_match34; } @@ -3916,7 +3937,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_Submultiset) { { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<="), _1674_left, _1677_right, _1668_format); } goto after_match34; } @@ -3924,7 +3945,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_ProperSubmultiset) { { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("<"), _1674_left, _1677_right, _1668_format); } goto after_match34; } @@ -3932,7 +3953,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_MultisetDisjoint) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("disjoint"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("disjoint"))).Apply1(_1677_right); } goto after_match34; } @@ -3940,35 +3961,35 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source88.is_Concat) { { - r = ((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("concat"))).Apply1(_1673_right); + r = ((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("concat"))).Apply1(_1677_right); } goto after_match34; } } { { - if ((DCOMP.COMP.OpTable).Contains(_1661_op)) { - r = RAST.Expr.create_BinaryOp(Dafny.Map>.Select(DCOMP.COMP.OpTable,_1661_op), _1670_left, _1673_right, _1664_format); + if ((DCOMP.COMP.OpTable).Contains(_1665_op)) { + r = RAST.Expr.create_BinaryOp(Dafny.Map>.Select(DCOMP.COMP.OpTable,_1665_op), _1674_left, _1677_right, _1668_format); } else { - DAST._IBinOp _source89 = _1661_op; + DAST._IBinOp _source89 = _1665_op; { if (_source89.is_Eq) { - bool _1676_referential = _source89.dtor_referential; + bool _1680_referential = _source89.dtor_referential; { - if (_1676_referential) { + if (_1680_referential) { if (((this).ObjectType).is_RawPointers) { (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.UnicodeFromString("Cannot compare raw pointers yet - need to wrap them with a structure to ensure they are compared properly")); r = RAST.Expr.create_RawExpr((this.error).dtor_value); } else { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), _1670_left, _1673_right, DAST.Format.BinaryOpFormat.create_NoFormat()); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), _1674_left, _1677_right, DAST.Format.BinaryOpFormat.create_NoFormat()); } } else { - if (((_1663_rExpr).is_SeqValue) && ((new BigInteger(((_1663_rExpr).dtor_elements).Count)).Sign == 0)) { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), ((((_1670_left).Sel(Dafny.Sequence.UnicodeFromString("to_array"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()), RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0")), DAST.Format.BinaryOpFormat.create_NoFormat()); - } else if (((_1662_lExpr).is_SeqValue) && ((new BigInteger(((_1662_lExpr).dtor_elements).Count)).Sign == 0)) { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0")), ((((_1673_right).Sel(Dafny.Sequence.UnicodeFromString("to_array"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()), DAST.Format.BinaryOpFormat.create_NoFormat()); + if (((_1667_rExpr).is_SeqValue) && ((new BigInteger(((_1667_rExpr).dtor_elements).Count)).Sign == 0)) { + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), ((((_1674_left).Sel(Dafny.Sequence.UnicodeFromString("to_array"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()), RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0")), DAST.Format.BinaryOpFormat.create_NoFormat()); + } else if (((_1666_lExpr).is_SeqValue) && ((new BigInteger(((_1666_lExpr).dtor_elements).Count)).Sign == 0)) { + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), RAST.Expr.create_LiteralInt(Dafny.Sequence.UnicodeFromString("0")), ((((_1677_right).Sel(Dafny.Sequence.UnicodeFromString("to_array"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()), DAST.Format.BinaryOpFormat.create_NoFormat()); } else { - r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), _1670_left, _1673_right, DAST.Format.BinaryOpFormat.create_NoFormat()); + r = RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=="), _1674_left, _1677_right, DAST.Format.BinaryOpFormat.create_NoFormat()); } } } @@ -3978,7 +3999,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source89.is_EuclidianDiv) { { - r = (RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::dafny_runtime::euclidian_division"))).Apply(Dafny.Sequence.FromElements(_1670_left, _1673_right)); + r = (RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::dafny_runtime::euclidian_division"))).Apply(Dafny.Sequence.FromElements(_1674_left, _1677_right)); } goto after_match35; } @@ -3986,15 +4007,15 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP { if (_source89.is_EuclidianMod) { { - r = (RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::dafny_runtime::euclidian_modulo"))).Apply(Dafny.Sequence.FromElements(_1670_left, _1673_right)); + r = (RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("::dafny_runtime::euclidian_modulo"))).Apply(Dafny.Sequence.FromElements(_1674_left, _1677_right)); } goto after_match35; } } { - Dafny.ISequence _1677_op = _source89.dtor_Passthrough_a0; + Dafny.ISequence _1681_op = _source89.dtor_Passthrough_a0; { - r = RAST.Expr.create_BinaryOp(_1677_op, _1670_left, _1673_right, _1664_format); + r = RAST.Expr.create_BinaryOp(_1681_op, _1674_left, _1677_right, _1668_format); } } after_match35: ; @@ -4007,7 +4028,7 @@ public void GenExprBinary(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP (this).FromOwned(r, expectedOwnership, out _out228, out _out229); r = _out228; resultingOwnership = _out229; - readIdents = Dafny.Set>.Union(_1672_recIdentsL, _1675_recIdentsR); + readIdents = Dafny.Set>.Union(_1676_recIdentsL, _1679_recIdentsR); return ; } public void GenExprConvertToNewtype(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnvironment env, DCOMP._IOwnership expectedOwnership, out RAST._IExpr r, out DCOMP._IOwnership resultingOwnership, out Dafny.ISet> readIdents) @@ -4016,39 +4037,39 @@ public void GenExprConvertToNewtype(DAST._IExpression e, DCOMP._ISelfInfo selfId resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; DAST._IExpression _let_tmp_rhs55 = e; - DAST._IExpression _1678_expr = _let_tmp_rhs55.dtor_value; - DAST._IType _1679_fromTpe = _let_tmp_rhs55.dtor_from; - DAST._IType _1680_toTpe = _let_tmp_rhs55.dtor_typ; - DAST._IType _let_tmp_rhs56 = _1680_toTpe; + DAST._IExpression _1682_expr = _let_tmp_rhs55.dtor_value; + DAST._IType _1683_fromTpe = _let_tmp_rhs55.dtor_from; + DAST._IType _1684_toTpe = _let_tmp_rhs55.dtor_typ; + DAST._IType _let_tmp_rhs56 = _1684_toTpe; DAST._IResolvedType _let_tmp_rhs57 = _let_tmp_rhs56.dtor_resolved; - Dafny.ISequence> _1681_path = _let_tmp_rhs57.dtor_path; - Dafny.ISequence _1682_typeArgs = _let_tmp_rhs57.dtor_typeArgs; + Dafny.ISequence> _1685_path = _let_tmp_rhs57.dtor_path; + Dafny.ISequence _1686_typeArgs = _let_tmp_rhs57.dtor_typeArgs; DAST._IResolvedTypeBase _let_tmp_rhs58 = _let_tmp_rhs57.dtor_kind; - DAST._IType _1683_b = _let_tmp_rhs58.dtor_baseType; - DAST._INewtypeRange _1684_range = _let_tmp_rhs58.dtor_range; - bool _1685_erase = _let_tmp_rhs58.dtor_erase; - Dafny.ISequence _1686___v115 = _let_tmp_rhs57.dtor_attributes; - Dafny.ISequence> _1687___v116 = _let_tmp_rhs57.dtor_properMethods; - Dafny.ISequence _1688___v117 = _let_tmp_rhs57.dtor_extendedTypes; - Std.Wrappers._IOption _1689_nativeToType; - _1689_nativeToType = DCOMP.COMP.NewtypeToRustType(_1683_b, _1684_range); - if (object.Equals(_1679_fromTpe, _1683_b)) { - RAST._IExpr _1690_recursiveGen; - DCOMP._IOwnership _1691_recOwned; - Dafny.ISet> _1692_recIdents; + DAST._IType _1687_b = _let_tmp_rhs58.dtor_baseType; + DAST._INewtypeRange _1688_range = _let_tmp_rhs58.dtor_range; + bool _1689_erase = _let_tmp_rhs58.dtor_erase; + Dafny.ISequence _1690___v115 = _let_tmp_rhs57.dtor_attributes; + Dafny.ISequence> _1691___v116 = _let_tmp_rhs57.dtor_properMethods; + Dafny.ISequence _1692___v117 = _let_tmp_rhs57.dtor_extendedTypes; + Std.Wrappers._IOption _1693_nativeToType; + _1693_nativeToType = DCOMP.COMP.NewtypeToRustType(_1687_b, _1688_range); + if (object.Equals(_1683_fromTpe, _1687_b)) { + RAST._IExpr _1694_recursiveGen; + DCOMP._IOwnership _1695_recOwned; + Dafny.ISet> _1696_recIdents; RAST._IExpr _out230; DCOMP._IOwnership _out231; Dafny.ISet> _out232; - (this).GenExpr(_1678_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out230, out _out231, out _out232); - _1690_recursiveGen = _out230; - _1691_recOwned = _out231; - _1692_recIdents = _out232; - readIdents = _1692_recIdents; - Std.Wrappers._IOption _source90 = _1689_nativeToType; + (this).GenExpr(_1682_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out230, out _out231, out _out232); + _1694_recursiveGen = _out230; + _1695_recOwned = _out231; + _1696_recIdents = _out232; + readIdents = _1696_recIdents; + Std.Wrappers._IOption _source90 = _1693_nativeToType; { if (_source90.is_Some) { - RAST._IType _1693_v = _source90.dtor_value; - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("truncate!"))).Apply(Dafny.Sequence.FromElements(_1690_recursiveGen, RAST.Expr.create_ExprFromType(_1693_v))); + RAST._IType _1697_v = _source90.dtor_value; + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("truncate!"))).Apply(Dafny.Sequence.FromElements(_1694_recursiveGen, RAST.Expr.create_ExprFromType(_1697_v))); RAST._IExpr _out233; DCOMP._IOwnership _out234; (this).FromOwned(r, expectedOwnership, out _out233, out _out234); @@ -4058,54 +4079,54 @@ public void GenExprConvertToNewtype(DAST._IExpression e, DCOMP._ISelfInfo selfId } } { - if (_1685_erase) { - r = _1690_recursiveGen; + if (_1689_erase) { + r = _1694_recursiveGen; } else { - RAST._IType _1694_rhsType; + RAST._IType _1698_rhsType; RAST._IType _out235; - _out235 = (this).GenType(_1680_toTpe, DCOMP.GenTypeContext.InBinding()); - _1694_rhsType = _out235; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat((_1694_rhsType)._ToString(DCOMP.__default.IND), Dafny.Sequence.UnicodeFromString("(")), (_1690_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); + _out235 = (this).GenType(_1684_toTpe, DCOMP.GenTypeContext.InBinding()); + _1698_rhsType = _out235; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat((_1698_rhsType)._ToString(DCOMP.__default.IND), Dafny.Sequence.UnicodeFromString("(")), (_1694_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); } RAST._IExpr _out236; DCOMP._IOwnership _out237; - (this).FromOwnership(r, _1691_recOwned, expectedOwnership, out _out236, out _out237); + (this).FromOwnership(r, _1695_recOwned, expectedOwnership, out _out236, out _out237); r = _out236; resultingOwnership = _out237; } after_match36: ; } else { - if ((_1689_nativeToType).is_Some) { - DAST._IType _source91 = _1679_fromTpe; + if ((_1693_nativeToType).is_Some) { + DAST._IType _source91 = _1683_fromTpe; { if (_source91.is_UserDefined) { DAST._IResolvedType resolved1 = _source91.dtor_resolved; DAST._IResolvedTypeBase kind1 = resolved1.dtor_kind; if (kind1.is_Newtype) { - DAST._IType _1695_b0 = kind1.dtor_baseType; - DAST._INewtypeRange _1696_range0 = kind1.dtor_range; - bool _1697_erase0 = kind1.dtor_erase; - Dafny.ISequence _1698_attributes0 = resolved1.dtor_attributes; + DAST._IType _1699_b0 = kind1.dtor_baseType; + DAST._INewtypeRange _1700_range0 = kind1.dtor_range; + bool _1701_erase0 = kind1.dtor_erase; + Dafny.ISequence _1702_attributes0 = resolved1.dtor_attributes; { - Std.Wrappers._IOption _1699_nativeFromType; - _1699_nativeFromType = DCOMP.COMP.NewtypeToRustType(_1695_b0, _1696_range0); - if ((_1699_nativeFromType).is_Some) { - RAST._IExpr _1700_recursiveGen; - DCOMP._IOwnership _1701_recOwned; - Dafny.ISet> _1702_recIdents; + Std.Wrappers._IOption _1703_nativeFromType; + _1703_nativeFromType = DCOMP.COMP.NewtypeToRustType(_1699_b0, _1700_range0); + if ((_1703_nativeFromType).is_Some) { + RAST._IExpr _1704_recursiveGen; + DCOMP._IOwnership _1705_recOwned; + Dafny.ISet> _1706_recIdents; RAST._IExpr _out238; DCOMP._IOwnership _out239; Dafny.ISet> _out240; - (this).GenExpr(_1678_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out238, out _out239, out _out240); - _1700_recursiveGen = _out238; - _1701_recOwned = _out239; - _1702_recIdents = _out240; + (this).GenExpr(_1682_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out238, out _out239, out _out240); + _1704_recursiveGen = _out238; + _1705_recOwned = _out239; + _1706_recIdents = _out240; RAST._IExpr _out241; DCOMP._IOwnership _out242; - (this).FromOwnership(RAST.Expr.create_TypeAscription(_1700_recursiveGen, (_1689_nativeToType).dtor_value), _1701_recOwned, expectedOwnership, out _out241, out _out242); + (this).FromOwnership(RAST.Expr.create_TypeAscription(_1704_recursiveGen, (_1693_nativeToType).dtor_value), _1705_recOwned, expectedOwnership, out _out241, out _out242); r = _out241; resultingOwnership = _out242; - readIdents = _1702_recIdents; + readIdents = _1706_recIdents; return ; } } @@ -4116,30 +4137,30 @@ public void GenExprConvertToNewtype(DAST._IExpression e, DCOMP._ISelfInfo selfId { } after_match37: ; - if (object.Equals(_1679_fromTpe, DAST.Type.create_Primitive(DAST.Primitive.create_Char()))) { - RAST._IExpr _1703_recursiveGen; - DCOMP._IOwnership _1704_recOwned; - Dafny.ISet> _1705_recIdents; + if (object.Equals(_1683_fromTpe, DAST.Type.create_Primitive(DAST.Primitive.create_Char()))) { + RAST._IExpr _1707_recursiveGen; + DCOMP._IOwnership _1708_recOwned; + Dafny.ISet> _1709_recIdents; RAST._IExpr _out243; DCOMP._IOwnership _out244; Dafny.ISet> _out245; - (this).GenExpr(_1678_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out243, out _out244, out _out245); - _1703_recursiveGen = _out243; - _1704_recOwned = _out244; - _1705_recIdents = _out245; + (this).GenExpr(_1682_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out243, out _out244, out _out245); + _1707_recursiveGen = _out243; + _1708_recOwned = _out244; + _1709_recIdents = _out245; RAST._IExpr _out246; DCOMP._IOwnership _out247; - (this).FromOwnership(RAST.Expr.create_TypeAscription((_1703_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0")), (_1689_nativeToType).dtor_value), _1704_recOwned, expectedOwnership, out _out246, out _out247); + (this).FromOwnership(RAST.Expr.create_TypeAscription((_1707_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0")), (_1693_nativeToType).dtor_value), _1708_recOwned, expectedOwnership, out _out246, out _out247); r = _out246; resultingOwnership = _out247; - readIdents = _1705_recIdents; + readIdents = _1709_recIdents; return ; } } RAST._IExpr _out248; DCOMP._IOwnership _out249; Dafny.ISet> _out250; - (this).GenExpr(DAST.Expression.create_Convert(DAST.Expression.create_Convert(_1678_expr, _1679_fromTpe, _1683_b), _1683_b, _1680_toTpe), selfIdent, env, expectedOwnership, out _out248, out _out249, out _out250); + (this).GenExpr(DAST.Expression.create_Convert(DAST.Expression.create_Convert(_1682_expr, _1683_fromTpe, _1687_b), _1687_b, _1684_toTpe), selfIdent, env, expectedOwnership, out _out248, out _out249, out _out250); r = _out248; resultingOwnership = _out249; readIdents = _out250; @@ -4151,43 +4172,43 @@ public void GenExprConvertFromNewtype(DAST._IExpression e, DCOMP._ISelfInfo self resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; DAST._IExpression _let_tmp_rhs59 = e; - DAST._IExpression _1706_expr = _let_tmp_rhs59.dtor_value; - DAST._IType _1707_fromTpe = _let_tmp_rhs59.dtor_from; - DAST._IType _1708_toTpe = _let_tmp_rhs59.dtor_typ; - DAST._IType _let_tmp_rhs60 = _1707_fromTpe; + DAST._IExpression _1710_expr = _let_tmp_rhs59.dtor_value; + DAST._IType _1711_fromTpe = _let_tmp_rhs59.dtor_from; + DAST._IType _1712_toTpe = _let_tmp_rhs59.dtor_typ; + DAST._IType _let_tmp_rhs60 = _1711_fromTpe; DAST._IResolvedType _let_tmp_rhs61 = _let_tmp_rhs60.dtor_resolved; - Dafny.ISequence> _1709___v123 = _let_tmp_rhs61.dtor_path; - Dafny.ISequence _1710___v124 = _let_tmp_rhs61.dtor_typeArgs; + Dafny.ISequence> _1713___v123 = _let_tmp_rhs61.dtor_path; + Dafny.ISequence _1714___v124 = _let_tmp_rhs61.dtor_typeArgs; DAST._IResolvedTypeBase _let_tmp_rhs62 = _let_tmp_rhs61.dtor_kind; - DAST._IType _1711_b = _let_tmp_rhs62.dtor_baseType; - DAST._INewtypeRange _1712_range = _let_tmp_rhs62.dtor_range; - bool _1713_erase = _let_tmp_rhs62.dtor_erase; - Dafny.ISequence _1714_attributes = _let_tmp_rhs61.dtor_attributes; - Dafny.ISequence> _1715___v125 = _let_tmp_rhs61.dtor_properMethods; - Dafny.ISequence _1716___v126 = _let_tmp_rhs61.dtor_extendedTypes; - Std.Wrappers._IOption _1717_nativeFromType; - _1717_nativeFromType = DCOMP.COMP.NewtypeToRustType(_1711_b, _1712_range); - if (object.Equals(_1711_b, _1708_toTpe)) { - RAST._IExpr _1718_recursiveGen; - DCOMP._IOwnership _1719_recOwned; - Dafny.ISet> _1720_recIdents; + DAST._IType _1715_b = _let_tmp_rhs62.dtor_baseType; + DAST._INewtypeRange _1716_range = _let_tmp_rhs62.dtor_range; + bool _1717_erase = _let_tmp_rhs62.dtor_erase; + Dafny.ISequence _1718_attributes = _let_tmp_rhs61.dtor_attributes; + Dafny.ISequence> _1719___v125 = _let_tmp_rhs61.dtor_properMethods; + Dafny.ISequence _1720___v126 = _let_tmp_rhs61.dtor_extendedTypes; + Std.Wrappers._IOption _1721_nativeFromType; + _1721_nativeFromType = DCOMP.COMP.NewtypeToRustType(_1715_b, _1716_range); + if (object.Equals(_1715_b, _1712_toTpe)) { + RAST._IExpr _1722_recursiveGen; + DCOMP._IOwnership _1723_recOwned; + Dafny.ISet> _1724_recIdents; RAST._IExpr _out251; DCOMP._IOwnership _out252; Dafny.ISet> _out253; - (this).GenExpr(_1706_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out251, out _out252, out _out253); - _1718_recursiveGen = _out251; - _1719_recOwned = _out252; - _1720_recIdents = _out253; - readIdents = _1720_recIdents; - Std.Wrappers._IOption _source92 = _1717_nativeFromType; + (this).GenExpr(_1710_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out251, out _out252, out _out253); + _1722_recursiveGen = _out251; + _1723_recOwned = _out252; + _1724_recIdents = _out253; + readIdents = _1724_recIdents; + Std.Wrappers._IOption _source92 = _1721_nativeFromType; { if (_source92.is_Some) { - RAST._IType _1721_v = _source92.dtor_value; - RAST._IType _1722_toTpeRust; + RAST._IType _1725_v = _source92.dtor_value; + RAST._IType _1726_toTpeRust; RAST._IType _out254; - _out254 = (this).GenType(_1708_toTpe, DCOMP.GenTypeContext.@default()); - _1722_toTpeRust = _out254; - r = (((RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("Into"))).ApplyType(Dafny.Sequence.FromElements(_1722_toTpeRust))).MSel(Dafny.Sequence.UnicodeFromString("into"))).Apply(Dafny.Sequence.FromElements(_1718_recursiveGen)); + _out254 = (this).GenType(_1712_toTpe, DCOMP.GenTypeContext.@default()); + _1726_toTpeRust = _out254; + r = (((RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("Into"))).ApplyType(Dafny.Sequence.FromElements(_1726_toTpeRust))).MSel(Dafny.Sequence.UnicodeFromString("into"))).Apply(Dafny.Sequence.FromElements(_1722_recursiveGen)); RAST._IExpr _out255; DCOMP._IOwnership _out256; (this).FromOwned(r, expectedOwnership, out _out255, out _out256); @@ -4197,44 +4218,44 @@ public void GenExprConvertFromNewtype(DAST._IExpression e, DCOMP._ISelfInfo self } } { - if (_1713_erase) { - r = _1718_recursiveGen; + if (_1717_erase) { + r = _1722_recursiveGen; } else { - r = (_1718_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0")); + r = (_1722_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0")); } RAST._IExpr _out257; DCOMP._IOwnership _out258; - (this).FromOwnership(r, _1719_recOwned, expectedOwnership, out _out257, out _out258); + (this).FromOwnership(r, _1723_recOwned, expectedOwnership, out _out257, out _out258); r = _out257; resultingOwnership = _out258; } after_match38: ; } else { - if ((_1717_nativeFromType).is_Some) { - if (object.Equals(_1708_toTpe, DAST.Type.create_Primitive(DAST.Primitive.create_Char()))) { - RAST._IExpr _1723_recursiveGen; - DCOMP._IOwnership _1724_recOwned; - Dafny.ISet> _1725_recIdents; + if ((_1721_nativeFromType).is_Some) { + if (object.Equals(_1712_toTpe, DAST.Type.create_Primitive(DAST.Primitive.create_Char()))) { + RAST._IExpr _1727_recursiveGen; + DCOMP._IOwnership _1728_recOwned; + Dafny.ISet> _1729_recIdents; RAST._IExpr _out259; DCOMP._IOwnership _out260; Dafny.ISet> _out261; - (this).GenExpr(_1706_expr, selfIdent, env, expectedOwnership, out _out259, out _out260, out _out261); - _1723_recursiveGen = _out259; - _1724_recOwned = _out260; - _1725_recIdents = _out261; + (this).GenExpr(_1710_expr, selfIdent, env, expectedOwnership, out _out259, out _out260, out _out261); + _1727_recursiveGen = _out259; + _1728_recOwned = _out260; + _1729_recIdents = _out261; RAST._IExpr _out262; DCOMP._IOwnership _out263; - (this).FromOwnership(((RAST.__default.dafny__runtime).MSel((this).DafnyChar)).Apply1(RAST.Expr.create_TypeAscription(_1723_recursiveGen, (this).DafnyCharUnderlying)), _1724_recOwned, expectedOwnership, out _out262, out _out263); + (this).FromOwnership(((RAST.__default.dafny__runtime).MSel((this).DafnyChar)).Apply1(RAST.Expr.create_TypeAscription(_1727_recursiveGen, (this).DafnyCharUnderlying)), _1728_recOwned, expectedOwnership, out _out262, out _out263); r = _out262; resultingOwnership = _out263; - readIdents = _1725_recIdents; + readIdents = _1729_recIdents; return ; } } RAST._IExpr _out264; DCOMP._IOwnership _out265; Dafny.ISet> _out266; - (this).GenExpr(DAST.Expression.create_Convert(DAST.Expression.create_Convert(_1706_expr, _1707_fromTpe, _1711_b), _1711_b, _1708_toTpe), selfIdent, env, expectedOwnership, out _out264, out _out265, out _out266); + (this).GenExpr(DAST.Expression.create_Convert(DAST.Expression.create_Convert(_1710_expr, _1711_fromTpe, _1715_b), _1715_b, _1712_toTpe), selfIdent, env, expectedOwnership, out _out264, out _out265, out _out266); r = _out264; resultingOwnership = _out265; readIdents = _out266; @@ -4258,17 +4279,17 @@ public bool SameTypesButDifferentTypeParameters(DAST._IType fromType, RAST._ITyp if ((new BigInteger((xs).Count)).Sign == 0) { return Std.Wrappers.Result, __E>.create_Success(Dafny.Sequence<__T>.FromElements()); } else { - Std.Wrappers._IResult<__T, __E> _1726_valueOrError0 = (xs).Select(BigInteger.Zero); - if ((_1726_valueOrError0).IsFailure()) { - return (_1726_valueOrError0).PropagateFailure>(); + Std.Wrappers._IResult<__T, __E> _1730_valueOrError0 = (xs).Select(BigInteger.Zero); + if ((_1730_valueOrError0).IsFailure()) { + return (_1730_valueOrError0).PropagateFailure>(); } else { - __T _1727_head = (_1726_valueOrError0).Extract(); - Std.Wrappers._IResult, __E> _1728_valueOrError1 = (this).SeqResultToResultSeq<__T, __E>((xs).Drop(BigInteger.One)); - if ((_1728_valueOrError1).IsFailure()) { - return (_1728_valueOrError1).PropagateFailure>(); + __T _1731_head = (_1730_valueOrError0).Extract(); + Std.Wrappers._IResult, __E> _1732_valueOrError1 = (this).SeqResultToResultSeq<__T, __E>((xs).Drop(BigInteger.One)); + if ((_1732_valueOrError1).IsFailure()) { + return (_1732_valueOrError1).PropagateFailure>(); } else { - Dafny.ISequence<__T> _1729_tail = (_1728_valueOrError1).Extract(); - return Std.Wrappers.Result, __E>.create_Success(Dafny.Sequence<__T>.Concat(Dafny.Sequence<__T>.FromElements(_1727_head), _1729_tail)); + Dafny.ISequence<__T> _1733_tail = (_1732_valueOrError1).Extract(); + return Std.Wrappers.Result, __E>.create_Success(Dafny.Sequence<__T>.Concat(Dafny.Sequence<__T>.FromElements(_1731_head), _1733_tail)); } } } @@ -4281,69 +4302,69 @@ public bool SameTypesButDifferentTypeParameters(DAST._IType fromType, RAST._ITyp if (!(((toTpe).ObjectOrPointerUnderlying()).is_DynType)) { return Std.Wrappers.Result,RAST._IExpr>>>.create_Failure(_System.Tuple5,RAST._IExpr>>.create(fromType, fromTpe, toType, toTpe, typeParams)); } else { - RAST._IType _1730_fromTpeUnderlying = (fromTpe).ObjectOrPointerUnderlying(); - RAST._IType _1731_toTpeUnderlying = (toTpe).ObjectOrPointerUnderlying(); - return Std.Wrappers.Result,RAST._IExpr>>>.create_Success((((RAST.__default.dafny__runtime).MSel((this).upcast)).ApplyType(Dafny.Sequence.FromElements(_1730_fromTpeUnderlying, _1731_toTpeUnderlying))).Apply(Dafny.Sequence.FromElements())); + RAST._IType _1734_fromTpeUnderlying = (fromTpe).ObjectOrPointerUnderlying(); + RAST._IType _1735_toTpeUnderlying = (toTpe).ObjectOrPointerUnderlying(); + return Std.Wrappers.Result,RAST._IExpr>>>.create_Success((((RAST.__default.dafny__runtime).MSel((this).upcast)).ApplyType(Dafny.Sequence.FromElements(_1734_fromTpeUnderlying, _1735_toTpeUnderlying))).Apply(Dafny.Sequence.FromElements())); } } else if ((typeParams).Contains(_System.Tuple2.create(fromTpe, toTpe))) { return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(Dafny.Map<_System._ITuple2, RAST._IExpr>.Select(typeParams,_System.Tuple2.create(fromTpe, toTpe))); } else if (((fromTpe).IsRc()) && ((toTpe).IsRc())) { - Std.Wrappers._IResult,RAST._IExpr>>> _1732_valueOrError0 = (this).UpcastConversionLambda(fromType, (fromTpe).RcUnderlying(), toType, (toTpe).RcUnderlying(), typeParams); - if ((_1732_valueOrError0).IsFailure()) { - return (_1732_valueOrError0).PropagateFailure(); + Std.Wrappers._IResult,RAST._IExpr>>> _1736_valueOrError0 = (this).UpcastConversionLambda(fromType, (fromTpe).RcUnderlying(), toType, (toTpe).RcUnderlying(), typeParams); + if ((_1736_valueOrError0).IsFailure()) { + return (_1736_valueOrError0).PropagateFailure(); } else { - RAST._IExpr _1733_lambda = (_1732_valueOrError0).Extract(); + RAST._IExpr _1737_lambda = (_1736_valueOrError0).Extract(); if ((fromType).is_Arrow) { - return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(_1733_lambda); + return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(_1737_lambda); } else { - return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("rc_coerce"))).Apply1(_1733_lambda)); + return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("rc_coerce"))).Apply1(_1737_lambda)); } } } else if ((this).SameTypesButDifferentTypeParameters(fromType, fromTpe, toType, toTpe)) { - Std.Wrappers._IResult, _System._ITuple5,RAST._IExpr>>> _1734_valueOrError1 = (this).SeqResultToResultSeq,RAST._IExpr>>>(((System.Func,RAST._IExpr>>>>>) (() => { + Std.Wrappers._IResult, _System._ITuple5,RAST._IExpr>>> _1738_valueOrError1 = (this).SeqResultToResultSeq,RAST._IExpr>>>(((System.Func,RAST._IExpr>>>>>) (() => { BigInteger dim12 = new BigInteger(((fromTpe).dtor_arguments).Count); var arr12 = new Std.Wrappers._IResult,RAST._IExpr>>>[Dafny.Helpers.ToIntChecked(dim12, "array size exceeds memory limit")]; for (int i12 = 0; i12 < dim12; i12++) { - var _1735_i = (BigInteger) i12; - arr12[(int)(_1735_i)] = (this).UpcastConversionLambda((((fromType).dtor_resolved).dtor_typeArgs).Select(_1735_i), ((fromTpe).dtor_arguments).Select(_1735_i), (((toType).dtor_resolved).dtor_typeArgs).Select(_1735_i), ((toTpe).dtor_arguments).Select(_1735_i), typeParams); + var _1739_i = (BigInteger) i12; + arr12[(int)(_1739_i)] = (this).UpcastConversionLambda((((fromType).dtor_resolved).dtor_typeArgs).Select(_1739_i), ((fromTpe).dtor_arguments).Select(_1739_i), (((toType).dtor_resolved).dtor_typeArgs).Select(_1739_i), ((toTpe).dtor_arguments).Select(_1739_i), typeParams); } return Dafny.Sequence,RAST._IExpr>>>>.FromArray(arr12); }))()); - if ((_1734_valueOrError1).IsFailure()) { - return (_1734_valueOrError1).PropagateFailure(); + if ((_1738_valueOrError1).IsFailure()) { + return (_1738_valueOrError1).PropagateFailure(); } else { - Dafny.ISequence _1736_lambdas = (_1734_valueOrError1).Extract(); + Dafny.ISequence _1740_lambdas = (_1738_valueOrError1).Extract(); return Std.Wrappers.Result,RAST._IExpr>>>.create_Success((((RAST.Expr.create_ExprFromType((fromTpe).dtor_baseName)).ApplyType(((System.Func>) (() => { BigInteger dim13 = new BigInteger(((fromTpe).dtor_arguments).Count); var arr13 = new RAST._IType[Dafny.Helpers.ToIntChecked(dim13, "array size exceeds memory limit")]; for (int i13 = 0; i13 < dim13; i13++) { - var _1737_i = (BigInteger) i13; - arr13[(int)(_1737_i)] = ((fromTpe).dtor_arguments).Select(_1737_i); + var _1741_i = (BigInteger) i13; + arr13[(int)(_1741_i)] = ((fromTpe).dtor_arguments).Select(_1741_i); } return Dafny.Sequence.FromArray(arr13); -}))())).MSel(Dafny.Sequence.UnicodeFromString("coerce"))).Apply(_1736_lambdas)); +}))())).MSel(Dafny.Sequence.UnicodeFromString("coerce"))).Apply(_1740_lambdas)); } } else if (((((fromTpe).IsBuiltinCollection()) && ((toTpe).IsBuiltinCollection())) && ((this).IsBuiltinCollection(fromType))) && ((this).IsBuiltinCollection(toType))) { - RAST._IType _1738_newFromTpe = (fromTpe).GetBuiltinCollectionElement(); - RAST._IType _1739_newToTpe = (toTpe).GetBuiltinCollectionElement(); - DAST._IType _1740_newFromType = (this).GetBuiltinCollectionElement(fromType); - DAST._IType _1741_newToType = (this).GetBuiltinCollectionElement(toType); - Std.Wrappers._IResult,RAST._IExpr>>> _1742_valueOrError2 = (this).UpcastConversionLambda(_1740_newFromType, _1738_newFromTpe, _1741_newToType, _1739_newToTpe, typeParams); - if ((_1742_valueOrError2).IsFailure()) { - return (_1742_valueOrError2).PropagateFailure(); + RAST._IType _1742_newFromTpe = (fromTpe).GetBuiltinCollectionElement(); + RAST._IType _1743_newToTpe = (toTpe).GetBuiltinCollectionElement(); + DAST._IType _1744_newFromType = (this).GetBuiltinCollectionElement(fromType); + DAST._IType _1745_newToType = (this).GetBuiltinCollectionElement(toType); + Std.Wrappers._IResult,RAST._IExpr>>> _1746_valueOrError2 = (this).UpcastConversionLambda(_1744_newFromType, _1742_newFromTpe, _1745_newToType, _1743_newToTpe, typeParams); + if ((_1746_valueOrError2).IsFailure()) { + return (_1746_valueOrError2).PropagateFailure(); } else { - RAST._IExpr _1743_coerceArg = (_1742_valueOrError2).Extract(); - RAST._IExpr _1744_collectionType = (RAST.__default.dafny__runtime).MSel(((fromTpe).dtor_baseName).dtor_name); - RAST._IExpr _1745_baseType = (((((fromTpe).dtor_baseName).dtor_name).Equals(Dafny.Sequence.UnicodeFromString("Map"))) ? ((_1744_collectionType).ApplyType(Dafny.Sequence.FromElements(((fromTpe).dtor_arguments).Select(BigInteger.Zero), _1738_newFromTpe))) : ((_1744_collectionType).ApplyType(Dafny.Sequence.FromElements(_1738_newFromTpe)))); - return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(((_1745_baseType).MSel(Dafny.Sequence.UnicodeFromString("coerce"))).Apply1(_1743_coerceArg)); + RAST._IExpr _1747_coerceArg = (_1746_valueOrError2).Extract(); + RAST._IExpr _1748_collectionType = (RAST.__default.dafny__runtime).MSel(((fromTpe).dtor_baseName).dtor_name); + RAST._IExpr _1749_baseType = (((((fromTpe).dtor_baseName).dtor_name).Equals(Dafny.Sequence.UnicodeFromString("Map"))) ? ((_1748_collectionType).ApplyType(Dafny.Sequence.FromElements(((fromTpe).dtor_arguments).Select(BigInteger.Zero), _1742_newFromTpe))) : ((_1748_collectionType).ApplyType(Dafny.Sequence.FromElements(_1742_newFromTpe)))); + return Std.Wrappers.Result,RAST._IExpr>>>.create_Success(((_1749_baseType).MSel(Dafny.Sequence.UnicodeFromString("coerce"))).Apply1(_1747_coerceArg)); } } else if ((((((((((fromTpe).is_DynType) && (((fromTpe).dtor_underlying).is_FnType)) && ((toTpe).is_DynType)) && (((toTpe).dtor_underlying).is_FnType)) && ((((fromTpe).dtor_underlying).dtor_arguments).Equals(((toTpe).dtor_underlying).dtor_arguments))) && ((fromType).is_Arrow)) && ((toType).is_Arrow)) && ((new BigInteger((((fromTpe).dtor_underlying).dtor_arguments).Count)) == (BigInteger.One))) && (((((fromTpe).dtor_underlying).dtor_arguments).Select(BigInteger.Zero)).is_Borrowed)) { - Std.Wrappers._IResult,RAST._IExpr>>> _1746_valueOrError3 = (this).UpcastConversionLambda((fromType).dtor_result, ((fromTpe).dtor_underlying).dtor_returnType, (toType).dtor_result, ((toTpe).dtor_underlying).dtor_returnType, typeParams); - if ((_1746_valueOrError3).IsFailure()) { - return (_1746_valueOrError3).PropagateFailure(); + Std.Wrappers._IResult,RAST._IExpr>>> _1750_valueOrError3 = (this).UpcastConversionLambda((fromType).dtor_result, ((fromTpe).dtor_underlying).dtor_returnType, (toType).dtor_result, ((toTpe).dtor_underlying).dtor_returnType, typeParams); + if ((_1750_valueOrError3).IsFailure()) { + return (_1750_valueOrError3).PropagateFailure(); } else { - RAST._IExpr _1747_lambda = (_1746_valueOrError3).Extract(); - return Std.Wrappers.Result,RAST._IExpr>>>.create_Success((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("fn1_coerce"))).ApplyType(Dafny.Sequence.FromElements(((((fromTpe).dtor_underlying).dtor_arguments).Select(BigInteger.Zero)).dtor_underlying, ((fromTpe).dtor_underlying).dtor_returnType, ((toTpe).dtor_underlying).dtor_returnType))).Apply1(_1747_lambda)); + RAST._IExpr _1751_lambda = (_1750_valueOrError3).Extract(); + return Std.Wrappers.Result,RAST._IExpr>>>.create_Success((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("fn1_coerce"))).ApplyType(Dafny.Sequence.FromElements(((((fromTpe).dtor_underlying).dtor_arguments).Select(BigInteger.Zero)).dtor_underlying, ((fromTpe).dtor_underlying).dtor_returnType, ((toTpe).dtor_underlying).dtor_returnType))).Apply1(_1751_lambda)); } } else { return Std.Wrappers.Result,RAST._IExpr>>>.create_Failure(_System.Tuple5,RAST._IExpr>>.create(fromType, fromTpe, toType, toTpe, typeParams)); @@ -4363,84 +4384,84 @@ public void GenExprConvertOther(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; DAST._IExpression _let_tmp_rhs63 = e; - DAST._IExpression _1748_expr = _let_tmp_rhs63.dtor_value; - DAST._IType _1749_fromTpe = _let_tmp_rhs63.dtor_from; - DAST._IType _1750_toTpe = _let_tmp_rhs63.dtor_typ; - RAST._IType _1751_fromTpeGen; + DAST._IExpression _1752_expr = _let_tmp_rhs63.dtor_value; + DAST._IType _1753_fromTpe = _let_tmp_rhs63.dtor_from; + DAST._IType _1754_toTpe = _let_tmp_rhs63.dtor_typ; + RAST._IType _1755_fromTpeGen; RAST._IType _out267; - _out267 = (this).GenType(_1749_fromTpe, DCOMP.GenTypeContext.InBinding()); - _1751_fromTpeGen = _out267; - RAST._IType _1752_toTpeGen; + _out267 = (this).GenType(_1753_fromTpe, DCOMP.GenTypeContext.InBinding()); + _1755_fromTpeGen = _out267; + RAST._IType _1756_toTpeGen; RAST._IType _out268; - _out268 = (this).GenType(_1750_toTpe, DCOMP.GenTypeContext.InBinding()); - _1752_toTpeGen = _out268; - Std.Wrappers._IResult,RAST._IExpr>>> _1753_upcastConverter; - _1753_upcastConverter = (this).UpcastConversionLambda(_1749_fromTpe, _1751_fromTpeGen, _1750_toTpe, _1752_toTpeGen, Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements()); - if ((_1753_upcastConverter).is_Success) { - RAST._IExpr _1754_conversionLambda; - _1754_conversionLambda = (_1753_upcastConverter).dtor_value; - RAST._IExpr _1755_recursiveGen; - DCOMP._IOwnership _1756_recOwned; - Dafny.ISet> _1757_recIdents; + _out268 = (this).GenType(_1754_toTpe, DCOMP.GenTypeContext.InBinding()); + _1756_toTpeGen = _out268; + Std.Wrappers._IResult,RAST._IExpr>>> _1757_upcastConverter; + _1757_upcastConverter = (this).UpcastConversionLambda(_1753_fromTpe, _1755_fromTpeGen, _1754_toTpe, _1756_toTpeGen, Dafny.Map<_System._ITuple2, RAST._IExpr>.FromElements()); + if ((_1757_upcastConverter).is_Success) { + RAST._IExpr _1758_conversionLambda; + _1758_conversionLambda = (_1757_upcastConverter).dtor_value; + RAST._IExpr _1759_recursiveGen; + DCOMP._IOwnership _1760_recOwned; + Dafny.ISet> _1761_recIdents; RAST._IExpr _out269; DCOMP._IOwnership _out270; Dafny.ISet> _out271; - (this).GenExpr(_1748_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out269, out _out270, out _out271); - _1755_recursiveGen = _out269; - _1756_recOwned = _out270; - _1757_recIdents = _out271; - readIdents = _1757_recIdents; - r = (_1754_conversionLambda).Apply1(_1755_recursiveGen); + (this).GenExpr(_1752_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out269, out _out270, out _out271); + _1759_recursiveGen = _out269; + _1760_recOwned = _out270; + _1761_recIdents = _out271; + readIdents = _1761_recIdents; + r = (_1758_conversionLambda).Apply1(_1759_recursiveGen); RAST._IExpr _out272; DCOMP._IOwnership _out273; (this).FromOwnership(r, DCOMP.Ownership.create_OwnershipOwned(), expectedOwnership, out _out272, out _out273); r = _out272; resultingOwnership = _out273; - } else if ((this).IsDowncastConversion(_1751_fromTpeGen, _1752_toTpeGen)) { - RAST._IExpr _1758_recursiveGen; - DCOMP._IOwnership _1759_recOwned; - Dafny.ISet> _1760_recIdents; + } else if ((this).IsDowncastConversion(_1755_fromTpeGen, _1756_toTpeGen)) { + RAST._IExpr _1762_recursiveGen; + DCOMP._IOwnership _1763_recOwned; + Dafny.ISet> _1764_recIdents; RAST._IExpr _out274; DCOMP._IOwnership _out275; Dafny.ISet> _out276; - (this).GenExpr(_1748_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out274, out _out275, out _out276); - _1758_recursiveGen = _out274; - _1759_recOwned = _out275; - _1760_recIdents = _out276; - readIdents = _1760_recIdents; - _1752_toTpeGen = (_1752_toTpeGen).ObjectOrPointerUnderlying(); - r = ((RAST.__default.dafny__runtime).MSel((this).downcast)).Apply(Dafny.Sequence.FromElements(_1758_recursiveGen, RAST.Expr.create_ExprFromType(_1752_toTpeGen))); + (this).GenExpr(_1752_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out274, out _out275, out _out276); + _1762_recursiveGen = _out274; + _1763_recOwned = _out275; + _1764_recIdents = _out276; + readIdents = _1764_recIdents; + _1756_toTpeGen = (_1756_toTpeGen).ObjectOrPointerUnderlying(); + r = ((RAST.__default.dafny__runtime).MSel((this).downcast)).Apply(Dafny.Sequence.FromElements(_1762_recursiveGen, RAST.Expr.create_ExprFromType(_1756_toTpeGen))); RAST._IExpr _out277; DCOMP._IOwnership _out278; (this).FromOwnership(r, DCOMP.Ownership.create_OwnershipOwned(), expectedOwnership, out _out277, out _out278); r = _out277; resultingOwnership = _out278; } else { - RAST._IExpr _1761_recursiveGen; - DCOMP._IOwnership _1762_recOwned; - Dafny.ISet> _1763_recIdents; + RAST._IExpr _1765_recursiveGen; + DCOMP._IOwnership _1766_recOwned; + Dafny.ISet> _1767_recIdents; RAST._IExpr _out279; DCOMP._IOwnership _out280; Dafny.ISet> _out281; - (this).GenExpr(_1748_expr, selfIdent, env, expectedOwnership, out _out279, out _out280, out _out281); - _1761_recursiveGen = _out279; - _1762_recOwned = _out280; - _1763_recIdents = _out281; - readIdents = _1763_recIdents; - Std.Wrappers._IResult,RAST._IExpr>>> _let_tmp_rhs64 = _1753_upcastConverter; + (this).GenExpr(_1752_expr, selfIdent, env, expectedOwnership, out _out279, out _out280, out _out281); + _1765_recursiveGen = _out279; + _1766_recOwned = _out280; + _1767_recIdents = _out281; + readIdents = _1767_recIdents; + Std.Wrappers._IResult,RAST._IExpr>>> _let_tmp_rhs64 = _1757_upcastConverter; _System._ITuple5,RAST._IExpr>> _let_tmp_rhs65 = _let_tmp_rhs64.dtor_error; - DAST._IType _1764_fromType = _let_tmp_rhs65.dtor__0; - RAST._IType _1765_fromTpeGen = _let_tmp_rhs65.dtor__1; - DAST._IType _1766_toType = _let_tmp_rhs65.dtor__2; - RAST._IType _1767_toTpeGen = _let_tmp_rhs65.dtor__3; - Dafny.IMap<_System._ITuple2,RAST._IExpr> _1768_m = _let_tmp_rhs65.dtor__4; - Dafny.ISequence _1769_msg; - _1769_msg = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("/* Coercion from "), (_1765_fromTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" to ")), (_1767_toTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" not yet implemented */")); - (this).error = Std.Wrappers.Option>.create_Some(_1769_msg); - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat((_1761_recursiveGen)._ToString(DCOMP.__default.IND), _1769_msg)); + DAST._IType _1768_fromType = _let_tmp_rhs65.dtor__0; + RAST._IType _1769_fromTpeGen = _let_tmp_rhs65.dtor__1; + DAST._IType _1770_toType = _let_tmp_rhs65.dtor__2; + RAST._IType _1771_toTpeGen = _let_tmp_rhs65.dtor__3; + Dafny.IMap<_System._ITuple2,RAST._IExpr> _1772_m = _let_tmp_rhs65.dtor__4; + Dafny.ISequence _1773_msg; + _1773_msg = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("/* Coercion from "), (_1769_fromTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" to ")), (_1771_toTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" not yet implemented */")); + (this).error = Std.Wrappers.Option>.create_Some(_1773_msg); + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat((_1765_recursiveGen)._ToString(DCOMP.__default.IND), _1773_msg)); RAST._IExpr _out282; DCOMP._IOwnership _out283; - (this).FromOwnership(r, _1762_recOwned, expectedOwnership, out _out282, out _out283); + (this).FromOwnership(r, _1766_recOwned, expectedOwnership, out _out282, out _out283); r = _out282; resultingOwnership = _out283; } @@ -4451,39 +4472,39 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; DAST._IExpression _let_tmp_rhs66 = e; - DAST._IExpression _1770_expr = _let_tmp_rhs66.dtor_value; - DAST._IType _1771_fromTpe = _let_tmp_rhs66.dtor_from; - DAST._IType _1772_toTpe = _let_tmp_rhs66.dtor_typ; - if (object.Equals(_1771_fromTpe, _1772_toTpe)) { - RAST._IExpr _1773_recursiveGen; - DCOMP._IOwnership _1774_recOwned; - Dafny.ISet> _1775_recIdents; + DAST._IExpression _1774_expr = _let_tmp_rhs66.dtor_value; + DAST._IType _1775_fromTpe = _let_tmp_rhs66.dtor_from; + DAST._IType _1776_toTpe = _let_tmp_rhs66.dtor_typ; + if (object.Equals(_1775_fromTpe, _1776_toTpe)) { + RAST._IExpr _1777_recursiveGen; + DCOMP._IOwnership _1778_recOwned; + Dafny.ISet> _1779_recIdents; RAST._IExpr _out284; DCOMP._IOwnership _out285; Dafny.ISet> _out286; - (this).GenExpr(_1770_expr, selfIdent, env, expectedOwnership, out _out284, out _out285, out _out286); - _1773_recursiveGen = _out284; - _1774_recOwned = _out285; - _1775_recIdents = _out286; - r = _1773_recursiveGen; + (this).GenExpr(_1774_expr, selfIdent, env, expectedOwnership, out _out284, out _out285, out _out286); + _1777_recursiveGen = _out284; + _1778_recOwned = _out285; + _1779_recIdents = _out286; + r = _1777_recursiveGen; RAST._IExpr _out287; DCOMP._IOwnership _out288; - (this).FromOwnership(r, _1774_recOwned, expectedOwnership, out _out287, out _out288); + (this).FromOwnership(r, _1778_recOwned, expectedOwnership, out _out287, out _out288); r = _out287; resultingOwnership = _out288; - readIdents = _1775_recIdents; + readIdents = _1779_recIdents; } else { - _System._ITuple2 _source93 = _System.Tuple2.create(_1771_fromTpe, _1772_toTpe); + _System._ITuple2 _source93 = _System.Tuple2.create(_1775_fromTpe, _1776_toTpe); { DAST._IType _10 = _source93.dtor__1; if (_10.is_UserDefined) { DAST._IResolvedType resolved2 = _10.dtor_resolved; DAST._IResolvedTypeBase kind2 = resolved2.dtor_kind; if (kind2.is_Newtype) { - DAST._IType _1776_b = kind2.dtor_baseType; - DAST._INewtypeRange _1777_range = kind2.dtor_range; - bool _1778_erase = kind2.dtor_erase; - Dafny.ISequence _1779_attributes = resolved2.dtor_attributes; + DAST._IType _1780_b = kind2.dtor_baseType; + DAST._INewtypeRange _1781_range = kind2.dtor_range; + bool _1782_erase = kind2.dtor_erase; + Dafny.ISequence _1783_attributes = resolved2.dtor_attributes; { RAST._IExpr _out289; DCOMP._IOwnership _out290; @@ -4503,10 +4524,10 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IResolvedType resolved3 = _00.dtor_resolved; DAST._IResolvedTypeBase kind3 = resolved3.dtor_kind; if (kind3.is_Newtype) { - DAST._IType _1780_b = kind3.dtor_baseType; - DAST._INewtypeRange _1781_range = kind3.dtor_range; - bool _1782_erase = kind3.dtor_erase; - Dafny.ISequence _1783_attributes = resolved3.dtor_attributes; + DAST._IType _1784_b = kind3.dtor_baseType; + DAST._INewtypeRange _1785_range = kind3.dtor_range; + bool _1786_erase = kind3.dtor_erase; + Dafny.ISequence _1787_attributes = resolved3.dtor_attributes; { RAST._IExpr _out292; DCOMP._IOwnership _out293; @@ -4530,23 +4551,23 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IPrimitive _h73 = _11.dtor_Primitive_a0; if (_h73.is_Real) { { - RAST._IExpr _1784_recursiveGen; - DCOMP._IOwnership _1785___v137; - Dafny.ISet> _1786_recIdents; + RAST._IExpr _1788_recursiveGen; + DCOMP._IOwnership _1789___v137; + Dafny.ISet> _1790_recIdents; RAST._IExpr _out295; DCOMP._IOwnership _out296; Dafny.ISet> _out297; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out295, out _out296, out _out297); - _1784_recursiveGen = _out295; - _1785___v137 = _out296; - _1786_recIdents = _out297; - r = RAST.__default.RcNew(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::BigRational::from_integer("), (_1784_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")")))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out295, out _out296, out _out297); + _1788_recursiveGen = _out295; + _1789___v137 = _out296; + _1790_recIdents = _out297; + r = RAST.__default.RcNew(RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::BigRational::from_integer("), (_1788_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")")))); RAST._IExpr _out298; DCOMP._IOwnership _out299; (this).FromOwned(r, expectedOwnership, out _out298, out _out299); r = _out298; resultingOwnership = _out299; - readIdents = _1786_recIdents; + readIdents = _1790_recIdents; } goto after_match39; } @@ -4564,23 +4585,23 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IPrimitive _h75 = _12.dtor_Primitive_a0; if (_h75.is_Int) { { - RAST._IExpr _1787_recursiveGen; - DCOMP._IOwnership _1788___v138; - Dafny.ISet> _1789_recIdents; + RAST._IExpr _1791_recursiveGen; + DCOMP._IOwnership _1792___v138; + Dafny.ISet> _1793_recIdents; RAST._IExpr _out300; DCOMP._IOwnership _out301; Dafny.ISet> _out302; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out300, out _out301, out _out302); - _1787_recursiveGen = _out300; - _1788___v138 = _out301; - _1789_recIdents = _out302; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::dafny_rational_to_int("), (_1787_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out300, out _out301, out _out302); + _1791_recursiveGen = _out300; + _1792___v138 = _out301; + _1793_recIdents = _out302; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::dafny_rational_to_int("), (_1791_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); RAST._IExpr _out303; DCOMP._IOwnership _out304; (this).FromOwned(r, expectedOwnership, out _out303, out _out304); r = _out303; resultingOwnership = _out304; - readIdents = _1789_recIdents; + readIdents = _1793_recIdents; } goto after_match39; } @@ -4596,27 +4617,27 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IType _13 = _source93.dtor__1; if (_13.is_Passthrough) { { - RAST._IType _1790_rhsType; + RAST._IType _1794_rhsType; RAST._IType _out305; - _out305 = (this).GenType(_1772_toTpe, DCOMP.GenTypeContext.InBinding()); - _1790_rhsType = _out305; - RAST._IExpr _1791_recursiveGen; - DCOMP._IOwnership _1792___v140; - Dafny.ISet> _1793_recIdents; + _out305 = (this).GenType(_1776_toTpe, DCOMP.GenTypeContext.InBinding()); + _1794_rhsType = _out305; + RAST._IExpr _1795_recursiveGen; + DCOMP._IOwnership _1796___v140; + Dafny.ISet> _1797_recIdents; RAST._IExpr _out306; DCOMP._IOwnership _out307; Dafny.ISet> _out308; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out306, out _out307, out _out308); - _1791_recursiveGen = _out306; - _1792___v140 = _out307; - _1793_recIdents = _out308; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("<"), (_1790_rhsType)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" as ::dafny_runtime::NumCast>::from(")), (_1791_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").unwrap()"))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out306, out _out307, out _out308); + _1795_recursiveGen = _out306; + _1796___v140 = _out307; + _1797_recIdents = _out308; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("<"), (_1794_rhsType)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" as ::dafny_runtime::NumCast>::from(")), (_1795_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").unwrap()"))); RAST._IExpr _out309; DCOMP._IOwnership _out310; (this).FromOwned(r, expectedOwnership, out _out309, out _out310); r = _out309; resultingOwnership = _out310; - readIdents = _1793_recIdents; + readIdents = _1797_recIdents; } goto after_match39; } @@ -4631,27 +4652,27 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IPrimitive _h77 = _14.dtor_Primitive_a0; if (_h77.is_Int) { { - RAST._IType _1794_rhsType; + RAST._IType _1798_rhsType; RAST._IType _out311; - _out311 = (this).GenType(_1771_fromTpe, DCOMP.GenTypeContext.InBinding()); - _1794_rhsType = _out311; - RAST._IExpr _1795_recursiveGen; - DCOMP._IOwnership _1796___v142; - Dafny.ISet> _1797_recIdents; + _out311 = (this).GenType(_1775_fromTpe, DCOMP.GenTypeContext.InBinding()); + _1798_rhsType = _out311; + RAST._IExpr _1799_recursiveGen; + DCOMP._IOwnership _1800___v142; + Dafny.ISet> _1801_recIdents; RAST._IExpr _out312; DCOMP._IOwnership _out313; Dafny.ISet> _out314; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out312, out _out313, out _out314); - _1795_recursiveGen = _out312; - _1796___v142 = _out313; - _1797_recIdents = _out314; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::DafnyInt::new(::std::rc::Rc::new(::dafny_runtime::BigInt::from("), (_1795_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")))"))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out312, out _out313, out _out314); + _1799_recursiveGen = _out312; + _1800___v142 = _out313; + _1801_recIdents = _out314; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::DafnyInt::new(::std::rc::Rc::new(::dafny_runtime::BigInt::from("), (_1799_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")))"))); RAST._IExpr _out315; DCOMP._IOwnership _out316; (this).FromOwned(r, expectedOwnership, out _out315, out _out316); r = _out315; resultingOwnership = _out316; - readIdents = _1797_recIdents; + readIdents = _1801_recIdents; } goto after_match39; } @@ -4668,27 +4689,27 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IPrimitive _h79 = _15.dtor_Primitive_a0; if (_h79.is_Char) { { - RAST._IType _1798_rhsType; + RAST._IType _1802_rhsType; RAST._IType _out317; - _out317 = (this).GenType(_1772_toTpe, DCOMP.GenTypeContext.InBinding()); - _1798_rhsType = _out317; - RAST._IExpr _1799_recursiveGen; - DCOMP._IOwnership _1800___v143; - Dafny.ISet> _1801_recIdents; + _out317 = (this).GenType(_1776_toTpe, DCOMP.GenTypeContext.InBinding()); + _1802_rhsType = _out317; + RAST._IExpr _1803_recursiveGen; + DCOMP._IOwnership _1804___v143; + Dafny.ISet> _1805_recIdents; RAST._IExpr _out318; DCOMP._IOwnership _out319; Dafny.ISet> _out320; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out318, out _out319, out _out320); - _1799_recursiveGen = _out318; - _1800___v143 = _out319; - _1801_recIdents = _out320; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::"), (this).DafnyChar), Dafny.Sequence.UnicodeFromString("(")), (((this).UnicodeChars) ? (Dafny.Sequence.UnicodeFromString("char::from_u32(.UnicodeFromString(".UnicodeFromString(" as ::dafny_runtime::NumCast>::from(")), (_1799_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").unwrap())")), (((this).UnicodeChars) ? (Dafny.Sequence.UnicodeFromString(".unwrap())")) : (Dafny.Sequence.UnicodeFromString(""))))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out318, out _out319, out _out320); + _1803_recursiveGen = _out318; + _1804___v143 = _out319; + _1805_recIdents = _out320; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::"), (this).DafnyChar), Dafny.Sequence.UnicodeFromString("(")), (((this).UnicodeChars) ? (Dafny.Sequence.UnicodeFromString("char::from_u32(.UnicodeFromString(".UnicodeFromString(" as ::dafny_runtime::NumCast>::from(")), (_1803_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").unwrap())")), (((this).UnicodeChars) ? (Dafny.Sequence.UnicodeFromString(".unwrap())")) : (Dafny.Sequence.UnicodeFromString(""))))); RAST._IExpr _out321; DCOMP._IOwnership _out322; (this).FromOwned(r, expectedOwnership, out _out321, out _out322); r = _out321; resultingOwnership = _out322; - readIdents = _1801_recIdents; + readIdents = _1805_recIdents; } goto after_match39; } @@ -4706,27 +4727,27 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IPrimitive _h711 = _16.dtor_Primitive_a0; if (_h711.is_Int) { { - RAST._IType _1802_rhsType; + RAST._IType _1806_rhsType; RAST._IType _out323; - _out323 = (this).GenType(_1771_fromTpe, DCOMP.GenTypeContext.InBinding()); - _1802_rhsType = _out323; - RAST._IExpr _1803_recursiveGen; - DCOMP._IOwnership _1804___v144; - Dafny.ISet> _1805_recIdents; + _out323 = (this).GenType(_1775_fromTpe, DCOMP.GenTypeContext.InBinding()); + _1806_rhsType = _out323; + RAST._IExpr _1807_recursiveGen; + DCOMP._IOwnership _1808___v144; + Dafny.ISet> _1809_recIdents; RAST._IExpr _out324; DCOMP._IOwnership _out325; Dafny.ISet> _out326; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out324, out _out325, out _out326); - _1803_recursiveGen = _out324; - _1804___v144 = _out325; - _1805_recIdents = _out326; - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1((_1803_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0"))); + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out324, out _out325, out _out326); + _1807_recursiveGen = _out324; + _1808___v144 = _out325; + _1809_recIdents = _out326; + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1((_1807_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("0"))); RAST._IExpr _out327; DCOMP._IOwnership _out328; (this).FromOwned(r, expectedOwnership, out _out327, out _out328); r = _out327; resultingOwnership = _out328; - readIdents = _1805_recIdents; + readIdents = _1809_recIdents; } goto after_match39; } @@ -4740,27 +4761,27 @@ public void GenExprConvert(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOM DAST._IType _17 = _source93.dtor__1; if (_17.is_Passthrough) { { - RAST._IExpr _1806_recursiveGen; - DCOMP._IOwnership _1807___v147; - Dafny.ISet> _1808_recIdents; + RAST._IExpr _1810_recursiveGen; + DCOMP._IOwnership _1811___v147; + Dafny.ISet> _1812_recIdents; RAST._IExpr _out329; DCOMP._IOwnership _out330; Dafny.ISet> _out331; - (this).GenExpr(_1770_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out329, out _out330, out _out331); - _1806_recursiveGen = _out329; - _1807___v147 = _out330; - _1808_recIdents = _out331; - RAST._IType _1809_toTpeGen; + (this).GenExpr(_1774_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out329, out _out330, out _out331); + _1810_recursiveGen = _out329; + _1811___v147 = _out330; + _1812_recIdents = _out331; + RAST._IType _1813_toTpeGen; RAST._IType _out332; - _out332 = (this).GenType(_1772_toTpe, DCOMP.GenTypeContext.InBinding()); - _1809_toTpeGen = _out332; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("(("), (_1806_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(") as ")), (_1809_toTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); + _out332 = (this).GenType(_1776_toTpe, DCOMP.GenTypeContext.InBinding()); + _1813_toTpeGen = _out332; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("(("), (_1810_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(") as ")), (_1813_toTpeGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")"))); RAST._IExpr _out333; DCOMP._IOwnership _out334; (this).FromOwned(r, expectedOwnership, out _out333, out _out334); r = _out333; resultingOwnership = _out334; - readIdents = _1808_recIdents; + readIdents = _1812_recIdents; } goto after_match39; } @@ -4787,26 +4808,26 @@ public void GenIdent(Dafny.ISequence rName, DCOMP._ISelfInfo selfIde resultingOwnership = DCOMP.Ownership.Default(); readIdents = Dafny.Set>.Empty; r = RAST.Expr.create_Identifier(rName); - Std.Wrappers._IOption _1810_tpe; - _1810_tpe = (env).GetType(rName); - Std.Wrappers._IOption _1811_placeboOpt; - if ((_1810_tpe).is_Some) { - _1811_placeboOpt = ((_1810_tpe).dtor_value).ExtractMaybePlacebo(); + Std.Wrappers._IOption _1814_tpe; + _1814_tpe = (env).GetType(rName); + Std.Wrappers._IOption _1815_placeboOpt; + if ((_1814_tpe).is_Some) { + _1815_placeboOpt = ((_1814_tpe).dtor_value).ExtractMaybePlacebo(); } else { - _1811_placeboOpt = Std.Wrappers.Option.create_None(); + _1815_placeboOpt = Std.Wrappers.Option.create_None(); } - bool _1812_currentlyBorrowed; - _1812_currentlyBorrowed = (env).IsBorrowed(rName); - bool _1813_noNeedOfClone; - _1813_noNeedOfClone = (env).CanReadWithoutClone(rName); - if ((_1811_placeboOpt).is_Some) { + bool _1816_currentlyBorrowed; + _1816_currentlyBorrowed = (env).IsBorrowed(rName); + bool _1817_noNeedOfClone; + _1817_noNeedOfClone = (env).CanReadWithoutClone(rName); + if ((_1815_placeboOpt).is_Some) { r = ((r).Sel(Dafny.Sequence.UnicodeFromString("read"))).Apply(Dafny.Sequence.FromElements()); - _1812_currentlyBorrowed = false; - _1813_noNeedOfClone = true; - _1810_tpe = Std.Wrappers.Option.create_Some((_1811_placeboOpt).dtor_value); + _1816_currentlyBorrowed = false; + _1817_noNeedOfClone = true; + _1814_tpe = Std.Wrappers.Option.create_Some((_1815_placeboOpt).dtor_value); } if (object.Equals(expectedOwnership, DCOMP.Ownership.create_OwnershipAutoBorrowed())) { - if (_1812_currentlyBorrowed) { + if (_1816_currentlyBorrowed) { resultingOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); } else { resultingOwnership = DCOMP.Ownership.create_OwnershipOwned(); @@ -4815,7 +4836,7 @@ public void GenIdent(Dafny.ISequence rName, DCOMP._ISelfInfo selfIde if ((rName).Equals(Dafny.Sequence.UnicodeFromString("self"))) { resultingOwnership = DCOMP.Ownership.create_OwnershipBorrowedMut(); } else { - if (((_1810_tpe).is_Some) && (((_1810_tpe).dtor_value).IsObjectOrPointer())) { + if (((_1814_tpe).is_Some) && (((_1814_tpe).dtor_value).IsObjectOrPointer())) { r = ((this).modify__macro).Apply1(r); } else { r = RAST.__default.BorrowMut(r); @@ -4823,40 +4844,40 @@ public void GenIdent(Dafny.ISequence rName, DCOMP._ISelfInfo selfIde } resultingOwnership = DCOMP.Ownership.create_OwnershipBorrowedMut(); } else if (object.Equals(expectedOwnership, DCOMP.Ownership.create_OwnershipOwned())) { - bool _1814_needObjectFromRef; - _1814_needObjectFromRef = ((((selfIdent).is_ThisTyped) && ((selfIdent).IsSelf())) && (((selfIdent).dtor_rSelfName).Equals(rName))) && (((System.Func)(() => { + bool _1818_needObjectFromRef; + _1818_needObjectFromRef = ((((selfIdent).is_ThisTyped) && ((selfIdent).IsSelf())) && (((selfIdent).dtor_rSelfName).Equals(rName))) && (((System.Func)(() => { DAST._IType _source94 = (selfIdent).dtor_dafnyType; { if (_source94.is_UserDefined) { DAST._IResolvedType resolved4 = _source94.dtor_resolved; - DAST._IResolvedTypeBase _1815_base = resolved4.dtor_kind; - Dafny.ISequence _1816_attributes = resolved4.dtor_attributes; - return ((_1815_base).is_Class) || ((_1815_base).is_Trait); + DAST._IResolvedTypeBase _1819_base = resolved4.dtor_kind; + Dafny.ISequence _1820_attributes = resolved4.dtor_attributes; + return ((_1819_base).is_Class) || ((_1819_base).is_Trait); } } { return false; } }))()); - if (_1814_needObjectFromRef) { + if (_1818_needObjectFromRef) { r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("Object"))).ApplyType(Dafny.Sequence.FromElements(RAST.__default.RawType(Dafny.Sequence.UnicodeFromString("_"))))).MSel(Dafny.Sequence.UnicodeFromString("from_ref"))).Apply(Dafny.Sequence.FromElements(r)); } else { - if (!(_1813_noNeedOfClone)) { + if (!(_1817_noNeedOfClone)) { r = (r).Clone(); } } resultingOwnership = DCOMP.Ownership.create_OwnershipOwned(); } else if (object.Equals(expectedOwnership, DCOMP.Ownership.create_OwnershipOwnedBox())) { - if (!(_1813_noNeedOfClone)) { + if (!(_1817_noNeedOfClone)) { r = (r).Clone(); } r = RAST.__default.BoxNew(r); resultingOwnership = DCOMP.Ownership.create_OwnershipOwnedBox(); - } else if (_1812_currentlyBorrowed) { + } else if (_1816_currentlyBorrowed) { resultingOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); } else { if (!(rName).Equals(Dafny.Sequence.UnicodeFromString("self"))) { - if (((_1810_tpe).is_Some) && (((_1810_tpe).dtor_value).IsPointer())) { + if (((_1814_tpe).is_Some) && (((_1814_tpe).dtor_value).IsPointer())) { r = ((this).read__macro).Apply1(r); } else { r = RAST.__default.Borrow(r); @@ -4868,9 +4889,9 @@ public void GenIdent(Dafny.ISequence rName, DCOMP._ISelfInfo selfIde return ; } public bool HasExternAttributeRenamingModule(Dafny.ISequence attributes) { - return Dafny.Helpers.Id, bool>>((_1817_attributes) => Dafny.Helpers.Quantifier((_1817_attributes).UniqueElements, false, (((_exists_var_1) => { - DAST._IAttribute _1818_attribute = (DAST._IAttribute)_exists_var_1; - return ((_1817_attributes).Contains(_1818_attribute)) && ((((_1818_attribute).dtor_name).Equals(Dafny.Sequence.UnicodeFromString("extern"))) && ((new BigInteger(((_1818_attribute).dtor_args).Count)) == (new BigInteger(2)))); + return Dafny.Helpers.Id, bool>>((_1821_attributes) => Dafny.Helpers.Quantifier((_1821_attributes).UniqueElements, false, (((_exists_var_1) => { + DAST._IAttribute _1822_attribute = (DAST._IAttribute)_exists_var_1; + return ((_1821_attributes).Contains(_1822_attribute)) && ((((_1822_attribute).dtor_name).Equals(Dafny.Sequence.UnicodeFromString("extern"))) && ((new BigInteger(((_1822_attribute).dtor_args).Count)) == (new BigInteger(2)))); }))))(attributes); } public void GenArgs(DCOMP._ISelfInfo selfIdent, DAST._ICallName name, Dafny.ISequence typeArgs, Dafny.ISequence args, DCOMP._IEnvironment env, out Dafny.ISequence argExprs, out Dafny.ISet> readIdents, out Dafny.ISequence typeExprs, out Std.Wrappers._IOption fullNameQualifier) @@ -4882,54 +4903,54 @@ public void GenArgs(DCOMP._ISelfInfo selfIdent, DAST._ICallName name, Dafny.ISeq argExprs = Dafny.Sequence.FromElements(); readIdents = Dafny.Set>.FromElements(); BigInteger _hi37 = new BigInteger((args).Count); - for (BigInteger _1819_i = BigInteger.Zero; _1819_i < _hi37; _1819_i++) { - DCOMP._IOwnership _1820_argOwnership; - _1820_argOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); - if (((name).is_CallName) && ((_1819_i) < (new BigInteger((((name).dtor_signature)).Count)))) { - RAST._IType _1821_tpe; + for (BigInteger _1823_i = BigInteger.Zero; _1823_i < _hi37; _1823_i++) { + DCOMP._IOwnership _1824_argOwnership; + _1824_argOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); + if (((name).is_CallName) && ((_1823_i) < (new BigInteger((((name).dtor_signature)).Count)))) { + RAST._IType _1825_tpe; RAST._IType _out338; - _out338 = (this).GenType(((((name).dtor_signature)).Select(_1819_i)).dtor_typ, DCOMP.GenTypeContext.@default()); - _1821_tpe = _out338; - if ((_1821_tpe).CanReadWithoutClone()) { - _1820_argOwnership = DCOMP.Ownership.create_OwnershipOwned(); + _out338 = (this).GenType(((((name).dtor_signature)).Select(_1823_i)).dtor_typ, DCOMP.GenTypeContext.@default()); + _1825_tpe = _out338; + if ((_1825_tpe).CanReadWithoutClone()) { + _1824_argOwnership = DCOMP.Ownership.create_OwnershipOwned(); } } - RAST._IExpr _1822_argExpr; - DCOMP._IOwnership _1823___v154; - Dafny.ISet> _1824_argIdents; + RAST._IExpr _1826_argExpr; + DCOMP._IOwnership _1827___v154; + Dafny.ISet> _1828_argIdents; RAST._IExpr _out339; DCOMP._IOwnership _out340; Dafny.ISet> _out341; - (this).GenExpr((args).Select(_1819_i), selfIdent, env, _1820_argOwnership, out _out339, out _out340, out _out341); - _1822_argExpr = _out339; - _1823___v154 = _out340; - _1824_argIdents = _out341; - argExprs = Dafny.Sequence.Concat(argExprs, Dafny.Sequence.FromElements(_1822_argExpr)); - readIdents = Dafny.Set>.Union(readIdents, _1824_argIdents); + (this).GenExpr((args).Select(_1823_i), selfIdent, env, _1824_argOwnership, out _out339, out _out340, out _out341); + _1826_argExpr = _out339; + _1827___v154 = _out340; + _1828_argIdents = _out341; + argExprs = Dafny.Sequence.Concat(argExprs, Dafny.Sequence.FromElements(_1826_argExpr)); + readIdents = Dafny.Set>.Union(readIdents, _1828_argIdents); } typeExprs = Dafny.Sequence.FromElements(); BigInteger _hi38 = new BigInteger((typeArgs).Count); - for (BigInteger _1825_typeI = BigInteger.Zero; _1825_typeI < _hi38; _1825_typeI++) { - RAST._IType _1826_typeExpr; + for (BigInteger _1829_typeI = BigInteger.Zero; _1829_typeI < _hi38; _1829_typeI++) { + RAST._IType _1830_typeExpr; RAST._IType _out342; - _out342 = (this).GenType((typeArgs).Select(_1825_typeI), DCOMP.GenTypeContext.@default()); - _1826_typeExpr = _out342; - typeExprs = Dafny.Sequence.Concat(typeExprs, Dafny.Sequence.FromElements(_1826_typeExpr)); + _out342 = (this).GenType((typeArgs).Select(_1829_typeI), DCOMP.GenTypeContext.@default()); + _1830_typeExpr = _out342; + typeExprs = Dafny.Sequence.Concat(typeExprs, Dafny.Sequence.FromElements(_1830_typeExpr)); } DAST._ICallName _source95 = name; { if (_source95.is_CallName) { - Dafny.ISequence _1827_nameIdent = _source95.dtor_name; + Dafny.ISequence _1831_nameIdent = _source95.dtor_name; Std.Wrappers._IOption onType1 = _source95.dtor_onType; if (onType1.is_Some) { DAST._IType value10 = onType1.dtor_value; if (value10.is_UserDefined) { - DAST._IResolvedType _1828_resolvedType = value10.dtor_resolved; - if ((((_1828_resolvedType).dtor_kind).is_Trait) || (Dafny.Helpers.Id, bool>>((_1829_resolvedType, _1830_nameIdent) => Dafny.Helpers.Quantifier>(((_1829_resolvedType).dtor_properMethods).UniqueElements, true, (((_forall_var_8) => { - Dafny.ISequence _1831_m = (Dafny.ISequence)_forall_var_8; - return !(((_1829_resolvedType).dtor_properMethods).Contains(_1831_m)) || (!object.Equals((_1831_m), _1830_nameIdent)); - }))))(_1828_resolvedType, _1827_nameIdent))) { - fullNameQualifier = Std.Wrappers.Option.create_Some(Std.Wrappers.Option.GetOr(DCOMP.__default.TraitTypeContainingMethod(_1828_resolvedType, (_1827_nameIdent)), _1828_resolvedType)); + DAST._IResolvedType _1832_resolvedType = value10.dtor_resolved; + if ((((_1832_resolvedType).dtor_kind).is_Trait) || (Dafny.Helpers.Id, bool>>((_1833_resolvedType, _1834_nameIdent) => Dafny.Helpers.Quantifier>(((_1833_resolvedType).dtor_properMethods).UniqueElements, true, (((_forall_var_8) => { + Dafny.ISequence _1835_m = (Dafny.ISequence)_forall_var_8; + return !(((_1833_resolvedType).dtor_properMethods).Contains(_1835_m)) || (!object.Equals((_1835_m), _1834_nameIdent)); + }))))(_1832_resolvedType, _1831_nameIdent))) { + fullNameQualifier = Std.Wrappers.Option.create_Some(Std.Wrappers.Option.GetOr(DCOMP.__default.TraitTypeContainingMethod(_1832_resolvedType, (_1831_nameIdent)), _1832_resolvedType)); } else { fullNameQualifier = Std.Wrappers.Option.create_None(); } @@ -4966,12 +4987,12 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Ident) { - Dafny.ISequence _1832_name = _source96.dtor_name; + Dafny.ISequence _1836_name = _source96.dtor_name; { RAST._IExpr _out346; DCOMP._IOwnership _out347; Dafny.ISet> _out348; - (this).GenIdent(DCOMP.__default.escapeName(_1832_name), selfIdent, env, expectedOwnership, out _out346, out _out347, out _out348); + (this).GenIdent(DCOMP.__default.escapeName(_1836_name), selfIdent, env, expectedOwnership, out _out346, out _out347, out _out348); r = _out346; resultingOwnership = _out347; readIdents = _out348; @@ -4981,24 +5002,24 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Companion) { - Dafny.ISequence> _1833_path = _source96.dtor_Companion_a0; - Dafny.ISequence _1834_typeArgs = _source96.dtor_typeArgs; + Dafny.ISequence> _1837_path = _source96.dtor_Companion_a0; + Dafny.ISequence _1838_typeArgs = _source96.dtor_typeArgs; { RAST._IExpr _out349; - _out349 = DCOMP.COMP.GenPathExpr(_1833_path); + _out349 = DCOMP.COMP.GenPathExpr(_1837_path); r = _out349; - if ((new BigInteger((_1834_typeArgs).Count)).Sign == 1) { - Dafny.ISequence _1835_typeExprs; - _1835_typeExprs = Dafny.Sequence.FromElements(); - BigInteger _hi39 = new BigInteger((_1834_typeArgs).Count); - for (BigInteger _1836_i = BigInteger.Zero; _1836_i < _hi39; _1836_i++) { - RAST._IType _1837_typeExpr; + if ((new BigInteger((_1838_typeArgs).Count)).Sign == 1) { + Dafny.ISequence _1839_typeExprs; + _1839_typeExprs = Dafny.Sequence.FromElements(); + BigInteger _hi39 = new BigInteger((_1838_typeArgs).Count); + for (BigInteger _1840_i = BigInteger.Zero; _1840_i < _hi39; _1840_i++) { + RAST._IType _1841_typeExpr; RAST._IType _out350; - _out350 = (this).GenType((_1834_typeArgs).Select(_1836_i), DCOMP.GenTypeContext.@default()); - _1837_typeExpr = _out350; - _1835_typeExprs = Dafny.Sequence.Concat(_1835_typeExprs, Dafny.Sequence.FromElements(_1837_typeExpr)); + _out350 = (this).GenType((_1838_typeArgs).Select(_1840_i), DCOMP.GenTypeContext.@default()); + _1841_typeExpr = _out350; + _1839_typeExprs = Dafny.Sequence.Concat(_1839_typeExprs, Dafny.Sequence.FromElements(_1841_typeExpr)); } - r = (r).ApplyType(_1835_typeExprs); + r = (r).ApplyType(_1839_typeExprs); } if (object.Equals(expectedOwnership, DCOMP.Ownership.create_OwnershipBorrowed())) { resultingOwnership = DCOMP.Ownership.create_OwnershipBorrowed(); @@ -5019,16 +5040,16 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_InitializationValue) { - DAST._IType _1838_typ = _source96.dtor_typ; + DAST._IType _1842_typ = _source96.dtor_typ; { - RAST._IType _1839_typExpr; + RAST._IType _1843_typExpr; RAST._IType _out353; - _out353 = (this).GenType(_1838_typ, DCOMP.GenTypeContext.@default()); - _1839_typExpr = _out353; - if ((_1839_typExpr).IsObjectOrPointer()) { - r = (_1839_typExpr).ToNullExpr(); + _out353 = (this).GenType(_1842_typ, DCOMP.GenTypeContext.@default()); + _1843_typExpr = _out353; + if ((_1843_typExpr).IsObjectOrPointer()) { + r = (_1843_typExpr).ToNullExpr(); } else { - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("<"), (_1839_typExpr)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" as std::default::Default>::default()"))); + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("<"), (_1843_typExpr)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(" as std::default::Default>::default()"))); } RAST._IExpr _out354; DCOMP._IOwnership _out355; @@ -5043,30 +5064,30 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Tuple) { - Dafny.ISequence _1840_values = _source96.dtor_Tuple_a0; + Dafny.ISequence _1844_values = _source96.dtor_Tuple_a0; { - Dafny.ISequence _1841_exprs; - _1841_exprs = Dafny.Sequence.FromElements(); + Dafny.ISequence _1845_exprs; + _1845_exprs = Dafny.Sequence.FromElements(); readIdents = Dafny.Set>.FromElements(); - BigInteger _hi40 = new BigInteger((_1840_values).Count); - for (BigInteger _1842_i = BigInteger.Zero; _1842_i < _hi40; _1842_i++) { - RAST._IExpr _1843_recursiveGen; - DCOMP._IOwnership _1844___v159; - Dafny.ISet> _1845_recIdents; + BigInteger _hi40 = new BigInteger((_1844_values).Count); + for (BigInteger _1846_i = BigInteger.Zero; _1846_i < _hi40; _1846_i++) { + RAST._IExpr _1847_recursiveGen; + DCOMP._IOwnership _1848___v159; + Dafny.ISet> _1849_recIdents; RAST._IExpr _out356; DCOMP._IOwnership _out357; Dafny.ISet> _out358; - (this).GenExpr((_1840_values).Select(_1842_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out356, out _out357, out _out358); - _1843_recursiveGen = _out356; - _1844___v159 = _out357; - _1845_recIdents = _out358; - _1841_exprs = Dafny.Sequence.Concat(_1841_exprs, Dafny.Sequence.FromElements(_1843_recursiveGen)); - readIdents = Dafny.Set>.Union(readIdents, _1845_recIdents); + (this).GenExpr((_1844_values).Select(_1846_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out356, out _out357, out _out358); + _1847_recursiveGen = _out356; + _1848___v159 = _out357; + _1849_recIdents = _out358; + _1845_exprs = Dafny.Sequence.Concat(_1845_exprs, Dafny.Sequence.FromElements(_1847_recursiveGen)); + readIdents = Dafny.Set>.Union(readIdents, _1849_recIdents); } - if ((new BigInteger((_1840_values).Count)) <= (RAST.__default.MAX__TUPLE__SIZE)) { - r = RAST.Expr.create_Tuple(_1841_exprs); + if ((new BigInteger((_1844_values).Count)) <= (RAST.__default.MAX__TUPLE__SIZE)) { + r = RAST.Expr.create_Tuple(_1845_exprs); } else { - r = RAST.__default.SystemTuple(_1841_exprs); + r = RAST.__default.SystemTuple(_1845_exprs); } RAST._IExpr _out359; DCOMP._IOwnership _out360; @@ -5080,46 +5101,46 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_New) { - Dafny.ISequence> _1846_path = _source96.dtor_path; - Dafny.ISequence _1847_typeArgs = _source96.dtor_typeArgs; - Dafny.ISequence _1848_args = _source96.dtor_args; + Dafny.ISequence> _1850_path = _source96.dtor_path; + Dafny.ISequence _1851_typeArgs = _source96.dtor_typeArgs; + Dafny.ISequence _1852_args = _source96.dtor_args; { RAST._IExpr _out361; - _out361 = DCOMP.COMP.GenPathExpr(_1846_path); + _out361 = DCOMP.COMP.GenPathExpr(_1850_path); r = _out361; - if ((new BigInteger((_1847_typeArgs).Count)).Sign == 1) { - Dafny.ISequence _1849_typeExprs; - _1849_typeExprs = Dafny.Sequence.FromElements(); - BigInteger _hi41 = new BigInteger((_1847_typeArgs).Count); - for (BigInteger _1850_i = BigInteger.Zero; _1850_i < _hi41; _1850_i++) { - RAST._IType _1851_typeExpr; + if ((new BigInteger((_1851_typeArgs).Count)).Sign == 1) { + Dafny.ISequence _1853_typeExprs; + _1853_typeExprs = Dafny.Sequence.FromElements(); + BigInteger _hi41 = new BigInteger((_1851_typeArgs).Count); + for (BigInteger _1854_i = BigInteger.Zero; _1854_i < _hi41; _1854_i++) { + RAST._IType _1855_typeExpr; RAST._IType _out362; - _out362 = (this).GenType((_1847_typeArgs).Select(_1850_i), DCOMP.GenTypeContext.@default()); - _1851_typeExpr = _out362; - _1849_typeExprs = Dafny.Sequence.Concat(_1849_typeExprs, Dafny.Sequence.FromElements(_1851_typeExpr)); + _out362 = (this).GenType((_1851_typeArgs).Select(_1854_i), DCOMP.GenTypeContext.@default()); + _1855_typeExpr = _out362; + _1853_typeExprs = Dafny.Sequence.Concat(_1853_typeExprs, Dafny.Sequence.FromElements(_1855_typeExpr)); } - r = (r).ApplyType(_1849_typeExprs); + r = (r).ApplyType(_1853_typeExprs); } r = (r).MSel((this).allocate__fn); readIdents = Dafny.Set>.FromElements(); - Dafny.ISequence _1852_arguments; - _1852_arguments = Dafny.Sequence.FromElements(); - BigInteger _hi42 = new BigInteger((_1848_args).Count); - for (BigInteger _1853_i = BigInteger.Zero; _1853_i < _hi42; _1853_i++) { - RAST._IExpr _1854_recursiveGen; - DCOMP._IOwnership _1855___v160; - Dafny.ISet> _1856_recIdents; + Dafny.ISequence _1856_arguments; + _1856_arguments = Dafny.Sequence.FromElements(); + BigInteger _hi42 = new BigInteger((_1852_args).Count); + for (BigInteger _1857_i = BigInteger.Zero; _1857_i < _hi42; _1857_i++) { + RAST._IExpr _1858_recursiveGen; + DCOMP._IOwnership _1859___v160; + Dafny.ISet> _1860_recIdents; RAST._IExpr _out363; DCOMP._IOwnership _out364; Dafny.ISet> _out365; - (this).GenExpr((_1848_args).Select(_1853_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out363, out _out364, out _out365); - _1854_recursiveGen = _out363; - _1855___v160 = _out364; - _1856_recIdents = _out365; - _1852_arguments = Dafny.Sequence.Concat(_1852_arguments, Dafny.Sequence.FromElements(_1854_recursiveGen)); - readIdents = Dafny.Set>.Union(readIdents, _1856_recIdents); + (this).GenExpr((_1852_args).Select(_1857_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out363, out _out364, out _out365); + _1858_recursiveGen = _out363; + _1859___v160 = _out364; + _1860_recIdents = _out365; + _1856_arguments = Dafny.Sequence.Concat(_1856_arguments, Dafny.Sequence.FromElements(_1858_recursiveGen)); + readIdents = Dafny.Set>.Union(readIdents, _1860_recIdents); } - r = (r).Apply(_1852_arguments); + r = (r).Apply(_1856_arguments); RAST._IExpr _out366; DCOMP._IOwnership _out367; (this).FromOwned(r, expectedOwnership, out _out366, out _out367); @@ -5132,47 +5153,47 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_NewUninitArray) { - Dafny.ISequence _1857_dims = _source96.dtor_dims; - DAST._IType _1858_typ = _source96.dtor_typ; + Dafny.ISequence _1861_dims = _source96.dtor_dims; + DAST._IType _1862_typ = _source96.dtor_typ; { - if ((new BigInteger(16)) < (new BigInteger((_1857_dims).Count))) { - Dafny.ISequence _1859_msg; - _1859_msg = Dafny.Sequence.UnicodeFromString("Unsupported: Creation of arrays of more than 16 dimensions"); + if ((new BigInteger(16)) < (new BigInteger((_1861_dims).Count))) { + Dafny.ISequence _1863_msg; + _1863_msg = Dafny.Sequence.UnicodeFromString("Unsupported: Creation of arrays of more than 16 dimensions"); if ((this.error).is_None) { - (this).error = Std.Wrappers.Option>.create_Some(_1859_msg); + (this).error = Std.Wrappers.Option>.create_Some(_1863_msg); } - r = RAST.Expr.create_RawExpr(_1859_msg); + r = RAST.Expr.create_RawExpr(_1863_msg); readIdents = Dafny.Set>.FromElements(); } else { r = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - RAST._IType _1860_typeGen; + RAST._IType _1864_typeGen; RAST._IType _out368; - _out368 = (this).GenType(_1858_typ, DCOMP.GenTypeContext.@default()); - _1860_typeGen = _out368; + _out368 = (this).GenType(_1862_typ, DCOMP.GenTypeContext.@default()); + _1864_typeGen = _out368; readIdents = Dafny.Set>.FromElements(); - Dafny.ISequence _1861_dimExprs; - _1861_dimExprs = Dafny.Sequence.FromElements(); - BigInteger _hi43 = new BigInteger((_1857_dims).Count); - for (BigInteger _1862_i = BigInteger.Zero; _1862_i < _hi43; _1862_i++) { - RAST._IExpr _1863_recursiveGen; - DCOMP._IOwnership _1864___v161; - Dafny.ISet> _1865_recIdents; + Dafny.ISequence _1865_dimExprs; + _1865_dimExprs = Dafny.Sequence.FromElements(); + BigInteger _hi43 = new BigInteger((_1861_dims).Count); + for (BigInteger _1866_i = BigInteger.Zero; _1866_i < _hi43; _1866_i++) { + RAST._IExpr _1867_recursiveGen; + DCOMP._IOwnership _1868___v161; + Dafny.ISet> _1869_recIdents; RAST._IExpr _out369; DCOMP._IOwnership _out370; Dafny.ISet> _out371; - (this).GenExpr((_1857_dims).Select(_1862_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out369, out _out370, out _out371); - _1863_recursiveGen = _out369; - _1864___v161 = _out370; - _1865_recIdents = _out371; - _1861_dimExprs = Dafny.Sequence.Concat(_1861_dimExprs, Dafny.Sequence.FromElements(RAST.__default.IntoUsize(_1863_recursiveGen))); - readIdents = Dafny.Set>.Union(readIdents, _1865_recIdents); + (this).GenExpr((_1861_dims).Select(_1866_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out369, out _out370, out _out371); + _1867_recursiveGen = _out369; + _1868___v161 = _out370; + _1869_recIdents = _out371; + _1865_dimExprs = Dafny.Sequence.Concat(_1865_dimExprs, Dafny.Sequence.FromElements(RAST.__default.IntoUsize(_1867_recursiveGen))); + readIdents = Dafny.Set>.Union(readIdents, _1869_recIdents); } - if ((new BigInteger((_1857_dims).Count)) > (BigInteger.One)) { - Dafny.ISequence _1866_class__name; - _1866_class__name = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array"), Std.Strings.__default.OfNat(new BigInteger((_1857_dims).Count))); - r = ((((RAST.__default.dafny__runtime).MSel(_1866_class__name)).ApplyType(Dafny.Sequence.FromElements(_1860_typeGen))).MSel((this).placebos__usize)).Apply(_1861_dimExprs); + if ((new BigInteger((_1861_dims).Count)) > (BigInteger.One)) { + Dafny.ISequence _1870_class__name; + _1870_class__name = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array"), Std.Strings.__default.OfNat(new BigInteger((_1861_dims).Count))); + r = ((((RAST.__default.dafny__runtime).MSel(_1870_class__name)).ApplyType(Dafny.Sequence.FromElements(_1864_typeGen))).MSel((this).placebos__usize)).Apply(_1865_dimExprs); } else { - r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("array"))).MSel((this).placebos__usize)).ApplyType(Dafny.Sequence.FromElements(_1860_typeGen))).Apply(_1861_dimExprs); + r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("array"))).MSel((this).placebos__usize)).ApplyType(Dafny.Sequence.FromElements(_1864_typeGen))).Apply(_1865_dimExprs); } } RAST._IExpr _out372; @@ -5186,20 +5207,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_ArrayIndexToInt) { - DAST._IExpression _1867_underlying = _source96.dtor_value; + DAST._IExpression _1871_underlying = _source96.dtor_value; { - RAST._IExpr _1868_recursiveGen; - DCOMP._IOwnership _1869___v162; - Dafny.ISet> _1870_recIdents; + RAST._IExpr _1872_recursiveGen; + DCOMP._IOwnership _1873___v162; + Dafny.ISet> _1874_recIdents; RAST._IExpr _out374; DCOMP._IOwnership _out375; Dafny.ISet> _out376; - (this).GenExpr(_1867_underlying, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out374, out _out375, out _out376); - _1868_recursiveGen = _out374; - _1869___v162 = _out375; - _1870_recIdents = _out376; - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(_1868_recursiveGen); - readIdents = _1870_recIdents; + (this).GenExpr(_1871_underlying, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out374, out _out375, out _out376); + _1872_recursiveGen = _out374; + _1873___v162 = _out375; + _1874_recIdents = _out376; + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(_1872_recursiveGen); + readIdents = _1874_recIdents; RAST._IExpr _out377; DCOMP._IOwnership _out378; (this).FromOwned(r, expectedOwnership, out _out377, out _out378); @@ -5211,39 +5232,39 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_FinalizeNewArray) { - DAST._IExpression _1871_underlying = _source96.dtor_value; - DAST._IType _1872_typ = _source96.dtor_typ; + DAST._IExpression _1875_underlying = _source96.dtor_value; + DAST._IType _1876_typ = _source96.dtor_typ; { - RAST._IType _1873_tpe; + RAST._IType _1877_tpe; RAST._IType _out379; - _out379 = (this).GenType(_1872_typ, DCOMP.GenTypeContext.@default()); - _1873_tpe = _out379; - RAST._IExpr _1874_recursiveGen; - DCOMP._IOwnership _1875___v163; - Dafny.ISet> _1876_recIdents; + _out379 = (this).GenType(_1876_typ, DCOMP.GenTypeContext.@default()); + _1877_tpe = _out379; + RAST._IExpr _1878_recursiveGen; + DCOMP._IOwnership _1879___v163; + Dafny.ISet> _1880_recIdents; RAST._IExpr _out380; DCOMP._IOwnership _out381; Dafny.ISet> _out382; - (this).GenExpr(_1871_underlying, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out380, out _out381, out _out382); - _1874_recursiveGen = _out380; - _1875___v163 = _out381; - _1876_recIdents = _out382; - readIdents = _1876_recIdents; - if ((_1873_tpe).IsObjectOrPointer()) { - RAST._IType _1877_t; - _1877_t = (_1873_tpe).ObjectOrPointerUnderlying(); - if ((_1877_t).is_Array) { - r = (((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("array"))).MSel((this).array__construct)).Apply1(_1874_recursiveGen); - } else if ((_1877_t).IsMultiArray()) { - Dafny.ISequence _1878_c; - _1878_c = (_1877_t).MultiArrayClass(); - r = (((RAST.__default.dafny__runtime).MSel(_1878_c)).MSel((this).array__construct)).Apply1(_1874_recursiveGen); + (this).GenExpr(_1875_underlying, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out380, out _out381, out _out382); + _1878_recursiveGen = _out380; + _1879___v163 = _out381; + _1880_recIdents = _out382; + readIdents = _1880_recIdents; + if ((_1877_tpe).IsObjectOrPointer()) { + RAST._IType _1881_t; + _1881_t = (_1877_tpe).ObjectOrPointerUnderlying(); + if ((_1881_t).is_Array) { + r = (((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("array"))).MSel((this).array__construct)).Apply1(_1878_recursiveGen); + } else if ((_1881_t).IsMultiArray()) { + Dafny.ISequence _1882_c; + _1882_c = (_1881_t).MultiArrayClass(); + r = (((RAST.__default.dafny__runtime).MSel(_1882_c)).MSel((this).array__construct)).Apply1(_1878_recursiveGen); } else { - (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Finalize New Array with a pointer or object type to something that is not an array or a multi array: "), (_1873_tpe)._ToString(DCOMP.__default.IND))); + (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Finalize New Array with a pointer or object type to something that is not an array or a multi array: "), (_1877_tpe)._ToString(DCOMP.__default.IND))); r = RAST.Expr.create_RawExpr((this.error).dtor_value); } } else { - (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Finalize New Array with a type that is not a pointer or an object: "), (_1873_tpe)._ToString(DCOMP.__default.IND))); + (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Finalize New Array with a type that is not a pointer or an object: "), (_1877_tpe)._ToString(DCOMP.__default.IND))); r = RAST.Expr.create_RawExpr((this.error).dtor_value); } RAST._IExpr _out383; @@ -5257,84 +5278,84 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_DatatypeValue) { - DAST._IResolvedType _1879_datatypeType = _source96.dtor_datatypeType; - Dafny.ISequence _1880_typeArgs = _source96.dtor_typeArgs; - Dafny.ISequence _1881_variant = _source96.dtor_variant; - bool _1882_isCo = _source96.dtor_isCo; - Dafny.ISequence<_System._ITuple2, DAST._IExpression>> _1883_values = _source96.dtor_contents; + DAST._IResolvedType _1883_datatypeType = _source96.dtor_datatypeType; + Dafny.ISequence _1884_typeArgs = _source96.dtor_typeArgs; + Dafny.ISequence _1885_variant = _source96.dtor_variant; + bool _1886_isCo = _source96.dtor_isCo; + Dafny.ISequence<_System._ITuple2, DAST._IExpression>> _1887_values = _source96.dtor_contents; { RAST._IExpr _out385; - _out385 = DCOMP.COMP.GenPathExpr((_1879_datatypeType).dtor_path); + _out385 = DCOMP.COMP.GenPathExpr((_1883_datatypeType).dtor_path); r = _out385; - Dafny.ISequence _1884_genTypeArgs; - _1884_genTypeArgs = Dafny.Sequence.FromElements(); - BigInteger _hi44 = new BigInteger((_1880_typeArgs).Count); - for (BigInteger _1885_i = BigInteger.Zero; _1885_i < _hi44; _1885_i++) { - RAST._IType _1886_typeExpr; + Dafny.ISequence _1888_genTypeArgs; + _1888_genTypeArgs = Dafny.Sequence.FromElements(); + BigInteger _hi44 = new BigInteger((_1884_typeArgs).Count); + for (BigInteger _1889_i = BigInteger.Zero; _1889_i < _hi44; _1889_i++) { + RAST._IType _1890_typeExpr; RAST._IType _out386; - _out386 = (this).GenType((_1880_typeArgs).Select(_1885_i), DCOMP.GenTypeContext.@default()); - _1886_typeExpr = _out386; - _1884_genTypeArgs = Dafny.Sequence.Concat(_1884_genTypeArgs, Dafny.Sequence.FromElements(_1886_typeExpr)); + _out386 = (this).GenType((_1884_typeArgs).Select(_1889_i), DCOMP.GenTypeContext.@default()); + _1890_typeExpr = _out386; + _1888_genTypeArgs = Dafny.Sequence.Concat(_1888_genTypeArgs, Dafny.Sequence.FromElements(_1890_typeExpr)); } - if ((new BigInteger((_1880_typeArgs).Count)).Sign == 1) { - r = (r).ApplyType(_1884_genTypeArgs); + if ((new BigInteger((_1884_typeArgs).Count)).Sign == 1) { + r = (r).ApplyType(_1888_genTypeArgs); } - r = (r).MSel(DCOMP.__default.escapeName(_1881_variant)); + r = (r).MSel(DCOMP.__default.escapeName(_1885_variant)); readIdents = Dafny.Set>.FromElements(); - Dafny.ISequence _1887_assignments; - _1887_assignments = Dafny.Sequence.FromElements(); - BigInteger _hi45 = new BigInteger((_1883_values).Count); - for (BigInteger _1888_i = BigInteger.Zero; _1888_i < _hi45; _1888_i++) { - _System._ITuple2, DAST._IExpression> _let_tmp_rhs67 = (_1883_values).Select(_1888_i); - Dafny.ISequence _1889_name = _let_tmp_rhs67.dtor__0; - DAST._IExpression _1890_value = _let_tmp_rhs67.dtor__1; - if (_1882_isCo) { - RAST._IExpr _1891_recursiveGen; - DCOMP._IOwnership _1892___v164; - Dafny.ISet> _1893_recIdents; + Dafny.ISequence _1891_assignments; + _1891_assignments = Dafny.Sequence.FromElements(); + BigInteger _hi45 = new BigInteger((_1887_values).Count); + for (BigInteger _1892_i = BigInteger.Zero; _1892_i < _hi45; _1892_i++) { + _System._ITuple2, DAST._IExpression> _let_tmp_rhs67 = (_1887_values).Select(_1892_i); + Dafny.ISequence _1893_name = _let_tmp_rhs67.dtor__0; + DAST._IExpression _1894_value = _let_tmp_rhs67.dtor__1; + if (_1886_isCo) { + RAST._IExpr _1895_recursiveGen; + DCOMP._IOwnership _1896___v164; + Dafny.ISet> _1897_recIdents; RAST._IExpr _out387; DCOMP._IOwnership _out388; Dafny.ISet> _out389; - (this).GenExpr(_1890_value, selfIdent, DCOMP.Environment.Empty(), DCOMP.Ownership.create_OwnershipOwned(), out _out387, out _out388, out _out389); - _1891_recursiveGen = _out387; - _1892___v164 = _out388; - _1893_recIdents = _out389; - readIdents = Dafny.Set>.Union(readIdents, _1893_recIdents); - Dafny.ISequence _1894_allReadCloned; - _1894_allReadCloned = Dafny.Sequence.UnicodeFromString(""); - while (!(_1893_recIdents).Equals(Dafny.Set>.FromElements())) { - Dafny.ISequence _1895_next; - foreach (Dafny.ISequence _assign_such_that_2 in (_1893_recIdents).Elements) { - _1895_next = (Dafny.ISequence)_assign_such_that_2; - if ((_1893_recIdents).Contains(_1895_next)) { + (this).GenExpr(_1894_value, selfIdent, DCOMP.Environment.Empty(), DCOMP.Ownership.create_OwnershipOwned(), out _out387, out _out388, out _out389); + _1895_recursiveGen = _out387; + _1896___v164 = _out388; + _1897_recIdents = _out389; + readIdents = Dafny.Set>.Union(readIdents, _1897_recIdents); + Dafny.ISequence _1898_allReadCloned; + _1898_allReadCloned = Dafny.Sequence.UnicodeFromString(""); + while (!(_1897_recIdents).Equals(Dafny.Set>.FromElements())) { + Dafny.ISequence _1899_next; + foreach (Dafny.ISequence _assign_such_that_2 in (_1897_recIdents).Elements) { + _1899_next = (Dafny.ISequence)_assign_such_that_2; + if ((_1897_recIdents).Contains(_1899_next)) { goto after__ASSIGN_SUCH_THAT_2; } } - throw new System.Exception("assign-such-that search produced no value (line 4402)"); + throw new System.Exception("assign-such-that search produced no value (line 4437)"); after__ASSIGN_SUCH_THAT_2: ; - _1894_allReadCloned = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1894_allReadCloned, Dafny.Sequence.UnicodeFromString("let ")), _1895_next), Dafny.Sequence.UnicodeFromString(" = ")), _1895_next), Dafny.Sequence.UnicodeFromString(".clone();\n")); - _1893_recIdents = Dafny.Set>.Difference(_1893_recIdents, Dafny.Set>.FromElements(_1895_next)); + _1898_allReadCloned = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_1898_allReadCloned, Dafny.Sequence.UnicodeFromString("let ")), _1899_next), Dafny.Sequence.UnicodeFromString(" = ")), _1899_next), Dafny.Sequence.UnicodeFromString(".clone();\n")); + _1897_recIdents = Dafny.Set>.Difference(_1897_recIdents, Dafny.Set>.FromElements(_1899_next)); } - Dafny.ISequence _1896_wasAssigned; - _1896_wasAssigned = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::LazyFieldWrapper(::dafny_runtime::Lazy::new(::std::boxed::Box::new({\n"), _1894_allReadCloned), Dafny.Sequence.UnicodeFromString("move || (")), (_1891_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")})))")); - _1887_assignments = Dafny.Sequence.Concat(_1887_assignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeIdent(_1889_name), RAST.Expr.create_RawExpr(_1896_wasAssigned)))); + Dafny.ISequence _1900_wasAssigned; + _1900_wasAssigned = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::dafny_runtime::LazyFieldWrapper(::dafny_runtime::Lazy::new(::std::boxed::Box::new({\n"), _1898_allReadCloned), Dafny.Sequence.UnicodeFromString("move || (")), (_1895_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(")})))")); + _1891_assignments = Dafny.Sequence.Concat(_1891_assignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeIdent(_1893_name), RAST.Expr.create_RawExpr(_1900_wasAssigned)))); } else { - RAST._IExpr _1897_recursiveGen; - DCOMP._IOwnership _1898___v165; - Dafny.ISet> _1899_recIdents; + RAST._IExpr _1901_recursiveGen; + DCOMP._IOwnership _1902___v165; + Dafny.ISet> _1903_recIdents; RAST._IExpr _out390; DCOMP._IOwnership _out391; Dafny.ISet> _out392; - (this).GenExpr(_1890_value, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out390, out _out391, out _out392); - _1897_recursiveGen = _out390; - _1898___v165 = _out391; - _1899_recIdents = _out392; - _1887_assignments = Dafny.Sequence.Concat(_1887_assignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeIdent(_1889_name), _1897_recursiveGen))); - readIdents = Dafny.Set>.Union(readIdents, _1899_recIdents); + (this).GenExpr(_1894_value, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out390, out _out391, out _out392); + _1901_recursiveGen = _out390; + _1902___v165 = _out391; + _1903_recIdents = _out392; + _1891_assignments = Dafny.Sequence.Concat(_1891_assignments, Dafny.Sequence.FromElements(RAST.AssignIdentifier.create(DCOMP.__default.escapeIdent(_1893_name), _1901_recursiveGen))); + readIdents = Dafny.Set>.Union(readIdents, _1903_recIdents); } } - r = RAST.Expr.create_StructBuild(r, _1887_assignments); - if ((this).IsRcWrapped((_1879_datatypeType).dtor_attributes)) { + r = RAST.Expr.create_StructBuild(r, _1891_assignments); + if ((this).IsRcWrapped((_1883_datatypeType).dtor_attributes)) { r = RAST.__default.RcNew(r); } RAST._IExpr _out393; @@ -5363,31 +5384,31 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SeqConstruct) { - DAST._IExpression _1900_length = _source96.dtor_length; - DAST._IExpression _1901_expr = _source96.dtor_elem; + DAST._IExpression _1904_length = _source96.dtor_length; + DAST._IExpression _1905_expr = _source96.dtor_elem; { - RAST._IExpr _1902_recursiveGen; - DCOMP._IOwnership _1903___v169; - Dafny.ISet> _1904_recIdents; + RAST._IExpr _1906_recursiveGen; + DCOMP._IOwnership _1907___v169; + Dafny.ISet> _1908_recIdents; RAST._IExpr _out398; DCOMP._IOwnership _out399; Dafny.ISet> _out400; - (this).GenExpr(_1901_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out398, out _out399, out _out400); - _1902_recursiveGen = _out398; - _1903___v169 = _out399; - _1904_recIdents = _out400; - RAST._IExpr _1905_lengthGen; - DCOMP._IOwnership _1906___v170; - Dafny.ISet> _1907_lengthIdents; + (this).GenExpr(_1905_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out398, out _out399, out _out400); + _1906_recursiveGen = _out398; + _1907___v169 = _out399; + _1908_recIdents = _out400; + RAST._IExpr _1909_lengthGen; + DCOMP._IOwnership _1910___v170; + Dafny.ISet> _1911_lengthIdents; RAST._IExpr _out401; DCOMP._IOwnership _out402; Dafny.ISet> _out403; - (this).GenExpr(_1900_length, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out401, out _out402, out _out403); - _1905_lengthGen = _out401; - _1906___v170 = _out402; - _1907_lengthIdents = _out403; - r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("{\nlet _initializer = "), (_1902_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(";\n::dafny_runtime::integer_range(::dafny_runtime::Zero::zero(), ")), (_1905_lengthGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").map(|i| _initializer(&i)).collect::<::dafny_runtime::Sequence<_>>()\n}"))); - readIdents = Dafny.Set>.Union(_1904_recIdents, _1907_lengthIdents); + (this).GenExpr(_1904_length, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out401, out _out402, out _out403); + _1909_lengthGen = _out401; + _1910___v170 = _out402; + _1911_lengthIdents = _out403; + r = RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("{\nlet _initializer = "), (_1906_recursiveGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(";\n::dafny_runtime::integer_range(::dafny_runtime::Zero::zero(), ")), (_1909_lengthGen)._ToString(DCOMP.__default.IND)), Dafny.Sequence.UnicodeFromString(").map(|i| _initializer(&i)).collect::<::dafny_runtime::Sequence<_>>()\n}"))); + readIdents = Dafny.Set>.Union(_1908_recIdents, _1911_lengthIdents); RAST._IExpr _out404; DCOMP._IOwnership _out405; (this).FromOwned(r, expectedOwnership, out _out404, out _out405); @@ -5400,36 +5421,36 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SeqValue) { - Dafny.ISequence _1908_exprs = _source96.dtor_elements; - DAST._IType _1909_typ = _source96.dtor_typ; + Dafny.ISequence _1912_exprs = _source96.dtor_elements; + DAST._IType _1913_typ = _source96.dtor_typ; { readIdents = Dafny.Set>.FromElements(); - RAST._IType _1910_genTpe; + RAST._IType _1914_genTpe; RAST._IType _out406; - _out406 = (this).GenType(_1909_typ, DCOMP.GenTypeContext.@default()); - _1910_genTpe = _out406; - BigInteger _1911_i; - _1911_i = BigInteger.Zero; - Dafny.ISequence _1912_args; - _1912_args = Dafny.Sequence.FromElements(); - while ((_1911_i) < (new BigInteger((_1908_exprs).Count))) { - RAST._IExpr _1913_recursiveGen; - DCOMP._IOwnership _1914___v171; - Dafny.ISet> _1915_recIdents; + _out406 = (this).GenType(_1913_typ, DCOMP.GenTypeContext.@default()); + _1914_genTpe = _out406; + BigInteger _1915_i; + _1915_i = BigInteger.Zero; + Dafny.ISequence _1916_args; + _1916_args = Dafny.Sequence.FromElements(); + while ((_1915_i) < (new BigInteger((_1912_exprs).Count))) { + RAST._IExpr _1917_recursiveGen; + DCOMP._IOwnership _1918___v171; + Dafny.ISet> _1919_recIdents; RAST._IExpr _out407; DCOMP._IOwnership _out408; Dafny.ISet> _out409; - (this).GenExpr((_1908_exprs).Select(_1911_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out407, out _out408, out _out409); - _1913_recursiveGen = _out407; - _1914___v171 = _out408; - _1915_recIdents = _out409; - readIdents = Dafny.Set>.Union(readIdents, _1915_recIdents); - _1912_args = Dafny.Sequence.Concat(_1912_args, Dafny.Sequence.FromElements(_1913_recursiveGen)); - _1911_i = (_1911_i) + (BigInteger.One); + (this).GenExpr((_1912_exprs).Select(_1915_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out407, out _out408, out _out409); + _1917_recursiveGen = _out407; + _1918___v171 = _out408; + _1919_recIdents = _out409; + readIdents = Dafny.Set>.Union(readIdents, _1919_recIdents); + _1916_args = Dafny.Sequence.Concat(_1916_args, Dafny.Sequence.FromElements(_1917_recursiveGen)); + _1915_i = (_1915_i) + (BigInteger.One); } - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("seq!"))).Apply(_1912_args); - if ((new BigInteger((_1912_args).Count)).Sign == 0) { - r = RAST.Expr.create_TypeAscription(r, ((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Sequence"))).Apply1(_1910_genTpe)); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("seq!"))).Apply(_1916_args); + if ((new BigInteger((_1916_args).Count)).Sign == 0) { + r = RAST.Expr.create_TypeAscription(r, ((RAST.__default.dafny__runtime__type).MSel(Dafny.Sequence.UnicodeFromString("Sequence"))).Apply1(_1914_genTpe)); } RAST._IExpr _out410; DCOMP._IOwnership _out411; @@ -5443,29 +5464,29 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SetValue) { - Dafny.ISequence _1916_exprs = _source96.dtor_elements; + Dafny.ISequence _1920_exprs = _source96.dtor_elements; { - Dafny.ISequence _1917_generatedValues; - _1917_generatedValues = Dafny.Sequence.FromElements(); + Dafny.ISequence _1921_generatedValues; + _1921_generatedValues = Dafny.Sequence.FromElements(); readIdents = Dafny.Set>.FromElements(); - BigInteger _1918_i; - _1918_i = BigInteger.Zero; - while ((_1918_i) < (new BigInteger((_1916_exprs).Count))) { - RAST._IExpr _1919_recursiveGen; - DCOMP._IOwnership _1920___v172; - Dafny.ISet> _1921_recIdents; + BigInteger _1922_i; + _1922_i = BigInteger.Zero; + while ((_1922_i) < (new BigInteger((_1920_exprs).Count))) { + RAST._IExpr _1923_recursiveGen; + DCOMP._IOwnership _1924___v172; + Dafny.ISet> _1925_recIdents; RAST._IExpr _out412; DCOMP._IOwnership _out413; Dafny.ISet> _out414; - (this).GenExpr((_1916_exprs).Select(_1918_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out412, out _out413, out _out414); - _1919_recursiveGen = _out412; - _1920___v172 = _out413; - _1921_recIdents = _out414; - _1917_generatedValues = Dafny.Sequence.Concat(_1917_generatedValues, Dafny.Sequence.FromElements(_1919_recursiveGen)); - readIdents = Dafny.Set>.Union(readIdents, _1921_recIdents); - _1918_i = (_1918_i) + (BigInteger.One); + (this).GenExpr((_1920_exprs).Select(_1922_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out412, out _out413, out _out414); + _1923_recursiveGen = _out412; + _1924___v172 = _out413; + _1925_recIdents = _out414; + _1921_generatedValues = Dafny.Sequence.Concat(_1921_generatedValues, Dafny.Sequence.FromElements(_1923_recursiveGen)); + readIdents = Dafny.Set>.Union(readIdents, _1925_recIdents); + _1922_i = (_1922_i) + (BigInteger.One); } - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("set!"))).Apply(_1917_generatedValues); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("set!"))).Apply(_1921_generatedValues); RAST._IExpr _out415; DCOMP._IOwnership _out416; (this).FromOwned(r, expectedOwnership, out _out415, out _out416); @@ -5478,29 +5499,29 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MultisetValue) { - Dafny.ISequence _1922_exprs = _source96.dtor_elements; + Dafny.ISequence _1926_exprs = _source96.dtor_elements; { - Dafny.ISequence _1923_generatedValues; - _1923_generatedValues = Dafny.Sequence.FromElements(); + Dafny.ISequence _1927_generatedValues; + _1927_generatedValues = Dafny.Sequence.FromElements(); readIdents = Dafny.Set>.FromElements(); - BigInteger _1924_i; - _1924_i = BigInteger.Zero; - while ((_1924_i) < (new BigInteger((_1922_exprs).Count))) { - RAST._IExpr _1925_recursiveGen; - DCOMP._IOwnership _1926___v173; - Dafny.ISet> _1927_recIdents; + BigInteger _1928_i; + _1928_i = BigInteger.Zero; + while ((_1928_i) < (new BigInteger((_1926_exprs).Count))) { + RAST._IExpr _1929_recursiveGen; + DCOMP._IOwnership _1930___v173; + Dafny.ISet> _1931_recIdents; RAST._IExpr _out417; DCOMP._IOwnership _out418; Dafny.ISet> _out419; - (this).GenExpr((_1922_exprs).Select(_1924_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out417, out _out418, out _out419); - _1925_recursiveGen = _out417; - _1926___v173 = _out418; - _1927_recIdents = _out419; - _1923_generatedValues = Dafny.Sequence.Concat(_1923_generatedValues, Dafny.Sequence.FromElements(_1925_recursiveGen)); - readIdents = Dafny.Set>.Union(readIdents, _1927_recIdents); - _1924_i = (_1924_i) + (BigInteger.One); + (this).GenExpr((_1926_exprs).Select(_1928_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out417, out _out418, out _out419); + _1929_recursiveGen = _out417; + _1930___v173 = _out418; + _1931_recIdents = _out419; + _1927_generatedValues = Dafny.Sequence.Concat(_1927_generatedValues, Dafny.Sequence.FromElements(_1929_recursiveGen)); + readIdents = Dafny.Set>.Union(readIdents, _1931_recIdents); + _1928_i = (_1928_i) + (BigInteger.One); } - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("multiset!"))).Apply(_1923_generatedValues); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("multiset!"))).Apply(_1927_generatedValues); RAST._IExpr _out420; DCOMP._IOwnership _out421; (this).FromOwned(r, expectedOwnership, out _out420, out _out421); @@ -5513,20 +5534,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_ToMultiset) { - DAST._IExpression _1928_expr = _source96.dtor_ToMultiset_a0; + DAST._IExpression _1932_expr = _source96.dtor_ToMultiset_a0; { - RAST._IExpr _1929_recursiveGen; - DCOMP._IOwnership _1930___v174; - Dafny.ISet> _1931_recIdents; + RAST._IExpr _1933_recursiveGen; + DCOMP._IOwnership _1934___v174; + Dafny.ISet> _1935_recIdents; RAST._IExpr _out422; DCOMP._IOwnership _out423; Dafny.ISet> _out424; - (this).GenExpr(_1928_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out422, out _out423, out _out424); - _1929_recursiveGen = _out422; - _1930___v174 = _out423; - _1931_recIdents = _out424; - r = ((_1929_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("as_dafny_multiset"))).Apply(Dafny.Sequence.FromElements()); - readIdents = _1931_recIdents; + (this).GenExpr(_1932_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out422, out _out423, out _out424); + _1933_recursiveGen = _out422; + _1934___v174 = _out423; + _1935_recIdents = _out424; + r = ((_1933_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("as_dafny_multiset"))).Apply(Dafny.Sequence.FromElements()); + readIdents = _1935_recIdents; RAST._IExpr _out425; DCOMP._IOwnership _out426; (this).FromOwned(r, expectedOwnership, out _out425, out _out426); @@ -5539,50 +5560,50 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapValue) { - Dafny.ISequence<_System._ITuple2> _1932_mapElems = _source96.dtor_mapElems; + Dafny.ISequence<_System._ITuple2> _1936_mapElems = _source96.dtor_mapElems; { - Dafny.ISequence<_System._ITuple2> _1933_generatedValues; - _1933_generatedValues = Dafny.Sequence<_System._ITuple2>.FromElements(); + Dafny.ISequence<_System._ITuple2> _1937_generatedValues; + _1937_generatedValues = Dafny.Sequence<_System._ITuple2>.FromElements(); readIdents = Dafny.Set>.FromElements(); - BigInteger _1934_i; - _1934_i = BigInteger.Zero; - while ((_1934_i) < (new BigInteger((_1932_mapElems).Count))) { - RAST._IExpr _1935_recursiveGenKey; - DCOMP._IOwnership _1936___v175; - Dafny.ISet> _1937_recIdentsKey; + BigInteger _1938_i; + _1938_i = BigInteger.Zero; + while ((_1938_i) < (new BigInteger((_1936_mapElems).Count))) { + RAST._IExpr _1939_recursiveGenKey; + DCOMP._IOwnership _1940___v175; + Dafny.ISet> _1941_recIdentsKey; RAST._IExpr _out427; DCOMP._IOwnership _out428; Dafny.ISet> _out429; - (this).GenExpr(((_1932_mapElems).Select(_1934_i)).dtor__0, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out427, out _out428, out _out429); - _1935_recursiveGenKey = _out427; - _1936___v175 = _out428; - _1937_recIdentsKey = _out429; - RAST._IExpr _1938_recursiveGenValue; - DCOMP._IOwnership _1939___v176; - Dafny.ISet> _1940_recIdentsValue; + (this).GenExpr(((_1936_mapElems).Select(_1938_i)).dtor__0, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out427, out _out428, out _out429); + _1939_recursiveGenKey = _out427; + _1940___v175 = _out428; + _1941_recIdentsKey = _out429; + RAST._IExpr _1942_recursiveGenValue; + DCOMP._IOwnership _1943___v176; + Dafny.ISet> _1944_recIdentsValue; RAST._IExpr _out430; DCOMP._IOwnership _out431; Dafny.ISet> _out432; - (this).GenExpr(((_1932_mapElems).Select(_1934_i)).dtor__1, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out430, out _out431, out _out432); - _1938_recursiveGenValue = _out430; - _1939___v176 = _out431; - _1940_recIdentsValue = _out432; - _1933_generatedValues = Dafny.Sequence<_System._ITuple2>.Concat(_1933_generatedValues, Dafny.Sequence<_System._ITuple2>.FromElements(_System.Tuple2.create(_1935_recursiveGenKey, _1938_recursiveGenValue))); - readIdents = Dafny.Set>.Union(Dafny.Set>.Union(readIdents, _1937_recIdentsKey), _1940_recIdentsValue); - _1934_i = (_1934_i) + (BigInteger.One); + (this).GenExpr(((_1936_mapElems).Select(_1938_i)).dtor__1, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out430, out _out431, out _out432); + _1942_recursiveGenValue = _out430; + _1943___v176 = _out431; + _1944_recIdentsValue = _out432; + _1937_generatedValues = Dafny.Sequence<_System._ITuple2>.Concat(_1937_generatedValues, Dafny.Sequence<_System._ITuple2>.FromElements(_System.Tuple2.create(_1939_recursiveGenKey, _1942_recursiveGenValue))); + readIdents = Dafny.Set>.Union(Dafny.Set>.Union(readIdents, _1941_recIdentsKey), _1944_recIdentsValue); + _1938_i = (_1938_i) + (BigInteger.One); } - _1934_i = BigInteger.Zero; - Dafny.ISequence _1941_arguments; - _1941_arguments = Dafny.Sequence.FromElements(); - while ((_1934_i) < (new BigInteger((_1933_generatedValues).Count))) { - RAST._IExpr _1942_genKey; - _1942_genKey = ((_1933_generatedValues).Select(_1934_i)).dtor__0; - RAST._IExpr _1943_genValue; - _1943_genValue = ((_1933_generatedValues).Select(_1934_i)).dtor__1; - _1941_arguments = Dafny.Sequence.Concat(_1941_arguments, Dafny.Sequence.FromElements(RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=>"), _1942_genKey, _1943_genValue, DAST.Format.BinaryOpFormat.create_NoFormat()))); - _1934_i = (_1934_i) + (BigInteger.One); + _1938_i = BigInteger.Zero; + Dafny.ISequence _1945_arguments; + _1945_arguments = Dafny.Sequence.FromElements(); + while ((_1938_i) < (new BigInteger((_1937_generatedValues).Count))) { + RAST._IExpr _1946_genKey; + _1946_genKey = ((_1937_generatedValues).Select(_1938_i)).dtor__0; + RAST._IExpr _1947_genValue; + _1947_genValue = ((_1937_generatedValues).Select(_1938_i)).dtor__1; + _1945_arguments = Dafny.Sequence.Concat(_1945_arguments, Dafny.Sequence.FromElements(RAST.Expr.create_BinaryOp(Dafny.Sequence.UnicodeFromString("=>"), _1946_genKey, _1947_genValue, DAST.Format.BinaryOpFormat.create_NoFormat()))); + _1938_i = (_1938_i) + (BigInteger.One); } - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("map!"))).Apply(_1941_arguments); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("map!"))).Apply(_1945_arguments); RAST._IExpr _out433; DCOMP._IOwnership _out434; (this).FromOwned(r, expectedOwnership, out _out433, out _out434); @@ -5595,47 +5616,47 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SeqUpdate) { - DAST._IExpression _1944_expr = _source96.dtor_expr; - DAST._IExpression _1945_index = _source96.dtor_indexExpr; - DAST._IExpression _1946_value = _source96.dtor_value; + DAST._IExpression _1948_expr = _source96.dtor_expr; + DAST._IExpression _1949_index = _source96.dtor_indexExpr; + DAST._IExpression _1950_value = _source96.dtor_value; { - RAST._IExpr _1947_exprR; - DCOMP._IOwnership _1948___v177; - Dafny.ISet> _1949_exprIdents; + RAST._IExpr _1951_exprR; + DCOMP._IOwnership _1952___v177; + Dafny.ISet> _1953_exprIdents; RAST._IExpr _out435; DCOMP._IOwnership _out436; Dafny.ISet> _out437; - (this).GenExpr(_1944_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out435, out _out436, out _out437); - _1947_exprR = _out435; - _1948___v177 = _out436; - _1949_exprIdents = _out437; - RAST._IExpr _1950_indexR; - DCOMP._IOwnership _1951_indexOwnership; - Dafny.ISet> _1952_indexIdents; + (this).GenExpr(_1948_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out435, out _out436, out _out437); + _1951_exprR = _out435; + _1952___v177 = _out436; + _1953_exprIdents = _out437; + RAST._IExpr _1954_indexR; + DCOMP._IOwnership _1955_indexOwnership; + Dafny.ISet> _1956_indexIdents; RAST._IExpr _out438; DCOMP._IOwnership _out439; Dafny.ISet> _out440; - (this).GenExpr(_1945_index, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out438, out _out439, out _out440); - _1950_indexR = _out438; - _1951_indexOwnership = _out439; - _1952_indexIdents = _out440; - RAST._IExpr _1953_valueR; - DCOMP._IOwnership _1954_valueOwnership; - Dafny.ISet> _1955_valueIdents; + (this).GenExpr(_1949_index, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out438, out _out439, out _out440); + _1954_indexR = _out438; + _1955_indexOwnership = _out439; + _1956_indexIdents = _out440; + RAST._IExpr _1957_valueR; + DCOMP._IOwnership _1958_valueOwnership; + Dafny.ISet> _1959_valueIdents; RAST._IExpr _out441; DCOMP._IOwnership _out442; Dafny.ISet> _out443; - (this).GenExpr(_1946_value, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out441, out _out442, out _out443); - _1953_valueR = _out441; - _1954_valueOwnership = _out442; - _1955_valueIdents = _out443; - r = ((_1947_exprR).Sel(Dafny.Sequence.UnicodeFromString("update_index"))).Apply(Dafny.Sequence.FromElements(_1950_indexR, _1953_valueR)); + (this).GenExpr(_1950_value, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out441, out _out442, out _out443); + _1957_valueR = _out441; + _1958_valueOwnership = _out442; + _1959_valueIdents = _out443; + r = ((_1951_exprR).Sel(Dafny.Sequence.UnicodeFromString("update_index"))).Apply(Dafny.Sequence.FromElements(_1954_indexR, _1957_valueR)); RAST._IExpr _out444; DCOMP._IOwnership _out445; (this).FromOwned(r, expectedOwnership, out _out444, out _out445); r = _out444; resultingOwnership = _out445; - readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1949_exprIdents, _1952_indexIdents), _1955_valueIdents); + readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1953_exprIdents, _1956_indexIdents), _1959_valueIdents); return ; } goto after_match41; @@ -5643,47 +5664,47 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapUpdate) { - DAST._IExpression _1956_expr = _source96.dtor_expr; - DAST._IExpression _1957_index = _source96.dtor_indexExpr; - DAST._IExpression _1958_value = _source96.dtor_value; + DAST._IExpression _1960_expr = _source96.dtor_expr; + DAST._IExpression _1961_index = _source96.dtor_indexExpr; + DAST._IExpression _1962_value = _source96.dtor_value; { - RAST._IExpr _1959_exprR; - DCOMP._IOwnership _1960___v178; - Dafny.ISet> _1961_exprIdents; + RAST._IExpr _1963_exprR; + DCOMP._IOwnership _1964___v178; + Dafny.ISet> _1965_exprIdents; RAST._IExpr _out446; DCOMP._IOwnership _out447; Dafny.ISet> _out448; - (this).GenExpr(_1956_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out446, out _out447, out _out448); - _1959_exprR = _out446; - _1960___v178 = _out447; - _1961_exprIdents = _out448; - RAST._IExpr _1962_indexR; - DCOMP._IOwnership _1963_indexOwnership; - Dafny.ISet> _1964_indexIdents; + (this).GenExpr(_1960_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out446, out _out447, out _out448); + _1963_exprR = _out446; + _1964___v178 = _out447; + _1965_exprIdents = _out448; + RAST._IExpr _1966_indexR; + DCOMP._IOwnership _1967_indexOwnership; + Dafny.ISet> _1968_indexIdents; RAST._IExpr _out449; DCOMP._IOwnership _out450; Dafny.ISet> _out451; - (this).GenExpr(_1957_index, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out449, out _out450, out _out451); - _1962_indexR = _out449; - _1963_indexOwnership = _out450; - _1964_indexIdents = _out451; - RAST._IExpr _1965_valueR; - DCOMP._IOwnership _1966_valueOwnership; - Dafny.ISet> _1967_valueIdents; + (this).GenExpr(_1961_index, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out449, out _out450, out _out451); + _1966_indexR = _out449; + _1967_indexOwnership = _out450; + _1968_indexIdents = _out451; + RAST._IExpr _1969_valueR; + DCOMP._IOwnership _1970_valueOwnership; + Dafny.ISet> _1971_valueIdents; RAST._IExpr _out452; DCOMP._IOwnership _out453; Dafny.ISet> _out454; - (this).GenExpr(_1958_value, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out452, out _out453, out _out454); - _1965_valueR = _out452; - _1966_valueOwnership = _out453; - _1967_valueIdents = _out454; - r = ((_1959_exprR).Sel(Dafny.Sequence.UnicodeFromString("update_index"))).Apply(Dafny.Sequence.FromElements(_1962_indexR, _1965_valueR)); + (this).GenExpr(_1962_value, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out452, out _out453, out _out454); + _1969_valueR = _out452; + _1970_valueOwnership = _out453; + _1971_valueIdents = _out454; + r = ((_1963_exprR).Sel(Dafny.Sequence.UnicodeFromString("update_index"))).Apply(Dafny.Sequence.FromElements(_1966_indexR, _1969_valueR)); RAST._IExpr _out455; DCOMP._IOwnership _out456; (this).FromOwned(r, expectedOwnership, out _out455, out _out456); r = _out455; resultingOwnership = _out456; - readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1961_exprIdents, _1964_indexIdents), _1967_valueIdents); + readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1965_exprIdents, _1968_indexIdents), _1971_valueIdents); return ; } goto after_match41; @@ -5695,13 +5716,13 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv DCOMP._ISelfInfo _source97 = selfIdent; { if (_source97.is_ThisTyped) { - Dafny.ISequence _1968_id = _source97.dtor_rSelfName; - DAST._IType _1969_dafnyType = _source97.dtor_dafnyType; + Dafny.ISequence _1972_id = _source97.dtor_rSelfName; + DAST._IType _1973_dafnyType = _source97.dtor_dafnyType; { RAST._IExpr _out457; DCOMP._IOwnership _out458; Dafny.ISet> _out459; - (this).GenIdent(_1968_id, selfIdent, env, expectedOwnership, out _out457, out _out458, out _out459); + (this).GenIdent(_1972_id, selfIdent, env, expectedOwnership, out _out457, out _out458, out _out459); r = _out457; resultingOwnership = _out458; readIdents = _out459; @@ -5710,7 +5731,7 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } } { - DCOMP._ISelfInfo _1970_None = _source97; + DCOMP._ISelfInfo _1974_None = _source97; { r = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("panic!(\"this outside of a method\")")); RAST._IExpr _out460; @@ -5729,47 +5750,47 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Ite) { - DAST._IExpression _1971_cond = _source96.dtor_cond; - DAST._IExpression _1972_t = _source96.dtor_thn; - DAST._IExpression _1973_f = _source96.dtor_els; + DAST._IExpression _1975_cond = _source96.dtor_cond; + DAST._IExpression _1976_t = _source96.dtor_thn; + DAST._IExpression _1977_f = _source96.dtor_els; { - RAST._IExpr _1974_cond; - DCOMP._IOwnership _1975___v179; - Dafny.ISet> _1976_recIdentsCond; + RAST._IExpr _1978_cond; + DCOMP._IOwnership _1979___v179; + Dafny.ISet> _1980_recIdentsCond; RAST._IExpr _out462; DCOMP._IOwnership _out463; Dafny.ISet> _out464; - (this).GenExpr(_1971_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out462, out _out463, out _out464); - _1974_cond = _out462; - _1975___v179 = _out463; - _1976_recIdentsCond = _out464; - RAST._IExpr _1977_fExpr; - DCOMP._IOwnership _1978_fOwned; - Dafny.ISet> _1979_recIdentsF; + (this).GenExpr(_1975_cond, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out462, out _out463, out _out464); + _1978_cond = _out462; + _1979___v179 = _out463; + _1980_recIdentsCond = _out464; + RAST._IExpr _1981_fExpr; + DCOMP._IOwnership _1982_fOwned; + Dafny.ISet> _1983_recIdentsF; RAST._IExpr _out465; DCOMP._IOwnership _out466; Dafny.ISet> _out467; - (this).GenExpr(_1973_f, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out465, out _out466, out _out467); - _1977_fExpr = _out465; - _1978_fOwned = _out466; - _1979_recIdentsF = _out467; - RAST._IExpr _1980_tExpr; - DCOMP._IOwnership _1981___v180; - Dafny.ISet> _1982_recIdentsT; + (this).GenExpr(_1977_f, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out465, out _out466, out _out467); + _1981_fExpr = _out465; + _1982_fOwned = _out466; + _1983_recIdentsF = _out467; + RAST._IExpr _1984_tExpr; + DCOMP._IOwnership _1985___v180; + Dafny.ISet> _1986_recIdentsT; RAST._IExpr _out468; DCOMP._IOwnership _out469; Dafny.ISet> _out470; - (this).GenExpr(_1972_t, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out468, out _out469, out _out470); - _1980_tExpr = _out468; - _1981___v180 = _out469; - _1982_recIdentsT = _out470; - r = RAST.Expr.create_IfExpr(_1974_cond, _1980_tExpr, _1977_fExpr); + (this).GenExpr(_1976_t, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out468, out _out469, out _out470); + _1984_tExpr = _out468; + _1985___v180 = _out469; + _1986_recIdentsT = _out470; + r = RAST.Expr.create_IfExpr(_1978_cond, _1984_tExpr, _1981_fExpr); RAST._IExpr _out471; DCOMP._IOwnership _out472; (this).FromOwnership(r, DCOMP.Ownership.create_OwnershipOwned(), expectedOwnership, out _out471, out _out472); r = _out471; resultingOwnership = _out472; - readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1976_recIdentsCond, _1982_recIdentsT), _1979_recIdentsF); + readIdents = Dafny.Set>.Union(Dafny.Set>.Union(_1980_recIdentsCond, _1986_recIdentsT), _1983_recIdentsF); return ; } goto after_match41; @@ -5779,26 +5800,26 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv if (_source96.is_UnOp) { DAST._IUnaryOp unOp0 = _source96.dtor_unOp; if (unOp0.is_Not) { - DAST._IExpression _1983_e = _source96.dtor_expr; - DAST.Format._IUnaryOpFormat _1984_format = _source96.dtor_format1; + DAST._IExpression _1987_e = _source96.dtor_expr; + DAST.Format._IUnaryOpFormat _1988_format = _source96.dtor_format1; { - RAST._IExpr _1985_recursiveGen; - DCOMP._IOwnership _1986___v181; - Dafny.ISet> _1987_recIdents; + RAST._IExpr _1989_recursiveGen; + DCOMP._IOwnership _1990___v181; + Dafny.ISet> _1991_recIdents; RAST._IExpr _out473; DCOMP._IOwnership _out474; Dafny.ISet> _out475; - (this).GenExpr(_1983_e, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out473, out _out474, out _out475); - _1985_recursiveGen = _out473; - _1986___v181 = _out474; - _1987_recIdents = _out475; - r = RAST.Expr.create_UnaryOp(Dafny.Sequence.UnicodeFromString("!"), _1985_recursiveGen, _1984_format); + (this).GenExpr(_1987_e, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out473, out _out474, out _out475); + _1989_recursiveGen = _out473; + _1990___v181 = _out474; + _1991_recIdents = _out475; + r = RAST.Expr.create_UnaryOp(Dafny.Sequence.UnicodeFromString("!"), _1989_recursiveGen, _1988_format); RAST._IExpr _out476; DCOMP._IOwnership _out477; (this).FromOwned(r, expectedOwnership, out _out476, out _out477); r = _out476; resultingOwnership = _out477; - readIdents = _1987_recIdents; + readIdents = _1991_recIdents; return ; } goto after_match41; @@ -5809,26 +5830,26 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv if (_source96.is_UnOp) { DAST._IUnaryOp unOp1 = _source96.dtor_unOp; if (unOp1.is_BitwiseNot) { - DAST._IExpression _1988_e = _source96.dtor_expr; - DAST.Format._IUnaryOpFormat _1989_format = _source96.dtor_format1; + DAST._IExpression _1992_e = _source96.dtor_expr; + DAST.Format._IUnaryOpFormat _1993_format = _source96.dtor_format1; { - RAST._IExpr _1990_recursiveGen; - DCOMP._IOwnership _1991___v182; - Dafny.ISet> _1992_recIdents; + RAST._IExpr _1994_recursiveGen; + DCOMP._IOwnership _1995___v182; + Dafny.ISet> _1996_recIdents; RAST._IExpr _out478; DCOMP._IOwnership _out479; Dafny.ISet> _out480; - (this).GenExpr(_1988_e, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out478, out _out479, out _out480); - _1990_recursiveGen = _out478; - _1991___v182 = _out479; - _1992_recIdents = _out480; - r = RAST.Expr.create_UnaryOp(Dafny.Sequence.UnicodeFromString("~"), _1990_recursiveGen, _1989_format); + (this).GenExpr(_1992_e, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out478, out _out479, out _out480); + _1994_recursiveGen = _out478; + _1995___v182 = _out479; + _1996_recIdents = _out480; + r = RAST.Expr.create_UnaryOp(Dafny.Sequence.UnicodeFromString("~"), _1994_recursiveGen, _1993_format); RAST._IExpr _out481; DCOMP._IOwnership _out482; (this).FromOwned(r, expectedOwnership, out _out481, out _out482); r = _out481; resultingOwnership = _out482; - readIdents = _1992_recIdents; + readIdents = _1996_recIdents; return ; } goto after_match41; @@ -5839,26 +5860,26 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv if (_source96.is_UnOp) { DAST._IUnaryOp unOp2 = _source96.dtor_unOp; if (unOp2.is_Cardinality) { - DAST._IExpression _1993_e = _source96.dtor_expr; - DAST.Format._IUnaryOpFormat _1994_format = _source96.dtor_format1; + DAST._IExpression _1997_e = _source96.dtor_expr; + DAST.Format._IUnaryOpFormat _1998_format = _source96.dtor_format1; { - RAST._IExpr _1995_recursiveGen; - DCOMP._IOwnership _1996_recOwned; - Dafny.ISet> _1997_recIdents; + RAST._IExpr _1999_recursiveGen; + DCOMP._IOwnership _2000_recOwned; + Dafny.ISet> _2001_recIdents; RAST._IExpr _out483; DCOMP._IOwnership _out484; Dafny.ISet> _out485; - (this).GenExpr(_1993_e, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out483, out _out484, out _out485); - _1995_recursiveGen = _out483; - _1996_recOwned = _out484; - _1997_recIdents = _out485; - r = ((_1995_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("cardinality"))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(_1997_e, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out483, out _out484, out _out485); + _1999_recursiveGen = _out483; + _2000_recOwned = _out484; + _2001_recIdents = _out485; + r = ((_1999_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("cardinality"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out486; DCOMP._IOwnership _out487; (this).FromOwned(r, expectedOwnership, out _out486, out _out487); r = _out486; resultingOwnership = _out487; - readIdents = _1997_recIdents; + readIdents = _2001_recIdents; return ; } goto after_match41; @@ -5879,43 +5900,43 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_ArrayLen) { - DAST._IExpression _1998_expr = _source96.dtor_expr; - DAST._IType _1999_exprType = _source96.dtor_exprType; - BigInteger _2000_dim = _source96.dtor_dim; - bool _2001_native = _source96.dtor_native; + DAST._IExpression _2002_expr = _source96.dtor_expr; + DAST._IType _2003_exprType = _source96.dtor_exprType; + BigInteger _2004_dim = _source96.dtor_dim; + bool _2005_native = _source96.dtor_native; { - RAST._IExpr _2002_recursiveGen; - DCOMP._IOwnership _2003___v187; - Dafny.ISet> _2004_recIdents; + RAST._IExpr _2006_recursiveGen; + DCOMP._IOwnership _2007___v187; + Dafny.ISet> _2008_recIdents; RAST._IExpr _out491; DCOMP._IOwnership _out492; Dafny.ISet> _out493; - (this).GenExpr(_1998_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out491, out _out492, out _out493); - _2002_recursiveGen = _out491; - _2003___v187 = _out492; - _2004_recIdents = _out493; - RAST._IType _2005_arrayType; + (this).GenExpr(_2002_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out491, out _out492, out _out493); + _2006_recursiveGen = _out491; + _2007___v187 = _out492; + _2008_recIdents = _out493; + RAST._IType _2009_arrayType; RAST._IType _out494; - _out494 = (this).GenType(_1999_exprType, DCOMP.GenTypeContext.@default()); - _2005_arrayType = _out494; - if (!((_2005_arrayType).IsObjectOrPointer())) { - Dafny.ISequence _2006_msg; - _2006_msg = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array length of something not an array but "), (_2005_arrayType)._ToString(DCOMP.__default.IND)); - (this).error = Std.Wrappers.Option>.create_Some(_2006_msg); - r = RAST.Expr.create_RawExpr(_2006_msg); + _out494 = (this).GenType(_2003_exprType, DCOMP.GenTypeContext.@default()); + _2009_arrayType = _out494; + if (!((_2009_arrayType).IsObjectOrPointer())) { + Dafny.ISequence _2010_msg; + _2010_msg = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("Array length of something not an array but "), (_2009_arrayType)._ToString(DCOMP.__default.IND)); + (this).error = Std.Wrappers.Option>.create_Some(_2010_msg); + r = RAST.Expr.create_RawExpr(_2010_msg); } else { - RAST._IType _2007_underlying; - _2007_underlying = (_2005_arrayType).ObjectOrPointerUnderlying(); - if (((_2000_dim).Sign == 0) && ((_2007_underlying).is_Array)) { - r = ((((this).read__macro).Apply1(_2002_recursiveGen)).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()); + RAST._IType _2011_underlying; + _2011_underlying = (_2009_arrayType).ObjectOrPointerUnderlying(); + if (((_2004_dim).Sign == 0) && ((_2011_underlying).is_Array)) { + r = ((((this).read__macro).Apply1(_2006_recursiveGen)).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()); } else { - if ((_2000_dim).Sign == 0) { - r = (((((this).read__macro).Apply1(_2002_recursiveGen)).Sel(Dafny.Sequence.UnicodeFromString("data"))).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()); + if ((_2004_dim).Sign == 0) { + r = (((((this).read__macro).Apply1(_2006_recursiveGen)).Sel(Dafny.Sequence.UnicodeFromString("data"))).Sel(Dafny.Sequence.UnicodeFromString("len"))).Apply(Dafny.Sequence.FromElements()); } else { - r = ((((this).read__macro).Apply1(_2002_recursiveGen)).Sel(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("length"), Std.Strings.__default.OfNat(_2000_dim)), Dafny.Sequence.UnicodeFromString("_usize")))).Apply(Dafny.Sequence.FromElements()); + r = ((((this).read__macro).Apply1(_2006_recursiveGen)).Sel(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("length"), Std.Strings.__default.OfNat(_2004_dim)), Dafny.Sequence.UnicodeFromString("_usize")))).Apply(Dafny.Sequence.FromElements()); } } - if (!(_2001_native)) { + if (!(_2005_native)) { r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("int!"))).Apply1(r); } } @@ -5924,7 +5945,7 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv (this).FromOwned(r, expectedOwnership, out _out495, out _out496); r = _out495; resultingOwnership = _out496; - readIdents = _2004_recIdents; + readIdents = _2008_recIdents; return ; } goto after_match41; @@ -5932,20 +5953,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapKeys) { - DAST._IExpression _2008_expr = _source96.dtor_expr; + DAST._IExpression _2012_expr = _source96.dtor_expr; { - RAST._IExpr _2009_recursiveGen; - DCOMP._IOwnership _2010___v188; - Dafny.ISet> _2011_recIdents; + RAST._IExpr _2013_recursiveGen; + DCOMP._IOwnership _2014___v188; + Dafny.ISet> _2015_recIdents; RAST._IExpr _out497; DCOMP._IOwnership _out498; Dafny.ISet> _out499; - (this).GenExpr(_2008_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out497, out _out498, out _out499); - _2009_recursiveGen = _out497; - _2010___v188 = _out498; - _2011_recIdents = _out499; - readIdents = _2011_recIdents; - r = ((_2009_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("keys"))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(_2012_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out497, out _out498, out _out499); + _2013_recursiveGen = _out497; + _2014___v188 = _out498; + _2015_recIdents = _out499; + readIdents = _2015_recIdents; + r = ((_2013_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("keys"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out500; DCOMP._IOwnership _out501; (this).FromOwned(r, expectedOwnership, out _out500, out _out501); @@ -5958,20 +5979,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapValues) { - DAST._IExpression _2012_expr = _source96.dtor_expr; + DAST._IExpression _2016_expr = _source96.dtor_expr; { - RAST._IExpr _2013_recursiveGen; - DCOMP._IOwnership _2014___v189; - Dafny.ISet> _2015_recIdents; + RAST._IExpr _2017_recursiveGen; + DCOMP._IOwnership _2018___v189; + Dafny.ISet> _2019_recIdents; RAST._IExpr _out502; DCOMP._IOwnership _out503; Dafny.ISet> _out504; - (this).GenExpr(_2012_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out502, out _out503, out _out504); - _2013_recursiveGen = _out502; - _2014___v189 = _out503; - _2015_recIdents = _out504; - readIdents = _2015_recIdents; - r = ((_2013_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("values"))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(_2016_expr, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out502, out _out503, out _out504); + _2017_recursiveGen = _out502; + _2018___v189 = _out503; + _2019_recIdents = _out504; + readIdents = _2019_recIdents; + r = ((_2017_recursiveGen).Sel(Dafny.Sequence.UnicodeFromString("values"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out505; DCOMP._IOwnership _out506; (this).FromOwned(r, expectedOwnership, out _out505, out _out506); @@ -5984,66 +6005,66 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SelectFn) { - DAST._IExpression _2016_on = _source96.dtor_expr; - Dafny.ISequence _2017_field = _source96.dtor_field; - bool _2018_isDatatype = _source96.dtor_onDatatype; - bool _2019_isStatic = _source96.dtor_isStatic; - BigInteger _2020_arity = _source96.dtor_arity; + DAST._IExpression _2020_on = _source96.dtor_expr; + Dafny.ISequence _2021_field = _source96.dtor_field; + bool _2022_isDatatype = _source96.dtor_onDatatype; + bool _2023_isStatic = _source96.dtor_isStatic; + BigInteger _2024_arity = _source96.dtor_arity; { - RAST._IExpr _2021_onExpr; - DCOMP._IOwnership _2022_onOwned; - Dafny.ISet> _2023_recIdents; + RAST._IExpr _2025_onExpr; + DCOMP._IOwnership _2026_onOwned; + Dafny.ISet> _2027_recIdents; RAST._IExpr _out507; DCOMP._IOwnership _out508; Dafny.ISet> _out509; - (this).GenExpr(_2016_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out507, out _out508, out _out509); - _2021_onExpr = _out507; - _2022_onOwned = _out508; - _2023_recIdents = _out509; - Dafny.ISequence _2024_s = Dafny.Sequence.Empty; - Dafny.ISequence _2025_onString; - _2025_onString = (_2021_onExpr)._ToString(DCOMP.__default.IND); - if (_2019_isStatic) { - _2024_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2025_onString, Dafny.Sequence.UnicodeFromString("::")), DCOMP.__default.escapeName(_2017_field)); + (this).GenExpr(_2020_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out507, out _out508, out _out509); + _2025_onExpr = _out507; + _2026_onOwned = _out508; + _2027_recIdents = _out509; + Dafny.ISequence _2028_s = Dafny.Sequence.Empty; + Dafny.ISequence _2029_onString; + _2029_onString = (_2025_onExpr)._ToString(DCOMP.__default.IND); + if (_2023_isStatic) { + _2028_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2029_onString, Dafny.Sequence.UnicodeFromString("::")), DCOMP.__default.escapeName(_2021_field)); } else { - _2024_s = Dafny.Sequence.UnicodeFromString("{\n"); - _2024_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2024_s, Dafny.Sequence.UnicodeFromString("let callTarget = (")), _2025_onString), ((object.Equals(_2022_onOwned, DCOMP.Ownership.create_OwnershipOwned())) ? (Dafny.Sequence.UnicodeFromString(")")) : (Dafny.Sequence.UnicodeFromString(").clone()")))), Dafny.Sequence.UnicodeFromString(";\n")); - Dafny.ISequence _2026_args; - _2026_args = Dafny.Sequence.UnicodeFromString(""); - BigInteger _2027_i; - _2027_i = BigInteger.Zero; - while ((_2027_i) < (_2020_arity)) { - if ((_2027_i).Sign == 1) { - _2026_args = Dafny.Sequence.Concat(_2026_args, Dafny.Sequence.UnicodeFromString(", ")); + _2028_s = Dafny.Sequence.UnicodeFromString("{\n"); + _2028_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2028_s, Dafny.Sequence.UnicodeFromString("let callTarget = (")), _2029_onString), ((object.Equals(_2026_onOwned, DCOMP.Ownership.create_OwnershipOwned())) ? (Dafny.Sequence.UnicodeFromString(")")) : (Dafny.Sequence.UnicodeFromString(").clone()")))), Dafny.Sequence.UnicodeFromString(";\n")); + Dafny.ISequence _2030_args; + _2030_args = Dafny.Sequence.UnicodeFromString(""); + BigInteger _2031_i; + _2031_i = BigInteger.Zero; + while ((_2031_i) < (_2024_arity)) { + if ((_2031_i).Sign == 1) { + _2030_args = Dafny.Sequence.Concat(_2030_args, Dafny.Sequence.UnicodeFromString(", ")); } - _2026_args = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2026_args, Dafny.Sequence.UnicodeFromString("arg")), Std.Strings.__default.OfNat(_2027_i)); - _2027_i = (_2027_i) + (BigInteger.One); + _2030_args = Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2030_args, Dafny.Sequence.UnicodeFromString("arg")), Std.Strings.__default.OfNat(_2031_i)); + _2031_i = (_2031_i) + (BigInteger.One); } - _2024_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2024_s, Dafny.Sequence.UnicodeFromString("move |")), _2026_args), Dafny.Sequence.UnicodeFromString("| {\n")); - _2024_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2024_s, Dafny.Sequence.UnicodeFromString("callTarget.")), DCOMP.__default.escapeName(_2017_field)), Dafny.Sequence.UnicodeFromString("(")), _2026_args), Dafny.Sequence.UnicodeFromString(")\n")); - _2024_s = Dafny.Sequence.Concat(_2024_s, Dafny.Sequence.UnicodeFromString("}\n")); - _2024_s = Dafny.Sequence.Concat(_2024_s, Dafny.Sequence.UnicodeFromString("}")); + _2028_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2028_s, Dafny.Sequence.UnicodeFromString("move |")), _2030_args), Dafny.Sequence.UnicodeFromString("| {\n")); + _2028_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(_2028_s, Dafny.Sequence.UnicodeFromString("callTarget.")), DCOMP.__default.escapeName(_2021_field)), Dafny.Sequence.UnicodeFromString("(")), _2030_args), Dafny.Sequence.UnicodeFromString(")\n")); + _2028_s = Dafny.Sequence.Concat(_2028_s, Dafny.Sequence.UnicodeFromString("}\n")); + _2028_s = Dafny.Sequence.Concat(_2028_s, Dafny.Sequence.UnicodeFromString("}")); } - Dafny.ISequence _2028_typeShape; - _2028_typeShape = Dafny.Sequence.UnicodeFromString("dyn ::std::ops::Fn("); - BigInteger _2029_i; - _2029_i = BigInteger.Zero; - while ((_2029_i) < (_2020_arity)) { - if ((_2029_i).Sign == 1) { - _2028_typeShape = Dafny.Sequence.Concat(_2028_typeShape, Dafny.Sequence.UnicodeFromString(", ")); + Dafny.ISequence _2032_typeShape; + _2032_typeShape = Dafny.Sequence.UnicodeFromString("dyn ::std::ops::Fn("); + BigInteger _2033_i; + _2033_i = BigInteger.Zero; + while ((_2033_i) < (_2024_arity)) { + if ((_2033_i).Sign == 1) { + _2032_typeShape = Dafny.Sequence.Concat(_2032_typeShape, Dafny.Sequence.UnicodeFromString(", ")); } - _2028_typeShape = Dafny.Sequence.Concat(_2028_typeShape, Dafny.Sequence.UnicodeFromString("&_")); - _2029_i = (_2029_i) + (BigInteger.One); + _2032_typeShape = Dafny.Sequence.Concat(_2032_typeShape, Dafny.Sequence.UnicodeFromString("&_")); + _2033_i = (_2033_i) + (BigInteger.One); } - _2028_typeShape = Dafny.Sequence.Concat(_2028_typeShape, Dafny.Sequence.UnicodeFromString(") -> _")); - _2024_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::std::rc::Rc::new("), _2024_s), Dafny.Sequence.UnicodeFromString(") as ::std::rc::Rc<")), _2028_typeShape), Dafny.Sequence.UnicodeFromString(">")); - r = RAST.Expr.create_RawExpr(_2024_s); + _2032_typeShape = Dafny.Sequence.Concat(_2032_typeShape, Dafny.Sequence.UnicodeFromString(") -> _")); + _2028_s = Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("::std::rc::Rc::new("), _2028_s), Dafny.Sequence.UnicodeFromString(") as ::std::rc::Rc<")), _2032_typeShape), Dafny.Sequence.UnicodeFromString(">")); + r = RAST.Expr.create_RawExpr(_2028_s); RAST._IExpr _out510; DCOMP._IOwnership _out511; (this).FromOwned(r, expectedOwnership, out _out510, out _out511); r = _out510; resultingOwnership = _out511; - readIdents = _2023_recIdents; + readIdents = _2027_recIdents; return ; } goto after_match41; @@ -6053,30 +6074,30 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv if (_source96.is_Select) { DAST._IExpression expr0 = _source96.dtor_expr; if (expr0.is_Companion) { - Dafny.ISequence> _2030_c = expr0.dtor_Companion_a0; - Dafny.ISequence _2031_typeArgs = expr0.dtor_typeArgs; - Dafny.ISequence _2032_field = _source96.dtor_field; - bool _2033_isConstant = _source96.dtor_isConstant; - bool _2034_isDatatype = _source96.dtor_onDatatype; - DAST._IType _2035_fieldType = _source96.dtor_fieldType; + Dafny.ISequence> _2034_c = expr0.dtor_Companion_a0; + Dafny.ISequence _2035_typeArgs = expr0.dtor_typeArgs; + Dafny.ISequence _2036_field = _source96.dtor_field; + bool _2037_isConstant = _source96.dtor_isConstant; + bool _2038_isDatatype = _source96.dtor_onDatatype; + DAST._IType _2039_fieldType = _source96.dtor_fieldType; { - RAST._IExpr _2036_onExpr; - DCOMP._IOwnership _2037_onOwned; - Dafny.ISet> _2038_recIdents; + RAST._IExpr _2040_onExpr; + DCOMP._IOwnership _2041_onOwned; + Dafny.ISet> _2042_recIdents; RAST._IExpr _out512; DCOMP._IOwnership _out513; Dafny.ISet> _out514; - (this).GenExpr(DAST.Expression.create_Companion(_2030_c, _2031_typeArgs), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out512, out _out513, out _out514); - _2036_onExpr = _out512; - _2037_onOwned = _out513; - _2038_recIdents = _out514; - r = ((_2036_onExpr).MSel(DCOMP.__default.escapeName(_2032_field))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(DAST.Expression.create_Companion(_2034_c, _2035_typeArgs), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out512, out _out513, out _out514); + _2040_onExpr = _out512; + _2041_onOwned = _out513; + _2042_recIdents = _out514; + r = ((_2040_onExpr).MSel(DCOMP.__default.escapeName(_2036_field))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out515; DCOMP._IOwnership _out516; (this).FromOwned(r, expectedOwnership, out _out515, out _out516); r = _out515; resultingOwnership = _out516; - readIdents = _2038_recIdents; + readIdents = _2042_recIdents; return ; } goto after_match41; @@ -6085,48 +6106,48 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Select) { - DAST._IExpression _2039_on = _source96.dtor_expr; - Dafny.ISequence _2040_field = _source96.dtor_field; - bool _2041_isConstant = _source96.dtor_isConstant; - bool _2042_isDatatype = _source96.dtor_onDatatype; - DAST._IType _2043_fieldType = _source96.dtor_fieldType; + DAST._IExpression _2043_on = _source96.dtor_expr; + Dafny.ISequence _2044_field = _source96.dtor_field; + bool _2045_isConstant = _source96.dtor_isConstant; + bool _2046_isDatatype = _source96.dtor_onDatatype; + DAST._IType _2047_fieldType = _source96.dtor_fieldType; { - if (_2042_isDatatype) { - RAST._IExpr _2044_onExpr; - DCOMP._IOwnership _2045_onOwned; - Dafny.ISet> _2046_recIdents; + if (_2046_isDatatype) { + RAST._IExpr _2048_onExpr; + DCOMP._IOwnership _2049_onOwned; + Dafny.ISet> _2050_recIdents; RAST._IExpr _out517; DCOMP._IOwnership _out518; Dafny.ISet> _out519; - (this).GenExpr(_2039_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out517, out _out518, out _out519); - _2044_onExpr = _out517; - _2045_onOwned = _out518; - _2046_recIdents = _out519; - r = ((_2044_onExpr).Sel(DCOMP.__default.escapeName(_2040_field))).Apply(Dafny.Sequence.FromElements()); - RAST._IType _2047_typ; + (this).GenExpr(_2043_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out517, out _out518, out _out519); + _2048_onExpr = _out517; + _2049_onOwned = _out518; + _2050_recIdents = _out519; + r = ((_2048_onExpr).Sel(DCOMP.__default.escapeName(_2044_field))).Apply(Dafny.Sequence.FromElements()); + RAST._IType _2051_typ; RAST._IType _out520; - _out520 = (this).GenType(_2043_fieldType, DCOMP.GenTypeContext.@default()); - _2047_typ = _out520; + _out520 = (this).GenType(_2047_fieldType, DCOMP.GenTypeContext.@default()); + _2051_typ = _out520; RAST._IExpr _out521; DCOMP._IOwnership _out522; (this).FromOwnership(r, DCOMP.Ownership.create_OwnershipBorrowed(), expectedOwnership, out _out521, out _out522); r = _out521; resultingOwnership = _out522; - readIdents = _2046_recIdents; + readIdents = _2050_recIdents; } else { - RAST._IExpr _2048_onExpr; - DCOMP._IOwnership _2049_onOwned; - Dafny.ISet> _2050_recIdents; + RAST._IExpr _2052_onExpr; + DCOMP._IOwnership _2053_onOwned; + Dafny.ISet> _2054_recIdents; RAST._IExpr _out523; DCOMP._IOwnership _out524; Dafny.ISet> _out525; - (this).GenExpr(_2039_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out523, out _out524, out _out525); - _2048_onExpr = _out523; - _2049_onOwned = _out524; - _2050_recIdents = _out525; - r = _2048_onExpr; - if (!object.Equals(_2048_onExpr, RAST.__default.self)) { - RAST._IExpr _source98 = _2048_onExpr; + (this).GenExpr(_2043_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out523, out _out524, out _out525); + _2052_onExpr = _out523; + _2053_onOwned = _out524; + _2054_recIdents = _out525; + r = _2052_onExpr; + if (!object.Equals(_2052_onExpr, RAST.__default.self)) { + RAST._IExpr _source98 = _2052_onExpr; { if (_source98.is_UnaryOp) { Dafny.ISequence op15 = _source98.dtor_op1; @@ -6150,8 +6171,8 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } r = ((this).read__macro).Apply1(r); } - r = (r).Sel(DCOMP.__default.escapeName(_2040_field)); - if (_2041_isConstant) { + r = (r).Sel(DCOMP.__default.escapeName(_2044_field)); + if (_2045_isConstant) { r = (r).Apply(Dafny.Sequence.FromElements()); } r = (r).Clone(); @@ -6160,7 +6181,7 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv (this).FromOwned(r, expectedOwnership, out _out526, out _out527); r = _out526; resultingOwnership = _out527; - readIdents = _2050_recIdents; + readIdents = _2054_recIdents; } return ; } @@ -6169,63 +6190,63 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Index) { - DAST._IExpression _2051_on = _source96.dtor_expr; - DAST._ICollKind _2052_collKind = _source96.dtor_collKind; - Dafny.ISequence _2053_indices = _source96.dtor_indices; + DAST._IExpression _2055_on = _source96.dtor_expr; + DAST._ICollKind _2056_collKind = _source96.dtor_collKind; + Dafny.ISequence _2057_indices = _source96.dtor_indices; { - RAST._IExpr _2054_onExpr; - DCOMP._IOwnership _2055_onOwned; - Dafny.ISet> _2056_recIdents; + RAST._IExpr _2058_onExpr; + DCOMP._IOwnership _2059_onOwned; + Dafny.ISet> _2060_recIdents; RAST._IExpr _out528; DCOMP._IOwnership _out529; Dafny.ISet> _out530; - (this).GenExpr(_2051_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out528, out _out529, out _out530); - _2054_onExpr = _out528; - _2055_onOwned = _out529; - _2056_recIdents = _out530; - readIdents = _2056_recIdents; - r = _2054_onExpr; - bool _2057_hadArray; - _2057_hadArray = false; - if (object.Equals(_2052_collKind, DAST.CollKind.create_Array())) { + (this).GenExpr(_2055_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out528, out _out529, out _out530); + _2058_onExpr = _out528; + _2059_onOwned = _out529; + _2060_recIdents = _out530; + readIdents = _2060_recIdents; + r = _2058_onExpr; + bool _2061_hadArray; + _2061_hadArray = false; + if (object.Equals(_2056_collKind, DAST.CollKind.create_Array())) { r = ((this).read__macro).Apply1(r); - _2057_hadArray = true; - if ((new BigInteger((_2053_indices).Count)) > (BigInteger.One)) { + _2061_hadArray = true; + if ((new BigInteger((_2057_indices).Count)) > (BigInteger.One)) { r = (r).Sel(Dafny.Sequence.UnicodeFromString("data")); } } - BigInteger _hi46 = new BigInteger((_2053_indices).Count); - for (BigInteger _2058_i = BigInteger.Zero; _2058_i < _hi46; _2058_i++) { - if (object.Equals(_2052_collKind, DAST.CollKind.create_Array())) { - RAST._IExpr _2059_idx; - DCOMP._IOwnership _2060_idxOwned; - Dafny.ISet> _2061_recIdentsIdx; + BigInteger _hi46 = new BigInteger((_2057_indices).Count); + for (BigInteger _2062_i = BigInteger.Zero; _2062_i < _hi46; _2062_i++) { + if (object.Equals(_2056_collKind, DAST.CollKind.create_Array())) { + RAST._IExpr _2063_idx; + DCOMP._IOwnership _2064_idxOwned; + Dafny.ISet> _2065_recIdentsIdx; RAST._IExpr _out531; DCOMP._IOwnership _out532; Dafny.ISet> _out533; - (this).GenExpr((_2053_indices).Select(_2058_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out531, out _out532, out _out533); - _2059_idx = _out531; - _2060_idxOwned = _out532; - _2061_recIdentsIdx = _out533; - _2059_idx = RAST.__default.IntoUsize(_2059_idx); - r = RAST.Expr.create_SelectIndex(r, _2059_idx); - readIdents = Dafny.Set>.Union(readIdents, _2061_recIdentsIdx); + (this).GenExpr((_2057_indices).Select(_2062_i), selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out531, out _out532, out _out533); + _2063_idx = _out531; + _2064_idxOwned = _out532; + _2065_recIdentsIdx = _out533; + _2063_idx = RAST.__default.IntoUsize(_2063_idx); + r = RAST.Expr.create_SelectIndex(r, _2063_idx); + readIdents = Dafny.Set>.Union(readIdents, _2065_recIdentsIdx); } else { - RAST._IExpr _2062_idx; - DCOMP._IOwnership _2063_idxOwned; - Dafny.ISet> _2064_recIdentsIdx; + RAST._IExpr _2066_idx; + DCOMP._IOwnership _2067_idxOwned; + Dafny.ISet> _2068_recIdentsIdx; RAST._IExpr _out534; DCOMP._IOwnership _out535; Dafny.ISet> _out536; - (this).GenExpr((_2053_indices).Select(_2058_i), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out534, out _out535, out _out536); - _2062_idx = _out534; - _2063_idxOwned = _out535; - _2064_recIdentsIdx = _out536; - r = ((r).Sel(Dafny.Sequence.UnicodeFromString("get"))).Apply1(_2062_idx); - readIdents = Dafny.Set>.Union(readIdents, _2064_recIdentsIdx); + (this).GenExpr((_2057_indices).Select(_2062_i), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out534, out _out535, out _out536); + _2066_idx = _out534; + _2067_idxOwned = _out535; + _2068_recIdentsIdx = _out536; + r = ((r).Sel(Dafny.Sequence.UnicodeFromString("get"))).Apply1(_2066_idx); + readIdents = Dafny.Set>.Union(readIdents, _2068_recIdentsIdx); } } - if (_2057_hadArray) { + if (_2061_hadArray) { r = (r).Clone(); } RAST._IExpr _out537; @@ -6240,53 +6261,53 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_IndexRange) { - DAST._IExpression _2065_on = _source96.dtor_expr; - bool _2066_isArray = _source96.dtor_isArray; - Std.Wrappers._IOption _2067_low = _source96.dtor_low; - Std.Wrappers._IOption _2068_high = _source96.dtor_high; + DAST._IExpression _2069_on = _source96.dtor_expr; + bool _2070_isArray = _source96.dtor_isArray; + Std.Wrappers._IOption _2071_low = _source96.dtor_low; + Std.Wrappers._IOption _2072_high = _source96.dtor_high; { - RAST._IExpr _2069_onExpr; - DCOMP._IOwnership _2070_onOwned; - Dafny.ISet> _2071_recIdents; + RAST._IExpr _2073_onExpr; + DCOMP._IOwnership _2074_onOwned; + Dafny.ISet> _2075_recIdents; RAST._IExpr _out539; DCOMP._IOwnership _out540; Dafny.ISet> _out541; - (this).GenExpr(_2065_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out539, out _out540, out _out541); - _2069_onExpr = _out539; - _2070_onOwned = _out540; - _2071_recIdents = _out541; - readIdents = _2071_recIdents; - Dafny.ISequence _2072_methodName; - if ((_2067_low).is_Some) { - if ((_2068_high).is_Some) { - _2072_methodName = Dafny.Sequence.UnicodeFromString("slice"); + (this).GenExpr(_2069_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out539, out _out540, out _out541); + _2073_onExpr = _out539; + _2074_onOwned = _out540; + _2075_recIdents = _out541; + readIdents = _2075_recIdents; + Dafny.ISequence _2076_methodName; + if ((_2071_low).is_Some) { + if ((_2072_high).is_Some) { + _2076_methodName = Dafny.Sequence.UnicodeFromString("slice"); } else { - _2072_methodName = Dafny.Sequence.UnicodeFromString("drop"); + _2076_methodName = Dafny.Sequence.UnicodeFromString("drop"); } - } else if ((_2068_high).is_Some) { - _2072_methodName = Dafny.Sequence.UnicodeFromString("take"); + } else if ((_2072_high).is_Some) { + _2076_methodName = Dafny.Sequence.UnicodeFromString("take"); } else { - _2072_methodName = Dafny.Sequence.UnicodeFromString(""); + _2076_methodName = Dafny.Sequence.UnicodeFromString(""); } - Dafny.ISequence _2073_arguments; - _2073_arguments = Dafny.Sequence.FromElements(); - Std.Wrappers._IOption _source99 = _2067_low; + Dafny.ISequence _2077_arguments; + _2077_arguments = Dafny.Sequence.FromElements(); + Std.Wrappers._IOption _source99 = _2071_low; { if (_source99.is_Some) { - DAST._IExpression _2074_l = _source99.dtor_value; + DAST._IExpression _2078_l = _source99.dtor_value; { - RAST._IExpr _2075_lExpr; - DCOMP._IOwnership _2076___v192; - Dafny.ISet> _2077_recIdentsL; + RAST._IExpr _2079_lExpr; + DCOMP._IOwnership _2080___v192; + Dafny.ISet> _2081_recIdentsL; RAST._IExpr _out542; DCOMP._IOwnership _out543; Dafny.ISet> _out544; - (this).GenExpr(_2074_l, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out542, out _out543, out _out544); - _2075_lExpr = _out542; - _2076___v192 = _out543; - _2077_recIdentsL = _out544; - _2073_arguments = Dafny.Sequence.Concat(_2073_arguments, Dafny.Sequence.FromElements(_2075_lExpr)); - readIdents = Dafny.Set>.Union(readIdents, _2077_recIdentsL); + (this).GenExpr(_2078_l, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out542, out _out543, out _out544); + _2079_lExpr = _out542; + _2080___v192 = _out543; + _2081_recIdentsL = _out544; + _2077_arguments = Dafny.Sequence.Concat(_2077_arguments, Dafny.Sequence.FromElements(_2079_lExpr)); + readIdents = Dafny.Set>.Union(readIdents, _2081_recIdentsL); } goto after_match44; } @@ -6294,23 +6315,23 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv { } after_match44: ; - Std.Wrappers._IOption _source100 = _2068_high; + Std.Wrappers._IOption _source100 = _2072_high; { if (_source100.is_Some) { - DAST._IExpression _2078_h = _source100.dtor_value; + DAST._IExpression _2082_h = _source100.dtor_value; { - RAST._IExpr _2079_hExpr; - DCOMP._IOwnership _2080___v193; - Dafny.ISet> _2081_recIdentsH; + RAST._IExpr _2083_hExpr; + DCOMP._IOwnership _2084___v193; + Dafny.ISet> _2085_recIdentsH; RAST._IExpr _out545; DCOMP._IOwnership _out546; Dafny.ISet> _out547; - (this).GenExpr(_2078_h, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out545, out _out546, out _out547); - _2079_hExpr = _out545; - _2080___v193 = _out546; - _2081_recIdentsH = _out547; - _2073_arguments = Dafny.Sequence.Concat(_2073_arguments, Dafny.Sequence.FromElements(_2079_hExpr)); - readIdents = Dafny.Set>.Union(readIdents, _2081_recIdentsH); + (this).GenExpr(_2082_h, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out545, out _out546, out _out547); + _2083_hExpr = _out545; + _2084___v193 = _out546; + _2085_recIdentsH = _out547; + _2077_arguments = Dafny.Sequence.Concat(_2077_arguments, Dafny.Sequence.FromElements(_2083_hExpr)); + readIdents = Dafny.Set>.Union(readIdents, _2085_recIdentsH); } goto after_match45; } @@ -6318,15 +6339,15 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv { } after_match45: ; - r = _2069_onExpr; - if (_2066_isArray) { - if (!(_2072_methodName).Equals(Dafny.Sequence.UnicodeFromString(""))) { - _2072_methodName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_"), _2072_methodName); + r = _2073_onExpr; + if (_2070_isArray) { + if (!(_2076_methodName).Equals(Dafny.Sequence.UnicodeFromString(""))) { + _2076_methodName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_"), _2076_methodName); } - r = ((RAST.__default.dafny__runtime__Sequence).MSel(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("from_array"), _2072_methodName))).Apply(_2073_arguments); + r = ((RAST.__default.dafny__runtime__Sequence).MSel(Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("from_array"), _2076_methodName))).Apply(_2077_arguments); } else { - if (!(_2072_methodName).Equals(Dafny.Sequence.UnicodeFromString(""))) { - r = ((r).Sel(_2072_methodName)).Apply(_2073_arguments); + if (!(_2076_methodName).Equals(Dafny.Sequence.UnicodeFromString(""))) { + r = ((r).Sel(_2076_methodName)).Apply(_2077_arguments); } } RAST._IExpr _out548; @@ -6341,28 +6362,28 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_TupleSelect) { - DAST._IExpression _2082_on = _source96.dtor_expr; - BigInteger _2083_idx = _source96.dtor_index; - DAST._IType _2084_fieldType = _source96.dtor_fieldType; + DAST._IExpression _2086_on = _source96.dtor_expr; + BigInteger _2087_idx = _source96.dtor_index; + DAST._IType _2088_fieldType = _source96.dtor_fieldType; { - RAST._IExpr _2085_onExpr; - DCOMP._IOwnership _2086_onOwnership; - Dafny.ISet> _2087_recIdents; + RAST._IExpr _2089_onExpr; + DCOMP._IOwnership _2090_onOwnership; + Dafny.ISet> _2091_recIdents; RAST._IExpr _out550; DCOMP._IOwnership _out551; Dafny.ISet> _out552; - (this).GenExpr(_2082_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out550, out _out551, out _out552); - _2085_onExpr = _out550; - _2086_onOwnership = _out551; - _2087_recIdents = _out552; - Dafny.ISequence _2088_selName; - _2088_selName = Std.Strings.__default.OfNat(_2083_idx); - DAST._IType _source101 = _2084_fieldType; + (this).GenExpr(_2086_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out550, out _out551, out _out552); + _2089_onExpr = _out550; + _2090_onOwnership = _out551; + _2091_recIdents = _out552; + Dafny.ISequence _2092_selName; + _2092_selName = Std.Strings.__default.OfNat(_2087_idx); + DAST._IType _source101 = _2088_fieldType; { if (_source101.is_Tuple) { - Dafny.ISequence _2089_tps = _source101.dtor_Tuple_a0; - if (((_2084_fieldType).is_Tuple) && ((new BigInteger((_2089_tps).Count)) > (RAST.__default.MAX__TUPLE__SIZE))) { - _2088_selName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_"), _2088_selName); + Dafny.ISequence _2093_tps = _source101.dtor_Tuple_a0; + if (((_2088_fieldType).is_Tuple) && ((new BigInteger((_2093_tps).Count)) > (RAST.__default.MAX__TUPLE__SIZE))) { + _2092_selName = Dafny.Sequence.Concat(Dafny.Sequence.UnicodeFromString("_"), _2092_selName); } goto after_match46; } @@ -6370,13 +6391,13 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv { } after_match46: ; - r = ((_2085_onExpr).Sel(_2088_selName)).Clone(); + r = ((_2089_onExpr).Sel(_2092_selName)).Clone(); RAST._IExpr _out553; DCOMP._IOwnership _out554; (this).FromOwnership(r, DCOMP.Ownership.create_OwnershipOwned(), expectedOwnership, out _out553, out _out554); r = _out553; resultingOwnership = _out554; - readIdents = _2087_recIdents; + readIdents = _2091_recIdents; return ; } goto after_match41; @@ -6384,64 +6405,64 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Call) { - DAST._IExpression _2090_on = _source96.dtor_on; - DAST._ICallName _2091_name = _source96.dtor_callName; - Dafny.ISequence _2092_typeArgs = _source96.dtor_typeArgs; - Dafny.ISequence _2093_args = _source96.dtor_args; + DAST._IExpression _2094_on = _source96.dtor_on; + DAST._ICallName _2095_name = _source96.dtor_callName; + Dafny.ISequence _2096_typeArgs = _source96.dtor_typeArgs; + Dafny.ISequence _2097_args = _source96.dtor_args; { - Dafny.ISequence _2094_argExprs; - Dafny.ISet> _2095_recIdents; - Dafny.ISequence _2096_typeExprs; - Std.Wrappers._IOption _2097_fullNameQualifier; + Dafny.ISequence _2098_argExprs; + Dafny.ISet> _2099_recIdents; + Dafny.ISequence _2100_typeExprs; + Std.Wrappers._IOption _2101_fullNameQualifier; Dafny.ISequence _out555; Dafny.ISet> _out556; Dafny.ISequence _out557; Std.Wrappers._IOption _out558; - (this).GenArgs(selfIdent, _2091_name, _2092_typeArgs, _2093_args, env, out _out555, out _out556, out _out557, out _out558); - _2094_argExprs = _out555; - _2095_recIdents = _out556; - _2096_typeExprs = _out557; - _2097_fullNameQualifier = _out558; - readIdents = _2095_recIdents; - Std.Wrappers._IOption _source102 = _2097_fullNameQualifier; + (this).GenArgs(selfIdent, _2095_name, _2096_typeArgs, _2097_args, env, out _out555, out _out556, out _out557, out _out558); + _2098_argExprs = _out555; + _2099_recIdents = _out556; + _2100_typeExprs = _out557; + _2101_fullNameQualifier = _out558; + readIdents = _2099_recIdents; + Std.Wrappers._IOption _source102 = _2101_fullNameQualifier; { if (_source102.is_Some) { DAST._IResolvedType value11 = _source102.dtor_value; - Dafny.ISequence> _2098_path = value11.dtor_path; - Dafny.ISequence _2099_onTypeArgs = value11.dtor_typeArgs; - DAST._IResolvedTypeBase _2100_base = value11.dtor_kind; - RAST._IExpr _2101_fullPath; + Dafny.ISequence> _2102_path = value11.dtor_path; + Dafny.ISequence _2103_onTypeArgs = value11.dtor_typeArgs; + DAST._IResolvedTypeBase _2104_base = value11.dtor_kind; + RAST._IExpr _2105_fullPath; RAST._IExpr _out559; - _out559 = DCOMP.COMP.GenPathExpr(_2098_path); - _2101_fullPath = _out559; - Dafny.ISequence _2102_onTypeExprs; + _out559 = DCOMP.COMP.GenPathExpr(_2102_path); + _2105_fullPath = _out559; + Dafny.ISequence _2106_onTypeExprs; Dafny.ISequence _out560; - _out560 = (this).GenTypeArgs(_2099_onTypeArgs, DCOMP.GenTypeContext.@default()); - _2102_onTypeExprs = _out560; - RAST._IExpr _2103_onExpr = RAST.Expr.Default(); - DCOMP._IOwnership _2104_recOwnership = DCOMP.Ownership.Default(); - Dafny.ISet> _2105_recIdents = Dafny.Set>.Empty; - if (((_2100_base).is_Trait) || ((_2100_base).is_Class)) { + _out560 = (this).GenTypeArgs(_2103_onTypeArgs, DCOMP.GenTypeContext.@default()); + _2106_onTypeExprs = _out560; + RAST._IExpr _2107_onExpr = RAST.Expr.Default(); + DCOMP._IOwnership _2108_recOwnership = DCOMP.Ownership.Default(); + Dafny.ISet> _2109_recIdents = Dafny.Set>.Empty; + if (((_2104_base).is_Trait) || ((_2104_base).is_Class)) { RAST._IExpr _out561; DCOMP._IOwnership _out562; Dafny.ISet> _out563; - (this).GenExpr(_2090_on, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out561, out _out562, out _out563); - _2103_onExpr = _out561; - _2104_recOwnership = _out562; - _2105_recIdents = _out563; - _2103_onExpr = ((this).read__macro).Apply1(_2103_onExpr); - readIdents = Dafny.Set>.Union(readIdents, _2105_recIdents); + (this).GenExpr(_2094_on, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out561, out _out562, out _out563); + _2107_onExpr = _out561; + _2108_recOwnership = _out562; + _2109_recIdents = _out563; + _2107_onExpr = ((this).read__macro).Apply1(_2107_onExpr); + readIdents = Dafny.Set>.Union(readIdents, _2109_recIdents); } else { RAST._IExpr _out564; DCOMP._IOwnership _out565; Dafny.ISet> _out566; - (this).GenExpr(_2090_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out564, out _out565, out _out566); - _2103_onExpr = _out564; - _2104_recOwnership = _out565; - _2105_recIdents = _out566; - readIdents = Dafny.Set>.Union(readIdents, _2105_recIdents); + (this).GenExpr(_2094_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out564, out _out565, out _out566); + _2107_onExpr = _out564; + _2108_recOwnership = _out565; + _2109_recIdents = _out566; + readIdents = Dafny.Set>.Union(readIdents, _2109_recIdents); } - r = ((((_2101_fullPath).ApplyType(_2102_onTypeExprs)).MSel(DCOMP.__default.escapeName((_2091_name).dtor_name))).ApplyType(_2096_typeExprs)).Apply(Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_2103_onExpr), _2094_argExprs)); + r = ((((_2105_fullPath).ApplyType(_2106_onTypeExprs)).MSel(DCOMP.__default.escapeName((_2095_name).dtor_name))).ApplyType(_2100_typeExprs)).Apply(Dafny.Sequence.Concat(Dafny.Sequence.FromElements(_2107_onExpr), _2098_argExprs)); RAST._IExpr _out567; DCOMP._IOwnership _out568; (this).FromOwned(r, expectedOwnership, out _out567, out _out568); @@ -6451,23 +6472,23 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } } { - RAST._IExpr _2106_onExpr; - DCOMP._IOwnership _2107___v199; - Dafny.ISet> _2108_recIdents; + RAST._IExpr _2110_onExpr; + DCOMP._IOwnership _2111___v199; + Dafny.ISet> _2112_recIdents; RAST._IExpr _out569; DCOMP._IOwnership _out570; Dafny.ISet> _out571; - (this).GenExpr(_2090_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out569, out _out570, out _out571); - _2106_onExpr = _out569; - _2107___v199 = _out570; - _2108_recIdents = _out571; - readIdents = Dafny.Set>.Union(readIdents, _2108_recIdents); - Dafny.ISequence _2109_renderedName; - DAST._ICallName _source103 = _2091_name; + (this).GenExpr(_2094_on, selfIdent, env, DCOMP.Ownership.create_OwnershipAutoBorrowed(), out _out569, out _out570, out _out571); + _2110_onExpr = _out569; + _2111___v199 = _out570; + _2112_recIdents = _out571; + readIdents = Dafny.Set>.Union(readIdents, _2112_recIdents); + Dafny.ISequence _2113_renderedName; + DAST._ICallName _source103 = _2095_name; { if (_source103.is_CallName) { - Dafny.ISequence _2110_ident = _source103.dtor_name; - _2109_renderedName = DCOMP.__default.escapeName(_2110_ident); + Dafny.ISequence _2114_ident = _source103.dtor_name; + _2113_renderedName = DCOMP.__default.escapeName(_2114_ident); goto after_match48; } } @@ -6480,38 +6501,38 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv disjunctiveMatch13 = true; } if (disjunctiveMatch13) { - _2109_renderedName = Dafny.Sequence.UnicodeFromString("add"); + _2113_renderedName = Dafny.Sequence.UnicodeFromString("add"); goto after_match48; } } { - _2109_renderedName = Dafny.Sequence.UnicodeFromString("build"); + _2113_renderedName = Dafny.Sequence.UnicodeFromString("build"); } after_match48: ; - DAST._IExpression _source104 = _2090_on; + DAST._IExpression _source104 = _2094_on; { if (_source104.is_Companion) { { - _2106_onExpr = (_2106_onExpr).MSel(_2109_renderedName); + _2110_onExpr = (_2110_onExpr).MSel(_2113_renderedName); } goto after_match49; } } { { - if (!object.Equals(_2106_onExpr, RAST.__default.self)) { - DAST._ICallName _source105 = _2091_name; + if (!object.Equals(_2110_onExpr, RAST.__default.self)) { + DAST._ICallName _source105 = _2095_name; { if (_source105.is_CallName) { Std.Wrappers._IOption onType2 = _source105.dtor_onType; if (onType2.is_Some) { - DAST._IType _2111_tpe = onType2.dtor_value; - RAST._IType _2112_typ; + DAST._IType _2115_tpe = onType2.dtor_value; + RAST._IType _2116_typ; RAST._IType _out572; - _out572 = (this).GenType(_2111_tpe, DCOMP.GenTypeContext.@default()); - _2112_typ = _out572; - if ((_2112_typ).IsObjectOrPointer()) { - _2106_onExpr = ((this).read__macro).Apply1(_2106_onExpr); + _out572 = (this).GenType(_2115_tpe, DCOMP.GenTypeContext.@default()); + _2116_typ = _out572; + if ((_2116_typ).IsObjectOrPointer()) { + _2110_onExpr = ((this).read__macro).Apply1(_2110_onExpr); } goto after_match50; } @@ -6521,11 +6542,11 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } after_match50: ; } - _2106_onExpr = (_2106_onExpr).Sel(_2109_renderedName); + _2110_onExpr = (_2110_onExpr).Sel(_2113_renderedName); } } after_match49: ; - r = ((_2106_onExpr).ApplyType(_2096_typeExprs)).Apply(_2094_argExprs); + r = ((_2110_onExpr).ApplyType(_2100_typeExprs)).Apply(_2098_argExprs); RAST._IExpr _out573; DCOMP._IOwnership _out574; (this).FromOwned(r, expectedOwnership, out _out573, out _out574); @@ -6540,85 +6561,85 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Lambda) { - Dafny.ISequence _2113_paramsDafny = _source96.dtor_params; - DAST._IType _2114_retType = _source96.dtor_retType; - Dafny.ISequence _2115_body = _source96.dtor_body; + Dafny.ISequence _2117_paramsDafny = _source96.dtor_params; + DAST._IType _2118_retType = _source96.dtor_retType; + Dafny.ISequence _2119_body = _source96.dtor_body; { - Dafny.ISequence _2116_params; + Dafny.ISequence _2120_params; Dafny.ISequence _out575; - _out575 = (this).GenParams(_2113_paramsDafny); - _2116_params = _out575; - Dafny.ISequence> _2117_paramNames; - _2117_paramNames = Dafny.Sequence>.FromElements(); - Dafny.IMap,RAST._IType> _2118_paramTypesMap; - _2118_paramTypesMap = Dafny.Map, RAST._IType>.FromElements(); - BigInteger _hi47 = new BigInteger((_2116_params).Count); - for (BigInteger _2119_i = BigInteger.Zero; _2119_i < _hi47; _2119_i++) { - Dafny.ISequence _2120_name; - _2120_name = ((_2116_params).Select(_2119_i)).dtor_name; - _2117_paramNames = Dafny.Sequence>.Concat(_2117_paramNames, Dafny.Sequence>.FromElements(_2120_name)); - _2118_paramTypesMap = Dafny.Map, RAST._IType>.Update(_2118_paramTypesMap, _2120_name, ((_2116_params).Select(_2119_i)).dtor_tpe); + _out575 = (this).GenParams(_2117_paramsDafny); + _2120_params = _out575; + Dafny.ISequence> _2121_paramNames; + _2121_paramNames = Dafny.Sequence>.FromElements(); + Dafny.IMap,RAST._IType> _2122_paramTypesMap; + _2122_paramTypesMap = Dafny.Map, RAST._IType>.FromElements(); + BigInteger _hi47 = new BigInteger((_2120_params).Count); + for (BigInteger _2123_i = BigInteger.Zero; _2123_i < _hi47; _2123_i++) { + Dafny.ISequence _2124_name; + _2124_name = ((_2120_params).Select(_2123_i)).dtor_name; + _2121_paramNames = Dafny.Sequence>.Concat(_2121_paramNames, Dafny.Sequence>.FromElements(_2124_name)); + _2122_paramTypesMap = Dafny.Map, RAST._IType>.Update(_2122_paramTypesMap, _2124_name, ((_2120_params).Select(_2123_i)).dtor_tpe); } - DCOMP._IEnvironment _2121_subEnv; - _2121_subEnv = ((env).ToOwned()).merge(DCOMP.Environment.create(_2117_paramNames, _2118_paramTypesMap)); - RAST._IExpr _2122_recursiveGen; - Dafny.ISet> _2123_recIdents; - DCOMP._IEnvironment _2124___v210; + DCOMP._IEnvironment _2125_subEnv; + _2125_subEnv = ((env).ToOwned()).merge(DCOMP.Environment.create(_2121_paramNames, _2122_paramTypesMap)); + RAST._IExpr _2126_recursiveGen; + Dafny.ISet> _2127_recIdents; + DCOMP._IEnvironment _2128___v210; RAST._IExpr _out576; Dafny.ISet> _out577; DCOMP._IEnvironment _out578; - (this).GenStmts(_2115_body, ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) ? (DCOMP.SelfInfo.create_ThisTyped(Dafny.Sequence.UnicodeFromString("_this"), (selfIdent).dtor_dafnyType)) : (DCOMP.SelfInfo.create_NoSelf())), _2121_subEnv, true, Std.Wrappers.Option>>.create_None(), out _out576, out _out577, out _out578); - _2122_recursiveGen = _out576; - _2123_recIdents = _out577; - _2124___v210 = _out578; + (this).GenStmts(_2119_body, ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) ? (DCOMP.SelfInfo.create_ThisTyped(Dafny.Sequence.UnicodeFromString("_this"), (selfIdent).dtor_dafnyType)) : (DCOMP.SelfInfo.create_NoSelf())), _2125_subEnv, true, Std.Wrappers.Option>>.create_None(), out _out576, out _out577, out _out578); + _2126_recursiveGen = _out576; + _2127_recIdents = _out577; + _2128___v210 = _out578; readIdents = Dafny.Set>.FromElements(); - _2123_recIdents = Dafny.Set>.Difference(_2123_recIdents, Dafny.Helpers.Id>, Dafny.ISet>>>((_2125_paramNames) => ((System.Func>>)(() => { + _2127_recIdents = Dafny.Set>.Difference(_2127_recIdents, Dafny.Helpers.Id>, Dafny.ISet>>>((_2129_paramNames) => ((System.Func>>)(() => { var _coll7 = new System.Collections.Generic.List>(); - foreach (Dafny.ISequence _compr_7 in (_2125_paramNames).CloneAsArray()) { - Dafny.ISequence _2126_name = (Dafny.ISequence)_compr_7; - if ((_2125_paramNames).Contains(_2126_name)) { - _coll7.Add(_2126_name); + foreach (Dafny.ISequence _compr_7 in (_2129_paramNames).CloneAsArray()) { + Dafny.ISequence _2130_name = (Dafny.ISequence)_compr_7; + if ((_2129_paramNames).Contains(_2130_name)) { + _coll7.Add(_2130_name); } } return Dafny.Set>.FromCollection(_coll7); - }))())(_2117_paramNames)); - RAST._IExpr _2127_allReadCloned; - _2127_allReadCloned = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - while (!(_2123_recIdents).Equals(Dafny.Set>.FromElements())) { - Dafny.ISequence _2128_next; - foreach (Dafny.ISequence _assign_such_that_3 in (_2123_recIdents).Elements) { - _2128_next = (Dafny.ISequence)_assign_such_that_3; - if ((_2123_recIdents).Contains(_2128_next)) { + }))())(_2121_paramNames)); + RAST._IExpr _2131_allReadCloned; + _2131_allReadCloned = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); + while (!(_2127_recIdents).Equals(Dafny.Set>.FromElements())) { + Dafny.ISequence _2132_next; + foreach (Dafny.ISequence _assign_such_that_3 in (_2127_recIdents).Elements) { + _2132_next = (Dafny.ISequence)_assign_such_that_3; + if ((_2127_recIdents).Contains(_2132_next)) { goto after__ASSIGN_SUCH_THAT_3; } } - throw new System.Exception("assign-such-that search produced no value (line 4877)"); + throw new System.Exception("assign-such-that search produced no value (line 4912)"); after__ASSIGN_SUCH_THAT_3: ; - if ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) && ((_2128_next).Equals(Dafny.Sequence.UnicodeFromString("_this")))) { - RAST._IExpr _2129_selfCloned; - DCOMP._IOwnership _2130___v211; - Dafny.ISet> _2131___v212; + if ((!object.Equals(selfIdent, DCOMP.SelfInfo.create_NoSelf())) && ((_2132_next).Equals(Dafny.Sequence.UnicodeFromString("_this")))) { + RAST._IExpr _2133_selfCloned; + DCOMP._IOwnership _2134___v211; + Dafny.ISet> _2135___v212; RAST._IExpr _out579; DCOMP._IOwnership _out580; Dafny.ISet> _out581; (this).GenIdent(Dafny.Sequence.UnicodeFromString("self"), selfIdent, DCOMP.Environment.Empty(), DCOMP.Ownership.create_OwnershipOwned(), out _out579, out _out580, out _out581); - _2129_selfCloned = _out579; - _2130___v211 = _out580; - _2131___v212 = _out581; - _2127_allReadCloned = (_2127_allReadCloned).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), Dafny.Sequence.UnicodeFromString("_this"), Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_2129_selfCloned))); - } else if (!((_2117_paramNames).Contains(_2128_next))) { - RAST._IExpr _2132_copy; - _2132_copy = (RAST.Expr.create_Identifier(_2128_next)).Clone(); - _2127_allReadCloned = (_2127_allReadCloned).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _2128_next, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_2132_copy))); - readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.FromElements(_2128_next)); + _2133_selfCloned = _out579; + _2134___v211 = _out580; + _2135___v212 = _out581; + _2131_allReadCloned = (_2131_allReadCloned).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), Dafny.Sequence.UnicodeFromString("_this"), Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_2133_selfCloned))); + } else if (!((_2121_paramNames).Contains(_2132_next))) { + RAST._IExpr _2136_copy; + _2136_copy = (RAST.Expr.create_Identifier(_2132_next)).Clone(); + _2131_allReadCloned = (_2131_allReadCloned).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_MUT(), _2132_next, Std.Wrappers.Option.create_None(), Std.Wrappers.Option.create_Some(_2136_copy))); + readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.FromElements(_2132_next)); } - _2123_recIdents = Dafny.Set>.Difference(_2123_recIdents, Dafny.Set>.FromElements(_2128_next)); + _2127_recIdents = Dafny.Set>.Difference(_2127_recIdents, Dafny.Set>.FromElements(_2132_next)); } - RAST._IType _2133_retTypeGen; + RAST._IType _2137_retTypeGen; RAST._IType _out582; - _out582 = (this).GenType(_2114_retType, DCOMP.GenTypeContext.InFn()); - _2133_retTypeGen = _out582; - r = RAST.Expr.create_Block((_2127_allReadCloned).Then(RAST.__default.RcNew(RAST.Expr.create_Lambda(_2116_params, Std.Wrappers.Option.create_Some(_2133_retTypeGen), RAST.Expr.create_Block(_2122_recursiveGen))))); + _out582 = (this).GenType(_2118_retType, DCOMP.GenTypeContext.InFn()); + _2137_retTypeGen = _out582; + r = RAST.Expr.create_Block((_2131_allReadCloned).Then(RAST.__default.RcNew(RAST.Expr.create_Lambda(_2120_params, Std.Wrappers.Option.create_Some(_2137_retTypeGen), RAST.Expr.create_Block(_2126_recursiveGen))))); RAST._IExpr _out583; DCOMP._IOwnership _out584; (this).FromOwned(r, expectedOwnership, out _out583, out _out584); @@ -6631,70 +6652,70 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_BetaRedex) { - Dafny.ISequence<_System._ITuple2> _2134_values = _source96.dtor_values; - DAST._IType _2135_retType = _source96.dtor_retType; - DAST._IExpression _2136_expr = _source96.dtor_expr; + Dafny.ISequence<_System._ITuple2> _2138_values = _source96.dtor_values; + DAST._IType _2139_retType = _source96.dtor_retType; + DAST._IExpression _2140_expr = _source96.dtor_expr; { - Dafny.ISequence> _2137_paramNames; - _2137_paramNames = Dafny.Sequence>.FromElements(); - Dafny.ISequence _2138_paramFormals; + Dafny.ISequence> _2141_paramNames; + _2141_paramNames = Dafny.Sequence>.FromElements(); + Dafny.ISequence _2142_paramFormals; Dafny.ISequence _out585; - _out585 = (this).GenParams(Std.Collections.Seq.__default.Map<_System._ITuple2, DAST._IFormal>(((System.Func<_System._ITuple2, DAST._IFormal>)((_2139_value) => { - return (_2139_value).dtor__0; - })), _2134_values)); - _2138_paramFormals = _out585; - Dafny.IMap,RAST._IType> _2140_paramTypes; - _2140_paramTypes = Dafny.Map, RAST._IType>.FromElements(); - Dafny.ISet> _2141_paramNamesSet; - _2141_paramNamesSet = Dafny.Set>.FromElements(); - BigInteger _hi48 = new BigInteger((_2134_values).Count); - for (BigInteger _2142_i = BigInteger.Zero; _2142_i < _hi48; _2142_i++) { - Dafny.ISequence _2143_name; - _2143_name = (((_2134_values).Select(_2142_i)).dtor__0).dtor_name; - Dafny.ISequence _2144_rName; - _2144_rName = DCOMP.__default.escapeName(_2143_name); - _2137_paramNames = Dafny.Sequence>.Concat(_2137_paramNames, Dafny.Sequence>.FromElements(_2144_rName)); - _2140_paramTypes = Dafny.Map, RAST._IType>.Update(_2140_paramTypes, _2144_rName, ((_2138_paramFormals).Select(_2142_i)).dtor_tpe); - _2141_paramNamesSet = Dafny.Set>.Union(_2141_paramNamesSet, Dafny.Set>.FromElements(_2144_rName)); + _out585 = (this).GenParams(Std.Collections.Seq.__default.Map<_System._ITuple2, DAST._IFormal>(((System.Func<_System._ITuple2, DAST._IFormal>)((_2143_value) => { + return (_2143_value).dtor__0; + })), _2138_values)); + _2142_paramFormals = _out585; + Dafny.IMap,RAST._IType> _2144_paramTypes; + _2144_paramTypes = Dafny.Map, RAST._IType>.FromElements(); + Dafny.ISet> _2145_paramNamesSet; + _2145_paramNamesSet = Dafny.Set>.FromElements(); + BigInteger _hi48 = new BigInteger((_2138_values).Count); + for (BigInteger _2146_i = BigInteger.Zero; _2146_i < _hi48; _2146_i++) { + Dafny.ISequence _2147_name; + _2147_name = (((_2138_values).Select(_2146_i)).dtor__0).dtor_name; + Dafny.ISequence _2148_rName; + _2148_rName = DCOMP.__default.escapeName(_2147_name); + _2141_paramNames = Dafny.Sequence>.Concat(_2141_paramNames, Dafny.Sequence>.FromElements(_2148_rName)); + _2144_paramTypes = Dafny.Map, RAST._IType>.Update(_2144_paramTypes, _2148_rName, ((_2142_paramFormals).Select(_2146_i)).dtor_tpe); + _2145_paramNamesSet = Dafny.Set>.Union(_2145_paramNamesSet, Dafny.Set>.FromElements(_2148_rName)); } readIdents = Dafny.Set>.FromElements(); r = RAST.Expr.create_RawExpr(Dafny.Sequence.UnicodeFromString("")); - BigInteger _hi49 = new BigInteger((_2134_values).Count); - for (BigInteger _2145_i = BigInteger.Zero; _2145_i < _hi49; _2145_i++) { - RAST._IType _2146_typeGen; + BigInteger _hi49 = new BigInteger((_2138_values).Count); + for (BigInteger _2149_i = BigInteger.Zero; _2149_i < _hi49; _2149_i++) { + RAST._IType _2150_typeGen; RAST._IType _out586; - _out586 = (this).GenType((((_2134_values).Select(_2145_i)).dtor__0).dtor_typ, DCOMP.GenTypeContext.InFn()); - _2146_typeGen = _out586; - RAST._IExpr _2147_valueGen; - DCOMP._IOwnership _2148___v213; - Dafny.ISet> _2149_recIdents; + _out586 = (this).GenType((((_2138_values).Select(_2149_i)).dtor__0).dtor_typ, DCOMP.GenTypeContext.InFn()); + _2150_typeGen = _out586; + RAST._IExpr _2151_valueGen; + DCOMP._IOwnership _2152___v213; + Dafny.ISet> _2153_recIdents; RAST._IExpr _out587; DCOMP._IOwnership _out588; Dafny.ISet> _out589; - (this).GenExpr(((_2134_values).Select(_2145_i)).dtor__1, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out587, out _out588, out _out589); - _2147_valueGen = _out587; - _2148___v213 = _out588; - _2149_recIdents = _out589; - r = (r).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), DCOMP.__default.escapeName((((_2134_values).Select(_2145_i)).dtor__0).dtor_name), Std.Wrappers.Option.create_Some(_2146_typeGen), Std.Wrappers.Option.create_Some(_2147_valueGen))); - readIdents = Dafny.Set>.Union(readIdents, _2149_recIdents); + (this).GenExpr(((_2138_values).Select(_2149_i)).dtor__1, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out587, out _out588, out _out589); + _2151_valueGen = _out587; + _2152___v213 = _out588; + _2153_recIdents = _out589; + r = (r).Then(RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), DCOMP.__default.escapeName((((_2138_values).Select(_2149_i)).dtor__0).dtor_name), Std.Wrappers.Option.create_Some(_2150_typeGen), Std.Wrappers.Option.create_Some(_2151_valueGen))); + readIdents = Dafny.Set>.Union(readIdents, _2153_recIdents); } - DCOMP._IEnvironment _2150_newEnv; - _2150_newEnv = DCOMP.Environment.create(_2137_paramNames, _2140_paramTypes); - RAST._IExpr _2151_recGen; - DCOMP._IOwnership _2152_recOwned; - Dafny.ISet> _2153_recIdents; + DCOMP._IEnvironment _2154_newEnv; + _2154_newEnv = DCOMP.Environment.create(_2141_paramNames, _2144_paramTypes); + RAST._IExpr _2155_recGen; + DCOMP._IOwnership _2156_recOwned; + Dafny.ISet> _2157_recIdents; RAST._IExpr _out590; DCOMP._IOwnership _out591; Dafny.ISet> _out592; - (this).GenExpr(_2136_expr, selfIdent, _2150_newEnv, expectedOwnership, out _out590, out _out591, out _out592); - _2151_recGen = _out590; - _2152_recOwned = _out591; - _2153_recIdents = _out592; - readIdents = Dafny.Set>.Difference(_2153_recIdents, _2141_paramNamesSet); - r = RAST.Expr.create_Block((r).Then(_2151_recGen)); + (this).GenExpr(_2140_expr, selfIdent, _2154_newEnv, expectedOwnership, out _out590, out _out591, out _out592); + _2155_recGen = _out590; + _2156_recOwned = _out591; + _2157_recIdents = _out592; + readIdents = Dafny.Set>.Difference(_2157_recIdents, _2145_paramNamesSet); + r = RAST.Expr.create_Block((r).Then(_2155_recGen)); RAST._IExpr _out593; DCOMP._IOwnership _out594; - (this).FromOwnership(r, _2152_recOwned, expectedOwnership, out _out593, out _out594); + (this).FromOwnership(r, _2156_recOwned, expectedOwnership, out _out593, out _out594); r = _out593; resultingOwnership = _out594; return ; @@ -6704,38 +6725,38 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_IIFE) { - Dafny.ISequence _2154_name = _source96.dtor_ident; - DAST._IType _2155_tpe = _source96.dtor_typ; - DAST._IExpression _2156_value = _source96.dtor_value; - DAST._IExpression _2157_iifeBody = _source96.dtor_iifeBody; + Dafny.ISequence _2158_name = _source96.dtor_ident; + DAST._IType _2159_tpe = _source96.dtor_typ; + DAST._IExpression _2160_value = _source96.dtor_value; + DAST._IExpression _2161_iifeBody = _source96.dtor_iifeBody; { - RAST._IExpr _2158_valueGen; - DCOMP._IOwnership _2159___v214; - Dafny.ISet> _2160_recIdents; + RAST._IExpr _2162_valueGen; + DCOMP._IOwnership _2163___v214; + Dafny.ISet> _2164_recIdents; RAST._IExpr _out595; DCOMP._IOwnership _out596; Dafny.ISet> _out597; - (this).GenExpr(_2156_value, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out595, out _out596, out _out597); - _2158_valueGen = _out595; - _2159___v214 = _out596; - _2160_recIdents = _out597; - readIdents = _2160_recIdents; - RAST._IType _2161_valueTypeGen; + (this).GenExpr(_2160_value, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out595, out _out596, out _out597); + _2162_valueGen = _out595; + _2163___v214 = _out596; + _2164_recIdents = _out597; + readIdents = _2164_recIdents; + RAST._IType _2165_valueTypeGen; RAST._IType _out598; - _out598 = (this).GenType(_2155_tpe, DCOMP.GenTypeContext.InFn()); - _2161_valueTypeGen = _out598; - RAST._IExpr _2162_bodyGen; - DCOMP._IOwnership _2163___v215; - Dafny.ISet> _2164_bodyIdents; + _out598 = (this).GenType(_2159_tpe, DCOMP.GenTypeContext.InFn()); + _2165_valueTypeGen = _out598; + RAST._IExpr _2166_bodyGen; + DCOMP._IOwnership _2167___v215; + Dafny.ISet> _2168_bodyIdents; RAST._IExpr _out599; DCOMP._IOwnership _out600; Dafny.ISet> _out601; - (this).GenExpr(_2157_iifeBody, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out599, out _out600, out _out601); - _2162_bodyGen = _out599; - _2163___v215 = _out600; - _2164_bodyIdents = _out601; - readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.Difference(_2164_bodyIdents, Dafny.Set>.FromElements(DCOMP.__default.escapeName((_2154_name))))); - r = RAST.Expr.create_Block((RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), DCOMP.__default.escapeName((_2154_name)), Std.Wrappers.Option.create_Some(_2161_valueTypeGen), Std.Wrappers.Option.create_Some(_2158_valueGen))).Then(_2162_bodyGen)); + (this).GenExpr(_2161_iifeBody, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out599, out _out600, out _out601); + _2166_bodyGen = _out599; + _2167___v215 = _out600; + _2168_bodyIdents = _out601; + readIdents = Dafny.Set>.Union(readIdents, Dafny.Set>.Difference(_2168_bodyIdents, Dafny.Set>.FromElements(DCOMP.__default.escapeName((_2158_name))))); + r = RAST.Expr.create_Block((RAST.Expr.create_DeclareVar(RAST.DeclareType.create_CONST(), DCOMP.__default.escapeName((_2158_name)), Std.Wrappers.Option.create_Some(_2165_valueTypeGen), Std.Wrappers.Option.create_Some(_2162_valueGen))).Then(_2166_bodyGen)); RAST._IExpr _out602; DCOMP._IOwnership _out603; (this).FromOwned(r, expectedOwnership, out _out602, out _out603); @@ -6748,38 +6769,38 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_Apply) { - DAST._IExpression _2165_func = _source96.dtor_expr; - Dafny.ISequence _2166_args = _source96.dtor_args; + DAST._IExpression _2169_func = _source96.dtor_expr; + Dafny.ISequence _2170_args = _source96.dtor_args; { - RAST._IExpr _2167_funcExpr; - DCOMP._IOwnership _2168___v216; - Dafny.ISet> _2169_recIdents; + RAST._IExpr _2171_funcExpr; + DCOMP._IOwnership _2172___v216; + Dafny.ISet> _2173_recIdents; RAST._IExpr _out604; DCOMP._IOwnership _out605; Dafny.ISet> _out606; - (this).GenExpr(_2165_func, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out604, out _out605, out _out606); - _2167_funcExpr = _out604; - _2168___v216 = _out605; - _2169_recIdents = _out606; - readIdents = _2169_recIdents; - Dafny.ISequence _2170_rArgs; - _2170_rArgs = Dafny.Sequence.FromElements(); - BigInteger _hi50 = new BigInteger((_2166_args).Count); - for (BigInteger _2171_i = BigInteger.Zero; _2171_i < _hi50; _2171_i++) { - RAST._IExpr _2172_argExpr; - DCOMP._IOwnership _2173_argOwned; - Dafny.ISet> _2174_argIdents; + (this).GenExpr(_2169_func, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out604, out _out605, out _out606); + _2171_funcExpr = _out604; + _2172___v216 = _out605; + _2173_recIdents = _out606; + readIdents = _2173_recIdents; + Dafny.ISequence _2174_rArgs; + _2174_rArgs = Dafny.Sequence.FromElements(); + BigInteger _hi50 = new BigInteger((_2170_args).Count); + for (BigInteger _2175_i = BigInteger.Zero; _2175_i < _hi50; _2175_i++) { + RAST._IExpr _2176_argExpr; + DCOMP._IOwnership _2177_argOwned; + Dafny.ISet> _2178_argIdents; RAST._IExpr _out607; DCOMP._IOwnership _out608; Dafny.ISet> _out609; - (this).GenExpr((_2166_args).Select(_2171_i), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out607, out _out608, out _out609); - _2172_argExpr = _out607; - _2173_argOwned = _out608; - _2174_argIdents = _out609; - _2170_rArgs = Dafny.Sequence.Concat(_2170_rArgs, Dafny.Sequence.FromElements(_2172_argExpr)); - readIdents = Dafny.Set>.Union(readIdents, _2174_argIdents); + (this).GenExpr((_2170_args).Select(_2175_i), selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out607, out _out608, out _out609); + _2176_argExpr = _out607; + _2177_argOwned = _out608; + _2178_argIdents = _out609; + _2174_rArgs = Dafny.Sequence.Concat(_2174_rArgs, Dafny.Sequence.FromElements(_2176_argExpr)); + readIdents = Dafny.Set>.Union(readIdents, _2178_argIdents); } - r = (_2167_funcExpr).Apply(_2170_rArgs); + r = (_2171_funcExpr).Apply(_2174_rArgs); RAST._IExpr _out610; DCOMP._IOwnership _out611; (this).FromOwned(r, expectedOwnership, out _out610, out _out611); @@ -6792,31 +6813,31 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_TypeTest) { - DAST._IExpression _2175_on = _source96.dtor_on; - Dafny.ISequence> _2176_dType = _source96.dtor_dType; - Dafny.ISequence _2177_variant = _source96.dtor_variant; + DAST._IExpression _2179_on = _source96.dtor_on; + Dafny.ISequence> _2180_dType = _source96.dtor_dType; + Dafny.ISequence _2181_variant = _source96.dtor_variant; { - RAST._IExpr _2178_exprGen; - DCOMP._IOwnership _2179___v217; - Dafny.ISet> _2180_recIdents; + RAST._IExpr _2182_exprGen; + DCOMP._IOwnership _2183___v217; + Dafny.ISet> _2184_recIdents; RAST._IExpr _out612; DCOMP._IOwnership _out613; Dafny.ISet> _out614; - (this).GenExpr(_2175_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out612, out _out613, out _out614); - _2178_exprGen = _out612; - _2179___v217 = _out613; - _2180_recIdents = _out614; - RAST._IType _2181_dTypePath; + (this).GenExpr(_2179_on, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out612, out _out613, out _out614); + _2182_exprGen = _out612; + _2183___v217 = _out613; + _2184_recIdents = _out614; + RAST._IType _2185_dTypePath; RAST._IType _out615; - _out615 = DCOMP.COMP.GenPath(_2176_dType); - _2181_dTypePath = _out615; - r = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("matches!"))).Apply(Dafny.Sequence.FromElements(((_2178_exprGen).Sel(Dafny.Sequence.UnicodeFromString("as_ref"))).Apply(Dafny.Sequence.FromElements()), RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(((_2181_dTypePath).MSel(DCOMP.__default.escapeName(_2177_variant)))._ToString(DCOMP.__default.IND), Dafny.Sequence.UnicodeFromString("{ .. }"))))); + _out615 = DCOMP.COMP.GenPath(_2180_dType); + _2185_dTypePath = _out615; + r = (RAST.Expr.create_Identifier(Dafny.Sequence.UnicodeFromString("matches!"))).Apply(Dafny.Sequence.FromElements(((_2182_exprGen).Sel(Dafny.Sequence.UnicodeFromString("as_ref"))).Apply(Dafny.Sequence.FromElements()), RAST.Expr.create_RawExpr(Dafny.Sequence.Concat(((_2185_dTypePath).MSel(DCOMP.__default.escapeName(_2181_variant)))._ToString(DCOMP.__default.IND), Dafny.Sequence.UnicodeFromString("{ .. }"))))); RAST._IExpr _out616; DCOMP._IOwnership _out617; (this).FromOwned(r, expectedOwnership, out _out616, out _out617); r = _out616; resultingOwnership = _out617; - readIdents = _2180_recIdents; + readIdents = _2184_recIdents; return ; } goto after_match41; @@ -6839,25 +6860,25 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SetBoundedPool) { - DAST._IExpression _2182_of = _source96.dtor_of; + DAST._IExpression _2186_of = _source96.dtor_of; { - RAST._IExpr _2183_exprGen; - DCOMP._IOwnership _2184___v218; - Dafny.ISet> _2185_recIdents; + RAST._IExpr _2187_exprGen; + DCOMP._IOwnership _2188___v218; + Dafny.ISet> _2189_recIdents; RAST._IExpr _out620; DCOMP._IOwnership _out621; Dafny.ISet> _out622; - (this).GenExpr(_2182_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out620, out _out621, out _out622); - _2183_exprGen = _out620; - _2184___v218 = _out621; - _2185_recIdents = _out622; - r = ((_2183_exprGen).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); + (this).GenExpr(_2186_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out620, out _out621, out _out622); + _2187_exprGen = _out620; + _2188___v218 = _out621; + _2189_recIdents = _out622; + r = ((_2187_exprGen).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out623; DCOMP._IOwnership _out624; (this).FromOwned(r, expectedOwnership, out _out623, out _out624); r = _out623; resultingOwnership = _out624; - readIdents = _2185_recIdents; + readIdents = _2189_recIdents; return ; } goto after_match41; @@ -6865,21 +6886,21 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SeqBoundedPool) { - DAST._IExpression _2186_of = _source96.dtor_of; - bool _2187_includeDuplicates = _source96.dtor_includeDuplicates; + DAST._IExpression _2190_of = _source96.dtor_of; + bool _2191_includeDuplicates = _source96.dtor_includeDuplicates; { - RAST._IExpr _2188_exprGen; - DCOMP._IOwnership _2189___v219; - Dafny.ISet> _2190_recIdents; + RAST._IExpr _2192_exprGen; + DCOMP._IOwnership _2193___v219; + Dafny.ISet> _2194_recIdents; RAST._IExpr _out625; DCOMP._IOwnership _out626; Dafny.ISet> _out627; - (this).GenExpr(_2186_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out625, out _out626, out _out627); - _2188_exprGen = _out625; - _2189___v219 = _out626; - _2190_recIdents = _out627; - r = ((_2188_exprGen).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); - if (!(_2187_includeDuplicates)) { + (this).GenExpr(_2190_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out625, out _out626, out _out627); + _2192_exprGen = _out625; + _2193___v219 = _out626; + _2194_recIdents = _out627; + r = ((_2192_exprGen).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); + if (!(_2191_includeDuplicates)) { r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("itertools"))).MSel(Dafny.Sequence.UnicodeFromString("Itertools"))).MSel(Dafny.Sequence.UnicodeFromString("unique"))).Apply1(r); } RAST._IExpr _out628; @@ -6887,7 +6908,7 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv (this).FromOwned(r, expectedOwnership, out _out628, out _out629); r = _out628; resultingOwnership = _out629; - readIdents = _2190_recIdents; + readIdents = _2194_recIdents; return ; } goto after_match41; @@ -6895,20 +6916,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapBoundedPool) { - DAST._IExpression _2191_of = _source96.dtor_of; + DAST._IExpression _2195_of = _source96.dtor_of; { - RAST._IExpr _2192_exprGen; - DCOMP._IOwnership _2193___v220; - Dafny.ISet> _2194_recIdents; + RAST._IExpr _2196_exprGen; + DCOMP._IOwnership _2197___v220; + Dafny.ISet> _2198_recIdents; RAST._IExpr _out630; DCOMP._IOwnership _out631; Dafny.ISet> _out632; - (this).GenExpr(_2191_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out630, out _out631, out _out632); - _2192_exprGen = _out630; - _2193___v220 = _out631; - _2194_recIdents = _out632; - r = ((((_2192_exprGen).Sel(Dafny.Sequence.UnicodeFromString("keys"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); - readIdents = _2194_recIdents; + (this).GenExpr(_2195_of, selfIdent, env, DCOMP.Ownership.create_OwnershipBorrowed(), out _out630, out _out631, out _out632); + _2196_exprGen = _out630; + _2197___v220 = _out631; + _2198_recIdents = _out632; + r = ((((_2196_exprGen).Sel(Dafny.Sequence.UnicodeFromString("keys"))).Apply(Dafny.Sequence.FromElements())).Sel(Dafny.Sequence.UnicodeFromString("iter"))).Apply(Dafny.Sequence.FromElements()); + readIdents = _2198_recIdents; RAST._IExpr _out633; DCOMP._IOwnership _out634; (this).FromOwned(r, expectedOwnership, out _out633, out _out634); @@ -6920,41 +6941,41 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_IntRange) { - DAST._IExpression _2195_lo = _source96.dtor_lo; - DAST._IExpression _2196_hi = _source96.dtor_hi; - bool _2197_up = _source96.dtor_up; + DAST._IExpression _2199_lo = _source96.dtor_lo; + DAST._IExpression _2200_hi = _source96.dtor_hi; + bool _2201_up = _source96.dtor_up; { - RAST._IExpr _2198_lo; - DCOMP._IOwnership _2199___v221; - Dafny.ISet> _2200_recIdentsLo; + RAST._IExpr _2202_lo; + DCOMP._IOwnership _2203___v221; + Dafny.ISet> _2204_recIdentsLo; RAST._IExpr _out635; DCOMP._IOwnership _out636; Dafny.ISet> _out637; - (this).GenExpr(_2195_lo, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out635, out _out636, out _out637); - _2198_lo = _out635; - _2199___v221 = _out636; - _2200_recIdentsLo = _out637; - RAST._IExpr _2201_hi; - DCOMP._IOwnership _2202___v222; - Dafny.ISet> _2203_recIdentsHi; + (this).GenExpr(_2199_lo, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out635, out _out636, out _out637); + _2202_lo = _out635; + _2203___v221 = _out636; + _2204_recIdentsLo = _out637; + RAST._IExpr _2205_hi; + DCOMP._IOwnership _2206___v222; + Dafny.ISet> _2207_recIdentsHi; RAST._IExpr _out638; DCOMP._IOwnership _out639; Dafny.ISet> _out640; - (this).GenExpr(_2196_hi, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out638, out _out639, out _out640); - _2201_hi = _out638; - _2202___v222 = _out639; - _2203_recIdentsHi = _out640; - if (_2197_up) { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range"))).Apply(Dafny.Sequence.FromElements(_2198_lo, _2201_hi)); + (this).GenExpr(_2200_hi, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out638, out _out639, out _out640); + _2205_hi = _out638; + _2206___v222 = _out639; + _2207_recIdentsHi = _out640; + if (_2201_up) { + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range"))).Apply(Dafny.Sequence.FromElements(_2202_lo, _2205_hi)); } else { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_down"))).Apply(Dafny.Sequence.FromElements(_2201_hi, _2198_lo)); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_down"))).Apply(Dafny.Sequence.FromElements(_2205_hi, _2202_lo)); } RAST._IExpr _out641; DCOMP._IOwnership _out642; (this).FromOwned(r, expectedOwnership, out _out641, out _out642); r = _out641; resultingOwnership = _out642; - readIdents = Dafny.Set>.Union(_2200_recIdentsLo, _2203_recIdentsHi); + readIdents = Dafny.Set>.Union(_2204_recIdentsLo, _2207_recIdentsHi); return ; } goto after_match41; @@ -6962,30 +6983,30 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_UnboundedIntRange) { - DAST._IExpression _2204_start = _source96.dtor_start; - bool _2205_up = _source96.dtor_up; + DAST._IExpression _2208_start = _source96.dtor_start; + bool _2209_up = _source96.dtor_up; { - RAST._IExpr _2206_start; - DCOMP._IOwnership _2207___v223; - Dafny.ISet> _2208_recIdentStart; + RAST._IExpr _2210_start; + DCOMP._IOwnership _2211___v223; + Dafny.ISet> _2212_recIdentStart; RAST._IExpr _out643; DCOMP._IOwnership _out644; Dafny.ISet> _out645; - (this).GenExpr(_2204_start, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out643, out _out644, out _out645); - _2206_start = _out643; - _2207___v223 = _out644; - _2208_recIdentStart = _out645; - if (_2205_up) { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_unbounded"))).Apply1(_2206_start); + (this).GenExpr(_2208_start, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out643, out _out644, out _out645); + _2210_start = _out643; + _2211___v223 = _out644; + _2212_recIdentStart = _out645; + if (_2209_up) { + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_unbounded"))).Apply1(_2210_start); } else { - r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_down_unbounded"))).Apply1(_2206_start); + r = ((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("integer_range_down_unbounded"))).Apply1(_2210_start); } RAST._IExpr _out646; DCOMP._IOwnership _out647; (this).FromOwned(r, expectedOwnership, out _out646, out _out647); r = _out646; resultingOwnership = _out647; - readIdents = _2208_recIdentStart; + readIdents = _2212_recIdentStart; return ; } goto after_match41; @@ -6993,18 +7014,18 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_MapBuilder) { - DAST._IType _2209_keyType = _source96.dtor_keyType; - DAST._IType _2210_valueType = _source96.dtor_valueType; + DAST._IType _2213_keyType = _source96.dtor_keyType; + DAST._IType _2214_valueType = _source96.dtor_valueType; { - RAST._IType _2211_kType; + RAST._IType _2215_kType; RAST._IType _out648; - _out648 = (this).GenType(_2209_keyType, DCOMP.GenTypeContext.@default()); - _2211_kType = _out648; - RAST._IType _2212_vType; + _out648 = (this).GenType(_2213_keyType, DCOMP.GenTypeContext.@default()); + _2215_kType = _out648; + RAST._IType _2216_vType; RAST._IType _out649; - _out649 = (this).GenType(_2210_valueType, DCOMP.GenTypeContext.@default()); - _2212_vType = _out649; - r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("MapBuilder"))).ApplyType(Dafny.Sequence.FromElements(_2211_kType, _2212_vType))).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()); + _out649 = (this).GenType(_2214_valueType, DCOMP.GenTypeContext.@default()); + _2216_vType = _out649; + r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("MapBuilder"))).ApplyType(Dafny.Sequence.FromElements(_2215_kType, _2216_vType))).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out650; DCOMP._IOwnership _out651; (this).FromOwned(r, expectedOwnership, out _out650, out _out651); @@ -7018,14 +7039,14 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } { if (_source96.is_SetBuilder) { - DAST._IType _2213_elemType = _source96.dtor_elemType; + DAST._IType _2217_elemType = _source96.dtor_elemType; { - RAST._IType _2214_eType; + RAST._IType _2218_eType; RAST._IType _out652; - _out652 = (this).GenType(_2213_elemType, DCOMP.GenTypeContext.@default()); - _2214_eType = _out652; + _out652 = (this).GenType(_2217_elemType, DCOMP.GenTypeContext.@default()); + _2218_eType = _out652; readIdents = Dafny.Set>.FromElements(); - r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("SetBuilder"))).ApplyType(Dafny.Sequence.FromElements(_2214_eType))).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()); + r = ((((RAST.__default.dafny__runtime).MSel(Dafny.Sequence.UnicodeFromString("SetBuilder"))).ApplyType(Dafny.Sequence.FromElements(_2218_eType))).MSel(Dafny.Sequence.UnicodeFromString("new"))).Apply(Dafny.Sequence.FromElements()); RAST._IExpr _out653; DCOMP._IOwnership _out654; (this).FromOwned(r, expectedOwnership, out _out653, out _out654); @@ -7037,63 +7058,63 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv } } { - DAST._IType _2215_elemType = _source96.dtor_elemType; - DAST._IExpression _2216_collection = _source96.dtor_collection; - bool _2217_is__forall = _source96.dtor_is__forall; - DAST._IExpression _2218_lambda = _source96.dtor_lambda; + DAST._IType _2219_elemType = _source96.dtor_elemType; + DAST._IExpression _2220_collection = _source96.dtor_collection; + bool _2221_is__forall = _source96.dtor_is__forall; + DAST._IExpression _2222_lambda = _source96.dtor_lambda; { - RAST._IType _2219_tpe; + RAST._IType _2223_tpe; RAST._IType _out655; - _out655 = (this).GenType(_2215_elemType, DCOMP.GenTypeContext.@default()); - _2219_tpe = _out655; - RAST._IExpr _2220_collectionGen; - DCOMP._IOwnership _2221___v224; - Dafny.ISet> _2222_recIdents; + _out655 = (this).GenType(_2219_elemType, DCOMP.GenTypeContext.@default()); + _2223_tpe = _out655; + RAST._IExpr _2224_collectionGen; + DCOMP._IOwnership _2225___v224; + Dafny.ISet> _2226_recIdents; RAST._IExpr _out656; DCOMP._IOwnership _out657; Dafny.ISet> _out658; - (this).GenExpr(_2216_collection, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out656, out _out657, out _out658); - _2220_collectionGen = _out656; - _2221___v224 = _out657; - _2222_recIdents = _out658; - Dafny.ISequence _2223_extraAttributes; - _2223_extraAttributes = Dafny.Sequence.FromElements(); - if ((((_2216_collection).is_IntRange) || ((_2216_collection).is_UnboundedIntRange)) || ((_2216_collection).is_SeqBoundedPool)) { - _2223_extraAttributes = Dafny.Sequence.FromElements(DCOMP.__default.AttributeOwned); - } - if ((_2218_lambda).is_Lambda) { - Dafny.ISequence _2224_formals; - _2224_formals = (_2218_lambda).dtor_params; - Dafny.ISequence _2225_newFormals; - _2225_newFormals = Dafny.Sequence.FromElements(); - BigInteger _hi51 = new BigInteger((_2224_formals).Count); - for (BigInteger _2226_i = BigInteger.Zero; _2226_i < _hi51; _2226_i++) { - var _pat_let_tv4 = _2223_extraAttributes; - var _pat_let_tv5 = _2224_formals; - _2225_newFormals = Dafny.Sequence.Concat(_2225_newFormals, Dafny.Sequence.FromElements(Dafny.Helpers.Let((_2224_formals).Select(_2226_i), _pat_let34_0 => Dafny.Helpers.Let(_pat_let34_0, _2227_dt__update__tmp_h0 => Dafny.Helpers.Let, DAST._IFormal>(Dafny.Sequence.Concat(_pat_let_tv4, ((_pat_let_tv5).Select(_2226_i)).dtor_attributes), _pat_let35_0 => Dafny.Helpers.Let, DAST._IFormal>(_pat_let35_0, _2228_dt__update_hattributes_h0 => DAST.Formal.create((_2227_dt__update__tmp_h0).dtor_name, (_2227_dt__update__tmp_h0).dtor_typ, _2228_dt__update_hattributes_h0))))))); + (this).GenExpr(_2220_collection, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out656, out _out657, out _out658); + _2224_collectionGen = _out656; + _2225___v224 = _out657; + _2226_recIdents = _out658; + Dafny.ISequence _2227_extraAttributes; + _2227_extraAttributes = Dafny.Sequence.FromElements(); + if ((((_2220_collection).is_IntRange) || ((_2220_collection).is_UnboundedIntRange)) || ((_2220_collection).is_SeqBoundedPool)) { + _2227_extraAttributes = Dafny.Sequence.FromElements(DCOMP.__default.AttributeOwned); + } + if ((_2222_lambda).is_Lambda) { + Dafny.ISequence _2228_formals; + _2228_formals = (_2222_lambda).dtor_params; + Dafny.ISequence _2229_newFormals; + _2229_newFormals = Dafny.Sequence.FromElements(); + BigInteger _hi51 = new BigInteger((_2228_formals).Count); + for (BigInteger _2230_i = BigInteger.Zero; _2230_i < _hi51; _2230_i++) { + var _pat_let_tv4 = _2227_extraAttributes; + var _pat_let_tv5 = _2228_formals; + _2229_newFormals = Dafny.Sequence.Concat(_2229_newFormals, Dafny.Sequence.FromElements(Dafny.Helpers.Let((_2228_formals).Select(_2230_i), _pat_let34_0 => Dafny.Helpers.Let(_pat_let34_0, _2231_dt__update__tmp_h0 => Dafny.Helpers.Let, DAST._IFormal>(Dafny.Sequence.Concat(_pat_let_tv4, ((_pat_let_tv5).Select(_2230_i)).dtor_attributes), _pat_let35_0 => Dafny.Helpers.Let, DAST._IFormal>(_pat_let35_0, _2232_dt__update_hattributes_h0 => DAST.Formal.create((_2231_dt__update__tmp_h0).dtor_name, (_2231_dt__update__tmp_h0).dtor_typ, _2232_dt__update_hattributes_h0))))))); } - DAST._IExpression _2229_newLambda; - DAST._IExpression _2230_dt__update__tmp_h1 = _2218_lambda; - Dafny.ISequence _2231_dt__update_hparams_h0 = _2225_newFormals; - _2229_newLambda = DAST.Expression.create_Lambda(_2231_dt__update_hparams_h0, (_2230_dt__update__tmp_h1).dtor_retType, (_2230_dt__update__tmp_h1).dtor_body); - RAST._IExpr _2232_lambdaGen; - DCOMP._IOwnership _2233___v225; - Dafny.ISet> _2234_recLambdaIdents; + DAST._IExpression _2233_newLambda; + DAST._IExpression _2234_dt__update__tmp_h1 = _2222_lambda; + Dafny.ISequence _2235_dt__update_hparams_h0 = _2229_newFormals; + _2233_newLambda = DAST.Expression.create_Lambda(_2235_dt__update_hparams_h0, (_2234_dt__update__tmp_h1).dtor_retType, (_2234_dt__update__tmp_h1).dtor_body); + RAST._IExpr _2236_lambdaGen; + DCOMP._IOwnership _2237___v225; + Dafny.ISet> _2238_recLambdaIdents; RAST._IExpr _out659; DCOMP._IOwnership _out660; Dafny.ISet> _out661; - (this).GenExpr(_2229_newLambda, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out659, out _out660, out _out661); - _2232_lambdaGen = _out659; - _2233___v225 = _out660; - _2234_recLambdaIdents = _out661; - Dafny.ISequence _2235_fn; - if (_2217_is__forall) { - _2235_fn = Dafny.Sequence.UnicodeFromString("all"); + (this).GenExpr(_2233_newLambda, selfIdent, env, DCOMP.Ownership.create_OwnershipOwned(), out _out659, out _out660, out _out661); + _2236_lambdaGen = _out659; + _2237___v225 = _out660; + _2238_recLambdaIdents = _out661; + Dafny.ISequence _2239_fn; + if (_2221_is__forall) { + _2239_fn = Dafny.Sequence.UnicodeFromString("all"); } else { - _2235_fn = Dafny.Sequence.UnicodeFromString("any"); + _2239_fn = Dafny.Sequence.UnicodeFromString("any"); } - r = ((_2220_collectionGen).Sel(_2235_fn)).Apply1(((_2232_lambdaGen).Sel(Dafny.Sequence.UnicodeFromString("as_ref"))).Apply(Dafny.Sequence.FromElements())); - readIdents = Dafny.Set>.Union(_2222_recIdents, _2234_recLambdaIdents); + r = ((_2224_collectionGen).Sel(_2239_fn)).Apply1(((_2236_lambdaGen).Sel(Dafny.Sequence.UnicodeFromString("as_ref"))).Apply(Dafny.Sequence.FromElements())); + readIdents = Dafny.Set>.Union(_2226_recIdents, _2238_recLambdaIdents); } else { (this).error = Std.Wrappers.Option>.create_Some(Dafny.Sequence.UnicodeFromString("Quantifier without an inline lambda")); r = RAST.Expr.create_RawExpr((this.error).dtor_value); @@ -7113,20 +7134,20 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv Dafny.ISequence s = Dafny.Sequence.Empty; s = Dafny.Sequence.UnicodeFromString("#![allow(warnings, unconditional_panic)]\n"); s = Dafny.Sequence.Concat(s, Dafny.Sequence.UnicodeFromString("#![allow(nonstandard_style)]\n")); - BigInteger _2236_i; - _2236_i = BigInteger.Zero; - while ((_2236_i) < (new BigInteger((p).Count))) { - Dafny.ISequence _2237_generated = Dafny.Sequence.Empty; - RAST._IMod _2238_m; + BigInteger _2240_i; + _2240_i = BigInteger.Zero; + while ((_2240_i) < (new BigInteger((p).Count))) { + Dafny.ISequence _2241_generated = Dafny.Sequence.Empty; + RAST._IMod _2242_m; RAST._IMod _out664; - _out664 = (this).GenModule((p).Select(_2236_i), Dafny.Sequence>.FromElements()); - _2238_m = _out664; - _2237_generated = (_2238_m)._ToString(Dafny.Sequence.UnicodeFromString("")); - if ((_2236_i).Sign == 1) { + _out664 = (this).GenModule((p).Select(_2240_i), Dafny.Sequence>.FromElements()); + _2242_m = _out664; + _2241_generated = (_2242_m)._ToString(Dafny.Sequence.UnicodeFromString("")); + if ((_2240_i).Sign == 1) { s = Dafny.Sequence.Concat(s, Dafny.Sequence.UnicodeFromString("\n")); } - s = Dafny.Sequence.Concat(s, _2237_generated); - _2236_i = (_2236_i) + (BigInteger.One); + s = Dafny.Sequence.Concat(s, _2241_generated); + _2240_i = (_2240_i) + (BigInteger.One); } return s; } @@ -7134,14 +7155,14 @@ public void GenExpr(DAST._IExpression e, DCOMP._ISelfInfo selfIdent, DCOMP._IEnv { Dafny.ISequence s = Dafny.Sequence.Empty; s = Dafny.Sequence.UnicodeFromString("\nfn main() {\n"); - BigInteger _2239_i; - _2239_i = BigInteger.Zero; - while ((_2239_i) < (new BigInteger((fullName).Count))) { - if ((_2239_i).Sign == 1) { + BigInteger _2243_i; + _2243_i = BigInteger.Zero; + while ((_2243_i) < (new BigInteger((fullName).Count))) { + if ((_2243_i).Sign == 1) { s = Dafny.Sequence.Concat(s, Dafny.Sequence.UnicodeFromString("::")); } - s = Dafny.Sequence.Concat(s, DCOMP.__default.escapeName((fullName).Select(_2239_i))); - _2239_i = (_2239_i) + (BigInteger.One); + s = Dafny.Sequence.Concat(s, DCOMP.__default.escapeName((fullName).Select(_2243_i))); + _2243_i = (_2243_i) + (BigInteger.One); } s = Dafny.Sequence.Concat(s, Dafny.Sequence.UnicodeFromString("();\n}")); return s; diff --git a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy index 5c39460385e..4046c77c914 100644 --- a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy +++ b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy @@ -4,6 +4,10 @@ datatype D = A | B const c := set d: D | true :: d +datatype {:rust_rc false} E = F | G + +const h := set e: E | true :: e + method Main() { - print c, "\n"; + print |c|, |h|, "\n"; } \ No newline at end of file diff --git a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect index 0f497be06d5..2bd5a0a98a3 100644 --- a/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect +++ b/Source/IntegrationTests/TestFiles/LitTests/LitTest/git-issues/git-issue-5643.dfy.expect @@ -1,2 +1 @@ - -Dafny program verifier finished with TODO verified, TODO errors +22 diff --git a/docs/dev/news/5643.fix b/docs/dev/news/5643.fix new file mode 100644 index 00000000000..e56ef6e2f20 --- /dev/null +++ b/docs/dev/news/5643.fix @@ -0,0 +1 @@ +Support for enumerating datatypes in the Rust backend \ No newline at end of file From 1650d61e5523bbdde4ab0030de5d8bef575642f1 Mon Sep 17 00:00:00 2001 From: Mikael Mayer Date: Thu, 8 Aug 2024 08:30:19 -0500 Subject: [PATCH 3/5] Ran make pr --- Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs | 6 +++--- Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs index e4255f77938..66cc420a3bf 100644 --- a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs +++ b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs @@ -2334,9 +2334,9 @@ protected override void EmitSeqBoundedPool(Expression of, bool includeDuplicates protected override void EmitDatatypeBoundedPool(IVariable bv, string propertySuffix, bool inLetExprBody, ConcreteSyntaxTree wr, ConcreteSyntaxTree wStmts) { if (GetExprConverter(wr, wStmts, out var exprBuilder, out var convert)) { - if (bv.Type.IsDatatype && bv.Type.AsDatatype is {} datatypeDecl) { - - var signature = Sequence<_IFormal>.FromArray(new _IFormal[] {}); + if (bv.Type.IsDatatype && bv.Type.AsDatatype is { } datatypeDecl) { + + var signature = Sequence<_IFormal>.FromArray(new _IFormal[] { }); var c = exprBuilder.Builder.Call(signature); c.SetName((DAST.CallName)DAST.CallName.create_CallName(Sequence.UnicodeFromString("_AllSingletonConstructors"), Option<_IType>.create_None(), Option<_IFormal>.create_None(), signature)); diff --git a/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy b/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy index 10f464e55af..e63217d1079 100644 --- a/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy +++ b/Source/DafnyCore/Backends/Rust/Dafny-compiler-rust.dfy @@ -2537,7 +2537,7 @@ module {:extern "DCOMP"} DafnyToRustCompiler { Some(R.dafny_runtime_type.MSel("SequenceIter").Apply([instantiationType])), "", Some(R.dafny_runtime.MSel("seq!").Apply(singletonConstructors).Sel("iter").Apply([])) - ) + ) )]))]; } From 91df6fc48c476daf7cb805c7631d33b34d752acc Mon Sep 17 00:00:00 2001 From: Mikael Mayer Date: Thu, 8 Aug 2024 08:52:59 -0500 Subject: [PATCH 4/5] Fixed runtime generation + updated makefile --- Makefile | 5 ++++- Source/DafnyRuntime/DafnyRuntimeRust/src/system/mod.rs | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d6d9295fa64..d33cef2d128 100644 --- a/Makefile +++ b/Makefile @@ -90,6 +90,9 @@ update-cs-module: update-go-module: (cd "${DIR}"; cd Source/DafnyRuntime/DafnyRuntimeGo; make update-system-module) +update-rs-module: + (cd "${DIR}"; cd Source/DafnyRuntime; make update-system-module-rs) + update-runtime-dafny: (cd "${DIR}"; cd Source/DafnyRuntime/DafnyRuntimeDafny; make update-go) @@ -100,4 +103,4 @@ update-runtime-dafny: # - Apply dafny format on all dfy files # - Apply dotnet format on all cs files except the generated ones # - Rebuild the Go and C# runtime modules as needed. -pr: exe dfy-to-cs-exe format-dfy format update-runtime-dafny update-cs-module update-go-module +pr: exe dfy-to-cs-exe format-dfy format update-runtime-dafny update-cs-module update-go-module update-rs-module diff --git a/Source/DafnyRuntime/DafnyRuntimeRust/src/system/mod.rs b/Source/DafnyRuntime/DafnyRuntimeRust/src/system/mod.rs index 36df6b2d063..97a23f45757 100644 --- a/Source/DafnyRuntime/DafnyRuntimeRust/src/system/mod.rs +++ b/Source/DafnyRuntime/DafnyRuntimeRust/src/system/mod.rs @@ -127,6 +127,12 @@ pub mod _System { } } + impl Tuple0 { + pub fn _AllSingletonConstructors() -> crate::SequenceIter<::std::rc::Rc> { + crate::seq![::std::rc::Rc::new(Tuple0::_T0 {})].iter() + } + } + impl Eq for Tuple0 {} From 3edc7daf51b2f31439815b2266995aa07ec05428 Mon Sep 17 00:00:00 2001 From: Mikael Mayer Date: Wed, 4 Sep 2024 13:03:50 -0500 Subject: [PATCH 5/5] Fixed the merge --- Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs index ffc5fe6c09b..466bc8ec178 100644 --- a/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs +++ b/Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs @@ -2445,7 +2445,7 @@ protected override void EmitDatatypeBoundedPool(IVariable bv, string propertySuf var signature = Sequence<_IFormal>.FromArray(new _IFormal[] { }); var c = exprBuilder.Builder.Call(signature); c.SetName((DAST.CallName)DAST.CallName.create_CallName(Sequence.UnicodeFromString("_AllSingletonConstructors"), - Option<_IType>.create_None(), Option<_IFormal>.create_None(), signature)); + Option<_IType>.create_None(), Option<_IFormal>.create_None(), false, signature)); var wrc = new BuilderSyntaxTree(c, this); EmitTypeName_Companion(bv.Type, wrc, wr, bv.Tok, null); } else {