From 8edb8b8a32c64d934e176320ee8ff995e186cea8 Mon Sep 17 00:00:00 2001 From: Brian Rourke Boll Date: Thu, 28 May 2026 05:38:03 -0400 Subject: [PATCH 1/2] Record spreads --- src/Compiler/Checking/CheckDeclarations.fs | 171 +- src/Compiler/Checking/CheckPatterns.fs | 15 +- .../Checking/CheckRecordSyntaxHelpers.fs | 43 +- .../Checking/CheckRecordSyntaxHelpers.fsi | 6 +- src/Compiler/Checking/ConstraintSolver.fs | 9 +- src/Compiler/Checking/ConstraintSolver.fsi | 3 + .../Checking/Expressions/CheckExpressions.fs | 664 +++- .../Checking/Expressions/CheckExpressions.fsi | 10 +- src/Compiler/Checking/NameResolution.fs | 37 +- src/Compiler/Checking/NameResolution.fsi | 16 +- src/Compiler/Checking/Spreads.fs | 254 ++ src/Compiler/Driver/CompilerDiagnostics.fs | 3 +- .../GraphChecking/FileContentMapping.fs | 44 +- src/Compiler/FSComp.txt | 9 + src/Compiler/FSStrings.resx | 7 +- src/Compiler/FSharp.Compiler.Service.fsproj | 1 + src/Compiler/Facilities/LanguageFeatures.fs | 3 + src/Compiler/Facilities/LanguageFeatures.fsi | 1 + .../Service/FSharpParseFileResults.fs | 16 +- .../Service/ServiceInterfaceStubGenerator.fs | 8 +- src/Compiler/Service/ServiceLexing.fs | 6 +- src/Compiler/Service/ServiceLexing.fsi | 6 +- src/Compiler/Service/ServiceNavigation.fs | 28 +- src/Compiler/Service/ServiceParseTreeWalk.fs | 150 +- src/Compiler/Service/ServiceParseTreeWalk.fsi | 4 +- src/Compiler/Service/ServiceParsedInputOps.fs | 59 +- src/Compiler/Service/ServiceStructure.fs | 15 +- src/Compiler/Service/SynExpr.fs | 13 +- src/Compiler/SyntaxTree/LexFilter.fs | 15 +- src/Compiler/SyntaxTree/ParseHelpers.fs | 28 +- src/Compiler/SyntaxTree/ParseHelpers.fsi | 6 +- src/Compiler/SyntaxTree/SyntaxTree.fs | 48 +- src/Compiler/SyntaxTree/SyntaxTree.fsi | 59 +- src/Compiler/SyntaxTree/SyntaxTreeOps.fs | 15 +- src/Compiler/lex.fsl | 2 + src/Compiler/pars.fsy | 89 +- src/Compiler/xlf/FSComp.txt.cs.xlf | 45 + src/Compiler/xlf/FSComp.txt.de.xlf | 45 + src/Compiler/xlf/FSComp.txt.es.xlf | 45 + src/Compiler/xlf/FSComp.txt.fr.xlf | 45 + src/Compiler/xlf/FSComp.txt.it.xlf | 45 + src/Compiler/xlf/FSComp.txt.ja.xlf | 45 + src/Compiler/xlf/FSComp.txt.ko.xlf | 45 + src/Compiler/xlf/FSComp.txt.pl.xlf | 45 + src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 45 + src/Compiler/xlf/FSComp.txt.ru.xlf | 45 + src/Compiler/xlf/FSComp.txt.tr.xlf | 45 + src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 45 + src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 45 + src/Compiler/xlf/FSStrings.cs.xlf | 5 + src/Compiler/xlf/FSStrings.de.xlf | 5 + src/Compiler/xlf/FSStrings.es.xlf | 5 + src/Compiler/xlf/FSStrings.fr.xlf | 5 + src/Compiler/xlf/FSStrings.it.xlf | 5 + src/Compiler/xlf/FSStrings.ja.xlf | 5 + src/Compiler/xlf/FSStrings.ko.xlf | 5 + src/Compiler/xlf/FSStrings.pl.xlf | 5 + src/Compiler/xlf/FSStrings.pt-BR.xlf | 5 + src/Compiler/xlf/FSStrings.ru.xlf | 5 + src/Compiler/xlf/FSStrings.tr.xlf | 5 + src/Compiler/xlf/FSStrings.zh-Hans.xlf | 5 + src/Compiler/xlf/FSStrings.zh-Hant.xlf | 5 + .../Conformance/Constraints/Unmanaged.fs | 2 +- .../Types/RecordTypes/AnonymousRecords.fs | 20 +- .../Types/RecordTypes/RecordTypes.fs | 20 +- .../AnonymousRecordExpressionSpreads.fs | 78 + .../Expression_Anonymous_CoercionsApplied.fs | 14 + ...ssion_Anonymous_CoercionsApplied.fs.il.bsl | 962 +++++ ...ression_Anonymous_ExplicitShadowsSpread.fs | 4 + ..._Anonymous_ExplicitShadowsSpread.fs.il.bsl | 810 ++++ ...ression_Anonymous_ExtraFieldsAreIgnored.fs | 4 + ..._Anonymous_ExtraFieldsAreIgnored.fs.il.bsl | 1248 +++++++ ...ion_Anonymous_NoOverlap_Explicit_Spread.fs | 4 + ...nymous_NoOverlap_Explicit_Spread.fs.il.bsl | 1353 +++++++ ...ion_Anonymous_NoOverlap_Spread_Explicit.fs | 4 + ...nymous_NoOverlap_Spread_Explicit.fs.il.bsl | 1353 +++++++ ...ssion_Anonymous_NoOverlap_Spread_Spread.fs | 7 + ...nonymous_NoOverlap_Spread_Spread.fs.il.bsl | 1976 ++++++++++ ...ression_Anonymous_SpreadShadowsExplicit.fs | 4 + ..._Anonymous_SpreadShadowsExplicit.fs.il.bsl | 812 ++++ ...xpression_Anonymous_SpreadShadowsSpread.fs | 8 + ...on_Anonymous_SpreadShadowsSpread.fs.il.bsl | 1224 ++++++ .../Expression_Anonymous_Structness.fs | 37 + .../Expression_Anonymous_Structness.fs.il.bsl | 3302 +++++++++++++++++ .../Expression_Nominal_CoercionsApplied.fs | 14 + ...ression_Nominal_CoercionsApplied.fs.il.bsl | 1558 ++++++++ ...xpression_Nominal_ExplicitShadowsSpread.fs | 5 + ...on_Nominal_ExplicitShadowsSpread.fs.il.bsl | 203 + ...xpression_Nominal_ExtraFieldsAreIgnored.fs | 7 + ...on_Nominal_ExtraFieldsAreIgnored.fs.il.bsl | 288 ++ ...ssion_Nominal_NoOverlap_Explicit_Spread.fs | 10 + ...ominal_NoOverlap_Explicit_Spread.fs.il.bsl | 783 ++++ ...ession_Nominal_NoOverlap_SpreadFromAnon.fs | 4 + ...Nominal_NoOverlap_SpreadFromAnon.fs.il.bsl | 655 ++++ ...ssion_Nominal_NoOverlap_Spread_Explicit.fs | 10 + ...ominal_NoOverlap_Spread_Explicit.fs.il.bsl | 783 ++++ ...ression_Nominal_NoOverlap_Spread_Spread.fs | 16 + ..._Nominal_NoOverlap_Spread_Spread.fs.il.bsl | 1420 +++++++ ...xpression_Nominal_SpreadShadowsExplicit.fs | 5 + ...on_Nominal_SpreadShadowsExplicit.fs.il.bsl | 204 + .../Expression_Nominal_SpreadShadowsSpread.fs | 5 + ...sion_Nominal_SpreadShadowsSpread.fs.il.bsl | 552 +++ .../Spreads/Expression_Nominal_Structness.fs | 16 + .../Expression_Nominal_Structness.fs.il.bsl | 2035 ++++++++++ .../Spreads/NominalRecordExpressionSpreads.fs | 84 + .../EmittedIL/Spreads/RecordTypeSpreads.fs | 78 + .../Spreads/Type_AttributesAreShadowed.fs | 7 + .../Type_AttributesAreShadowed.fs.il.bsl | 255 ++ .../Spreads/Type_ExplicitShadowsSpread.fs | 4 + .../Type_ExplicitShadowsSpread.fs.il.bsl | 217 ++ .../Spreads/Type_NoOverlap_Explicit_Spread.fs | 4 + .../Type_NoOverlap_Explicit_Spread.fs.il.bsl | 243 ++ ...Type_NoOverlap_Explicit_Spread_Generics.fs | 6 + ...Overlap_Explicit_Spread_Generics.fs.il.bsl | 255 ++ .../Spreads/Type_NoOverlap_SpreadFromAnon.fs | 3 + .../Type_NoOverlap_SpreadFromAnon.fs.il.bsl | 162 + .../Spreads/Type_NoOverlap_Spread_Explicit.fs | 4 + .../Type_NoOverlap_Spread_Explicit.fs.il.bsl | 243 ++ .../Spreads/Type_NoOverlap_Spread_Spread.fs | 8 + .../Type_NoOverlap_Spread_Spread.fs.il.bsl | 479 +++ .../Spreads/Type_SpreadShadowsExplicit.fs | 4 + .../Type_SpreadShadowsExplicit.fs.il.bsl | 217 ++ .../Spreads/Type_SpreadShadowsSpread.fs | 8 + .../Type_SpreadShadowsSpread.fs.il.bsl | 356 ++ .../FSharp.Compiler.ComponentTests.fsproj | 4 + .../Language/CopyAndUpdateTests.fs | 12 +- .../Language/SpreadTests.fs | 1977 ++++++++++ ...iler.Service.SurfaceArea.netstandard20.bsl | 149 +- .../ParsedInputModuleTests.fs | 11 +- .../TreeVisitorTests.fs | 4 +- .../XmlDocTests.fs | 9 +- .../Expression/AnonRecd - Quotation 01.fs.bsl | 105 +- .../Expression/AnonRecd - Quotation 02.fs.bsl | 105 +- .../Expression/AnonRecd - Quotation 03.fs.bsl | 150 +- .../Expression/AnonRecd - Quotation 04.fs.bsl | 114 +- .../Expression/AnonymousRecords-01.fs.bsl | 16 +- .../Expression/AnonymousRecords-02.fs.bsl | 8 +- .../Expression/AnonymousRecords-03.fs.bsl | 8 +- .../Expression/AnonymousRecords-06.fs.bsl | 28 +- .../Expression/AnonymousRecords-07.fs.bsl | 76 +- .../Expression/AnonymousRecords-08.fs.bsl | 144 +- .../Expression/AnonymousRecords-09.fs.bsl | 60 +- .../Expression/AnonymousRecords-10.fs.bsl | 68 +- .../Expression/AnonymousRecords-11.fs.bsl | 92 +- .../Expression/AnonymousRecords-12.fs.bsl | 60 +- .../Expression/AnonymousRecords-13.fs.bsl | 22 +- ...OfTheEqualsSignInSynExprRecordField.fs.bsl | 17 +- .../Expression/InheritRecord - Field 1.fs.bsl | 20 +- .../Expression/InheritRecord - Field 2.fs.bsl | 35 +- ...OfTheEqualsSignInSynExprRecordField.fs.bsl | 13 +- .../Expression/Record - Anon 01.fs.bsl | 8 +- .../Expression/Record - Anon 02.fs.bsl | 7 +- .../Expression/Record - Anon 07.fs.bsl | 14 +- .../Expression/Record - Anon 08.fs.bsl | 14 +- .../Expression/Record - Anon 09.fs.bsl | 35 +- .../Expression/Record - Anon 10.fs.bsl | 22 +- .../Expression/Record - Anon 11.fs.bsl | 28 +- .../Expression/Record - Field 03.fs.bsl | 9 +- .../Expression/Record - Field 04.fs.bsl | 12 +- .../Expression/Record - Field 05.fs.bsl | 7 +- .../Expression/Record - Field 06.fs.bsl | 9 +- .../Expression/Record - Field 08.fs.bsl | 14 +- .../Expression/Record - Field 09.fs.bsl | 14 +- .../Expression/Record - Field 11.fs.bsl | 7 +- .../Expression/Record - Field 12.fs.bsl | 31 +- .../Expression/Record - Field 13.fs.bsl | 14 +- .../Expression/Record - Field 14.fs.bsl | 38 +- .../SynExprAnonRecdWithStructKeyword.fs.bsl | 6 +- ...sTheRangeOfTheEqualsSignInTheFields.fs.bsl | 22 +- ...OfTheEqualsSignInSynExprRecordField.fs.bsl | 36 +- ...dFieldsContainCorrectAmountOfTrivia.fs.bsl | 104 +- .../SyntaxTree/Pattern/Named field 07.fs.bsl | 10 +- .../SyntaxTree/Pattern/Named field 08.fs.bsl | 10 +- ...esShouldBeIncludedInRecursiveTypes.fsi.bsl | 14 +- ...DefnSigRecordShouldEndAtLastMember.fsi.bsl | 14 +- .../Type/Module Inside Record 01.fs.bsl | 14 +- .../Type/Module Same Indentation 01.fs.bsl | 14 +- ...tesShouldBeIncludedInRecursiveTypes.fs.bsl | 39 +- .../SyntaxTree/Type/Record - Access 01.fs.bsl | 12 +- .../SyntaxTree/Type/Record - Access 02.fs.bsl | 16 +- .../SyntaxTree/Type/Record - Access 03.fs.bsl | 18 +- .../SyntaxTree/Type/Record - Access 04.fs.bsl | 14 +- .../Type/Record - Mutable 01.fs.bsl | 16 +- .../Type/Record - Mutable 02.fs.bsl | 30 +- .../Type/Record - Mutable 03.fs.bsl | 28 +- .../Type/Record - Mutable 04.fs.bsl | 42 +- .../Type/Record - Mutable 05.fs.bsl | 44 +- .../data/SyntaxTree/Type/Record 01.fs.bsl | 26 +- .../data/SyntaxTree/Type/Record 02.fs.bsl | 27 +- .../data/SyntaxTree/Type/Record 04.fs.bsl | 11 +- .../data/SyntaxTree/Type/Record 05.fs.bsl | 39 +- ...ordContainsTheRangeOfTheWithKeyword.fs.bsl | 14 +- .../SemanticClassificationServiceTests.fs | 2 +- 193 files changed, 29857 insertions(+), 1324 deletions(-) create mode 100644 src/Compiler/Checking/Spreads.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/AnonymousRecordExpressionSpreads.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/NominalRecordExpressionSpreads.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/RecordTypeSpreads.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs create mode 100644 tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs.il.bsl create mode 100644 tests/FSharp.Compiler.ComponentTests/Language/SpreadTests.fs diff --git a/src/Compiler/Checking/CheckDeclarations.fs b/src/Compiler/Checking/CheckDeclarations.fs index 4a4361e9808..c82c5dcc782 100644 --- a/src/Compiler/Checking/CheckDeclarations.fs +++ b/src/Compiler/Checking/CheckDeclarations.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. module internal FSharp.Compiler.CheckDeclarations @@ -2607,6 +2607,8 @@ module EstablishTypeDefinitionCores = let m = tycon.Range let env = AddDeclaredTypars CheckForDuplicateTypars (tycon.Typars m) env let env = MakeInnerEnvForTyconRef env thisTyconRef false + let ad = env.AccessRights + let spreadSrcTys = ResizeArray () [ match synTyconRepr with | SynTypeDefnSimpleRepr.None _ -> () | SynTypeDefnSimpleRepr.Union (_, unionCases, _) -> @@ -2650,13 +2652,31 @@ module EstablishTypeDefinitionCores = errorR(Error(FSComp.SR.tcStructsMustDeclareTypesOfImplicitCtorArgsExplicitly(), m)) yield (ty, m) - | SynTypeDefnSimpleRepr.Record (_, fields, _) -> - for SynField(fieldType = ty; range = m) in fields do + | SynTypeDefnSimpleRepr.Record (_, fieldsAndSpreads, _) -> + let tcField (SynField (fieldType = ty; range = m)) = let tyR, _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurrence.UseInType WarnOnIWSAM.Yes env tpenv ty - yield (tyR, m) + (tyR, m), ignore + + let tcSpread (SynTypeSpread (ty = ty; range = m)) = + let spreadSrcTy, _ = TcTypeAndRecover cenv NoNewTypars NoCheckCxs ItemOccurrence.UseInType WarnOnIWSAM.Yes env tpenv ty + + if isRecdTy g spreadSrcTy then + spreadSrcTys.Add spreadSrcTy + ResolveRecordOrClassFieldsOfType cenv.nameResolver m ad spreadSrcTy false + |> List.choose (function + | Item.RecdField field -> Some (field.RecdField.Id.idText, (field.FieldType, m), ignore) + | _ -> None) + else + match tryDestAnonRecdTy g spreadSrcTy with + | ValueSome (anonInfo, tys) -> tys |> List.mapi (fun i ty -> (anonInfo.SortedNames[i], (ty, m), ignore)) + | ValueNone -> [] + + // We must apply the spread shadowing logic here + // to get the correct set of field types. + yield! fieldsAndSpreads |> Spreads.Types.Records.check ignore tcField tcSpread | _ -> - () ] + () ], spreadSrcTys let ComputeModuleOrNamespaceKind g isModule typeNames attribs nm = if not isModule then (Namespace true) @@ -3607,14 +3627,104 @@ module EstablishTypeDefinitionCores = let repr = Construct.MakeUnionRepr unionCases repr, None, NoSafeInitInfo - | SynTypeDefnSimpleRepr.Record (_, fields, mRepr) -> + | SynTypeDefnSimpleRepr.Record (_accessibility, fieldsAndSpreads, mRepr) -> noMeasureAttributeCheck() noSealedAttributeCheck FSComp.SR.tcTypesAreAlwaysSealedRecord noAbstractClassAttributeCheck() noAllowNullLiteralAttributeCheck() structLayoutAttributeCheck true // these are allowed for records - let recdFields = TcRecdUnionAndEnumDeclarations.TcNamedFieldDecls cenv envinner innerParent false tpenv fields - recdFields |> CheckDuplicates (fun f -> f.Id) "field" |> ignore + + let recdFields = + let tcField synField = + let field = TcRecdUnionAndEnumDeclarations.TcNamedFieldDecl cenv envinner innerParent false tpenv synField |> Option.get + let errorAmbiguousShadowing () = errorR (Duplicate ("field", field.Id.idText, field.Id.idRange)) + field, errorAmbiguousShadowing + + let tcSpread (SynTypeSpread (ty = ty; range = m)) = + let (spreadSrcTy, _tpenv), error = + try TcType cenv NoNewTypars CheckCxs ItemOccurrence.UseInType WarnOnIWSAM.Yes envinner tpenv ty, false with + | RecoverableException e -> + errorRecovery e ty.Range + (g.obj_ty_ambivalent, tpenv), true + + let isValidSpreadSrcTy = + (not g.checkNullness || (nullnessOfTy g spreadSrcTy).Evaluate() <> NullnessInfo.WithNull) + && (error || isRecdTy g spreadSrcTy || isAnonRecdTy g spreadSrcTy) + + if isValidSpreadSrcTy then + let spreadSrcTy = + tryAppTy g spreadSrcTy + |> ValueOption.map (fun (tcref, tinst) -> + let _, _, newTinst = FreshenTypeInst g m (tcref.Typars m) + SolveTyparsEqualTypes g cenv.css m newTinst tinst + TType_app (tcref, newTinst, g.knownWithoutNull)) + |> ValueOption.defaultValue spreadSrcTy + + let recordFieldsFromSpread = + if isRecdTy g spreadSrcTy then + ResolveRecordOrClassFieldsOfType cenv.nameResolver m ad spreadSrcTy false + else + tryDestAnonRecdTy g spreadSrcTy + |> ValueOption.map (fun (anonInfo, tys) -> + anonInfo.SortedIds + |> List.ofArray + |> List.mapi (fun i id -> Item.AnonRecdField (anonInfo, tys, i, id.idRange))) + |> ValueOption.defaultValue [] + + recordFieldsFromSpread + |> List.choose (fun field -> + match field with + | Item.RecdField fieldInfo -> + // Update the field ID's range to be that of the spread. + let syntheticId = ident (fieldInfo.RecdField.Id.idText, m) + let fieldTy = fieldInfo.FieldType + let recdField = + { fieldInfo.RecdField with + rfield_id = syntheticId + rfield_type = fieldTy } + + let warnAmbiguousShadowing () = + let fmtedSpreadField = NicePrint.stringOfRecdField envinner.DisplayEnv cenv.infoReader fieldInfo.TyconRef recdField + let fmtedSpreadSrcTy = NicePrint.stringOfTy envinner.DisplayEnv spreadSrcTy + warning (Error (FSComp.SR.tcRecordTypeDefinitionSpreadFieldShadowsExplicitField (fmtedSpreadField, fmtedSpreadSrcTy), m)) + + Some (fieldInfo.RecdField.Id.idText, recdField, warnAmbiguousShadowing) + + | Item.AnonRecdField (anonInfo, tys, fieldIndex, _) -> + let fieldId = + let orig = anonInfo.SortedIds[fieldIndex] + ident (orig.idText, m) + + let ty = tys[fieldIndex] + + let field = + let stat = false + let konst = None + let generated = false + let mut = false + let volatile = false + let pattribs = [] + let fattribs = [] + let vis = None + TcRecdUnionAndEnumDeclarations.MakeRecdFieldSpec g envinner innerParent (stat, konst, ty, pattribs, fattribs, fieldId, generated, mut, volatile, XmlDoc.Empty, vis, m) + + let warnAmbiguousShadowing () = + let typars = tryAppTy g ty |> ValueOption.map (snd >> List.choose (tryDestTyparTy g >> ValueOption.toOption)) |> ValueOption.defaultValue [] + let fmtedSpreadField = LayoutRender.showL (NicePrint.prettyLayoutOfMemberSig envinner.DisplayEnv ([], fieldId.idText, typars, [], ty)) + let fmtedSpreadSrcTy = NicePrint.stringOfTy envinner.DisplayEnv spreadSrcTy + warning (Error (FSComp.SR.tcRecordTypeDefinitionSpreadFieldShadowsExplicitField (fmtedSpreadField, fmtedSpreadSrcTy), m)) + + Some (fieldId.idText, field, warnAmbiguousShadowing) + + | _ -> None) + else + if not ty.IsFromParseError then + errorR (Error (FSComp.SR.tcRecordTypeDefinitionSpreadSourceMustBeRecord (), m)) + [] + + let checkSpreadsLanguageFeature m = checkLanguageFeatureAndRecover g.langVersion LanguageFeature.RecordSpreads m + fieldsAndSpreads |> Spreads.Types.Records.check checkSpreadsLanguageFeature tcField tcSpread + writeFakeRecordFieldsToSink recdFields CallEnvSink cenv.tcSink (mRepr, envinner.NameEnv, ad) @@ -4150,14 +4260,43 @@ module EstablishTypeDefinitionCores = // be satisfied, so we have to do this prior to checking any constraints. // // First find all the field types in all the structural types - let tyconsWithStructuralTypes = - (envMutRecPrelim, withEnvs) - ||> MutRecShapes.mapTyconsWithEnv (fun envForDecls (origInfo, tyconOpt) -> - match origInfo, tyconOpt with - | (typeDefCore, _, _), Some tycon -> Some (tycon, GetStructuralElementsOfTyconDefn cenv envForDecls tpenv typeDefCore tycon) - | _ -> None) - |> MutRecShapes.collectTycons - |> List.choose id + let tyconsWithStructuralTypes = + let all = + (envMutRecPrelim, withEnvs) + ||> MutRecShapes.mapTyconsWithEnv (fun envForDecls (origInfo, tyconOpt) -> + match origInfo, tyconOpt with + | (typeDefCore, _, _), Some tycon -> Some (tycon, GetStructuralElementsOfTyconDefn cenv envForDecls tpenv typeDefCore tycon) + | _ -> None) + |> MutRecShapes.collectTycons + |> List.choose id + + // Check for cyclic spreads. + do + if cenv.g.langVersion.SupportsFeature LanguageFeature.RecordSpreads then + let (|PotentiallyRecursiveTycon|_|) ty = + tryTcrefOfAppTy cenv.g ty + |> ValueOption.bind _.TryDeref + + let edges = + [ + for dst, (_, spreadSrcs) in all do + for src in spreadSrcs do + match src with + | PotentiallyRecursiveTycon src -> dst, src + | _ -> () + ] + + let tycons = + [ + for dst, src in edges do + yield dst + yield src + ] + + let graph = Graph (_.Stamp, tycons, edges) + graph.IterateCycles (fun path -> errorR (Error (FSComp.SR.tcTypeDefinitionIsCyclicThroughSpreads (), (List.head path).Range))) + + [for tycon, (tys, _) in all -> tycon, tys] let scSet = TyconConstraintInference.InferSetOfTyconsSupportingComparable cenv envMutRecPrelim.DisplayEnv tyconsWithStructuralTypes let seSet = TyconConstraintInference.InferSetOfTyconsSupportingEquatable cenv envMutRecPrelim.DisplayEnv tyconsWithStructuralTypes diff --git a/src/Compiler/Checking/CheckPatterns.fs b/src/Compiler/Checking/CheckPatterns.fs index e6d0e5c7dce..2d76e990e15 100644 --- a/src/Compiler/Checking/CheckPatterns.fs +++ b/src/Compiler/Checking/CheckPatterns.fs @@ -498,13 +498,19 @@ and TcPatArrayOrList warnOnUpper cenv env vFlags patEnv ty isArray args m = phase2, acc and TcRecordPat warnOnUpper (cenv: cenv) env vFlags patEnv ty fieldPats m = - let fieldPats = + let idents = + let (|Last|) = List.last + fieldPats + |> List.map (fun (NamePatPairField (fieldName = SynLongIdent (id = Last fieldId))) -> fieldId) + + let fieldPats = fieldPats |> List.map (fun (NamePatPairField(fieldName = fieldLid; pat = pat)) -> match fieldLid.LongIdent with - | [id] -> ([], id), pat - | lid -> List.frontAndBack lid, pat) + | [id] -> ExplicitOrSpread.Explicit (([], id), pat) + | lid -> ExplicitOrSpread.Explicit (List.frontAndBack lid, pat)) + CheckRecdExprDuplicateFields idents match BuildFieldMap cenv env false ty fieldPats m with | None -> (fun _ -> TPat_error m), patEnv | Some(tinst, tcref, fldsmap, _fldsList) -> @@ -520,13 +526,14 @@ and TcRecordPat warnOnUpper (cenv: cenv) env vFlags patEnv ty fieldPats m = let fieldPats, patEnvR = (patEnv, ftys) ||> List.mapFold (fun s (ty, fsp) -> match fldsmap.TryGetValue fsp.rfield_id.idText with - | true, v -> + | true, ExplicitOrSpread.Explicit v -> let warnOnUpper = if cenv.g.langVersion.SupportsFeature(LanguageFeature.DontWarnOnUppercaseIdentifiersInBindingPatterns) then AllIdsOK else warnOnUpper TcPat warnOnUpper cenv env None vFlags s ty v + | true, ExplicitOrSpread.Spread _ -> (* Unreachable. *) error (InternalError ("Spreads in patterns are not supported.", m)) | _ -> (fun _ -> TPat_wild m), s) let phase2 values = diff --git a/src/Compiler/Checking/CheckRecordSyntaxHelpers.fs b/src/Compiler/Checking/CheckRecordSyntaxHelpers.fs index aeb5c0ccf2d..5b0d56c6f69 100644 --- a/src/Compiler/Checking/CheckRecordSyntaxHelpers.fs +++ b/src/Compiler/Checking/CheckRecordSyntaxHelpers.fs @@ -28,27 +28,29 @@ open FSharp.Compiler.SyntaxTrivia /// which we here convert to /// /// { x with A = { x.A with B = 10; C = "" } } -let GroupUpdatesToNestedFields (fields: ((Ident list * Ident) * SynExpr option) list) = +let GroupUpdatesToNestedFields (fields: (ExplicitOrSpread<(Ident list * Ident) * SynExpr option, (Ident list * Ident) * 'Spread>) list) = let rec groupIfNested res xs = match xs with | [] -> res | [ x ] -> x :: res | x :: y :: ys -> match x, y with - | (lidwid, Some(SynExpr.Record(baseInfo, copyInfo, fields1, m))), (_, Some(SynExpr.Record(recordFields = fields2))) -> + | ExplicitOrSpread.Explicit(lidwid, Some(SynExpr.Record(baseInfo, copyInfo, fields1, m))), + ExplicitOrSpread.Explicit(_, Some(SynExpr.Record(recordFields = fields2))) -> let reducedRecd = - (lidwid, Some(SynExpr.Record(baseInfo, copyInfo, fields1 @ fields2, m))) + ExplicitOrSpread.Explicit(lidwid, Some(SynExpr.Record(baseInfo, copyInfo, fields1 @ fields2, m))) groupIfNested res (reducedRecd :: ys) - | (lidwid, Some(SynExpr.AnonRecd(isStruct, copyInfo, fields1, m, trivia))), (_, Some(SynExpr.AnonRecd(recordFields = fields2))) -> + | ExplicitOrSpread.Explicit(lidwid, Some(SynExpr.AnonRecd(isStruct, copyInfo, fields1, m, trivia))), + ExplicitOrSpread.Explicit(_, Some(SynExpr.AnonRecd(recordFields = fields2))) -> let reducedRecd = - (lidwid, Some(SynExpr.AnonRecd(isStruct, copyInfo, fields1 @ fields2, m, trivia))) + ExplicitOrSpread.Explicit(lidwid, Some(SynExpr.AnonRecd(isStruct, copyInfo, fields1 @ fields2, m, trivia))) groupIfNested res (reducedRecd :: ys) | _ -> groupIfNested (x :: res) (y :: ys) fields - |> List.groupBy (fun ((_, field), _) -> field.idText) + |> List.groupBy (fun (ExplicitOrSpread.Explicit((_, field), _) | ExplicitOrSpread.Spread((_, field), _)) -> field.idText) |> List.collect (fun (_, fields) -> if fields.Length < 2 then fields @@ -122,17 +124,27 @@ let TransformAstForNestedUpdates (cenv: TcFileState) (env: TcEnv) overallTy (lid | Item.AnonRecdField( anonInfo = { AnonRecdTypeInfo.TupInfo = TupInfo.Const isStruct - }) -> - let fields = [ LongIdentWithDots([ fieldId ], []), None, nestedField ] + } + range = m) -> + let fields = + [ + SynExprAnonRecordFieldOrSpread.Field( + SynExprAnonRecordField(LongIdentWithDots([ fieldId ], []), None, nestedField, m), + None + ) + ] + SynExpr.AnonRecd(isStruct, copyInfo outerFieldId, fields, outerFieldId.idRange, { OpeningBraceRange = range0 }) | _ -> let fields = [ - SynExprRecordField( - (LongIdentWithDots([ fieldId ], []), true), - None, - Some nestedField, - unionRanges fieldId.idRange nestedField.Range, + SynExprRecordFieldOrSpread.Field( + SynExprRecordField( + (LongIdentWithDots([ fieldId ], []), true), + None, + Some nestedField, + unionRanges fieldId.idRange nestedField.Range + ), None ) ] @@ -144,7 +156,7 @@ let TransformAstForNestedUpdates (cenv: TcFileState) (env: TcEnv) overallTy (lid match access, fields with | _, [] -> failwith "unreachable" - | accessIds, [ (fieldId, _) ] -> (accessIds, fieldId), Some exprBeingAssigned + | accessIds, [ (fieldId, _) ] -> (accessIds, fieldId), exprBeingAssigned | accessIds, (outerFieldId, item) :: rest -> checkLanguageFeatureAndRecover cenv.g.langVersion LanguageFeature.NestedCopyAndUpdate (rangeOfLid lid) @@ -152,8 +164,7 @@ let TransformAstForNestedUpdates (cenv: TcFileState) (env: TcEnv) overallTy (lid let outerFieldId = ident (outerFieldId.idText, outerFieldId.idRange.MakeSynthetic()) - (accessIds, outerFieldId), - Some(synExprRecd (recdExprCopyInfo (fields |> List.map fst) withExpr) outerFieldId rest exprBeingAssigned) + (accessIds, outerFieldId), synExprRecd (recdExprCopyInfo (fields |> List.map fst) withExpr) outerFieldId rest exprBeingAssigned /// This name is used when a complex expression is bound for use as a binding in a copy-and-update expression. /// For example, in `{ f () with ... }`, `f ()` is replaced by `let bind@ = f ()` diff --git a/src/Compiler/Checking/CheckRecordSyntaxHelpers.fsi b/src/Compiler/Checking/CheckRecordSyntaxHelpers.fsi index dc68f8a73e2..f4ee3bd6ae2 100644 --- a/src/Compiler/Checking/CheckRecordSyntaxHelpers.fsi +++ b/src/Compiler/Checking/CheckRecordSyntaxHelpers.fsi @@ -3,12 +3,14 @@ module internal FSharp.Compiler.CheckRecordSyntaxHelpers open FSharp.Compiler.CheckBasics +open FSharp.Compiler.NameResolution open FSharp.Compiler.Syntax open FSharp.Compiler.Text open FSharp.Compiler.TypedTree val GroupUpdatesToNestedFields: - fields: ((Ident list * Ident) * SynExpr option) list -> ((Ident list * Ident) * SynExpr option) list + fields: (ExplicitOrSpread<(Ident list * Ident) * SynExpr option, (Ident list * Ident) * 'Spread>) list -> + (ExplicitOrSpread<(Ident list * Ident) * SynExpr option, (Ident list * Ident) * 'Spread>) list val TransformAstForNestedUpdates<'a> : cenv: TcFileState -> @@ -17,7 +19,7 @@ val TransformAstForNestedUpdates<'a> : lid: LongIdent -> exprBeingAssigned: SynExpr -> withExpr: SynExpr * (range * 'a) -> - (Ident list * Ident) * SynExpr option + (Ident list * Ident) * SynExpr val BindIdText: string diff --git a/src/Compiler/Checking/ConstraintSolver.fs b/src/Compiler/Checking/ConstraintSolver.fs index b739cede2de..296a35fc2b8 100644 --- a/src/Compiler/Checking/ConstraintSolver.fs +++ b/src/Compiler/Checking/ConstraintSolver.fs @@ -1134,7 +1134,7 @@ and SolveTyparEqualsType (csenv: ConstraintSolverEnv) ndeep m2 (trace: OptionalT } // Like SolveTyparEqualsType but asserts all typar equalities simultaneously instead of one by one -and SolveTyparsEqualTypes (csenv: ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace) tpTys tys = +and SolveTyparsEqualTypesAux (csenv: ConstraintSolverEnv) ndeep m2 (trace: OptionalTrace) tpTys tys = trackErrors { do! Iterate2D ( fun tpTy ty -> @@ -4279,7 +4279,7 @@ let CodegenWitnessesForTyparInst tcVal g amap m typars tyargs = let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m (DisplayEnv.Empty g) let ftps, _renaming, tinst = FreshenTypeInst g m typars let traitInfos = GetTraitConstraintInfosOfTypars g ftps - let! _res = SolveTyparsEqualTypes csenv 0 m NoTrace tinst tyargs + let! _res = SolveTyparsEqualTypesAux csenv 0 m NoTrace tinst tyargs return GenWitnessArgs amap g m traitInfos } @@ -4357,3 +4357,8 @@ let IsApplicableMethApprox g amap m (minfo: MethInfo) availObjTy = | _ -> true else true + +let SolveTyparsEqualTypes g (css:ConstraintSolverState) m (typars: TypeInst) (tys:TypeInst) = + let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m (DisplayEnv.Empty g) + SolveTyparsEqualTypesAux csenv 0 m NoTrace typars tys + |> CommitOperationResult diff --git a/src/Compiler/Checking/ConstraintSolver.fsi b/src/Compiler/Checking/ConstraintSolver.fsi index 8d21270f901..8f97cfbff93 100644 --- a/src/Compiler/Checking/ConstraintSolver.fsi +++ b/src/Compiler/Checking/ConstraintSolver.fsi @@ -359,3 +359,6 @@ val ChooseTyparSolutionAndSolve: ConstraintSolverState -> DisplayEnv -> Typar -> val IsApplicableMethApprox: TcGlobals -> ImportMap -> range -> MethInfo -> TType -> bool val CanonicalizePartialInferenceProblem: ConstraintSolverState -> DisplayEnv -> range -> Typars -> unit + +val SolveTyparsEqualTypes: + g: TcGlobals -> css: ConstraintSolverState -> m: range -> typars: TypeInst -> tys: TypeInst -> unit diff --git a/src/Compiler/Checking/Expressions/CheckExpressions.fs b/src/Compiler/Checking/Expressions/CheckExpressions.fs index 83e172628b5..9515b9b440e 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckExpressions.fs @@ -649,31 +649,6 @@ let UnifyTupleTypeAndInferCharacteristics contextInfo (cenv: cenv) denv m knownT AddCxTypeEqualsType contextInfo denv cenv.css m knownTy ty2 tupInfo, ptys -// Allow inference of assembly-affinity and structness from the known type - even from another assembly. This is a rule of -// the language design and allows effective cross-assembly use of anonymous types in some limited circumstances. -let UnifyAnonRecdTypeAndInferCharacteristics contextInfo (cenv: cenv) denv m ty isExplicitStruct unsortedNames = - let g = cenv.g - let anonInfo, ptys = - match tryDestAnonRecdTy g ty with - | ValueSome (anonInfo, ptys) -> - // Note: use the assembly of the known type, not the current assembly - // Note: use the structness of the known type, unless explicit - // Note: use the names of our type, since they are always explicit - let tupInfo = (if isExplicitStruct then tupInfoStruct else anonInfo.TupInfo) - let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) - let ptys = - if List.length ptys = Array.length unsortedNames then ptys - else NewInferenceTypes g (Array.toList anonInfo.SortedNames) - anonInfo, ptys - | ValueNone -> - // Note: no known anonymous record type - use our assembly - let anonInfo = AnonRecdTypeInfo.Create(cenv.thisCcu, mkTupInfo isExplicitStruct, unsortedNames) - anonInfo, NewInferenceTypes g (Array.toList anonInfo.SortedNames) - let ty2 = TType_anon (anonInfo, ptys) - AddCxTypeEqualsType contextInfo denv cenv.css m ty ty2 - anonInfo, ptys - - /// Optimized unification routine that avoids creating new inference /// variables unnecessarily let UnifyFunctionTypeUndoIfFailed (cenv: cenv) denv m ty = @@ -1971,24 +1946,23 @@ let CheckRecdExprDuplicateFields (elems: Ident list) = //------------------------------------------------------------------------- /// Helper used to check record expressions and record patterns -let BuildFieldMap (cenv: cenv) env isPartial ty (flds: ((Ident list * Ident) * 'T) list) m = +let BuildFieldMap (cenv: cenv) env isPartial ty (flds: ExplicitOrSpread<(Ident list * Ident) * 'Explicit, (Ident list * Ident) * 'Spread> list) m = let g = cenv.g let ad = env.eAccessRights - let allFields = flds |> List.map (fun ((_, ident), _) -> ident) - if allFields.Length > 1 then - // In the case of nested record fields on the same level in record copy-and-update. - // We need to reverse the list to get the correct order of fields. - let idents = if isPartial then allFields |> List.rev else allFields - CheckRecdExprDuplicateFields idents + let allFields = flds |> List.map (fun (ExplicitOrSpread.Explicit ((_, ident), _) | ExplicitOrSpread.Spread ((_, ident), _)) -> ident) let fldResolutions = flds - |> List.choose (fun (fld, fldExpr) -> + |> List.choose (fun fld -> try - let fldPath, fldId = fld - let frefSet = ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad ty fldPath fldId allFields - Some(fld, frefSet, fldExpr) + let fld, fldExpr, fldInfo = + match fld with + | ExplicitOrSpread.Explicit ((fldPath, fldId) as fld, fldExpr) -> fld, ExplicitOrSpread.Explicit fldExpr, ExplicitOrSpread.Explicit (ty, fldPath, fldId) + | ExplicitOrSpread.Spread ((fldPath, fldId) as fld, fldExpr) -> fld, ExplicitOrSpread.Spread fldExpr, ExplicitOrSpread.Spread (ty, fldPath, fldId) + + ResolveField cenv.tcSink cenv.nameResolver env.eNameResEnv ad fldInfo allFields + |> Option.map (fun frefSet -> fld, frefSet, fldExpr) with e -> errorRecoveryNoRange e None @@ -7016,7 +6990,7 @@ and TcCtorCall isNaked cenv env tpenv (overallTy: OverallTy) objTy mObjTyOpt ite error(Error(FSComp.SR.tcSyntaxCanOnlyBeUsedToCreateObjectTypes(if superInit then "inherit" else "new"), mWholeCall)) // Check a record construction expression -and TcRecordConstruction (cenv: cenv) (overallTy: TType) isObjExpr env tpenv withExprInfoOpt objTy fldsList m = +and TcRecordConstruction (cenv: cenv) (overallTy: TType) isObjExpr env tpenv withExprInfoOpt (spreadSrcs : (Expr -> Expr) list) objTy fldsList m = let g = cenv.g let tcref, tinst = destAppTy g objTy @@ -7029,24 +7003,45 @@ and TcRecordConstruction (cenv: cenv) (overallTy: TType) isObjExpr env tpenv wit errorR(Error(FSComp.SR.tcConstructorRequiresCall(tycon.DisplayName), m)) let fspecs = tycon.TrueInstanceFieldsAsList - // Freshen types and work out their subtype flexibility - let fldsList = - [ for fname, fexpr in fldsList do - let fspec = - try - fspecs |> List.find (fun fspec -> fspec.LogicalName = fname) - with :? KeyNotFoundException -> - error (Error(FSComp.SR.tcUndefinedField(fname, NicePrint.minimalStringOfType env.DisplayEnv objTy), m)) - let fty = actualTyOfRecdFieldForTycon tycon tinst fspec - let flex = not (isTyparTy g fty) - yield (fname, fexpr, fty, flex) ] + // Freshen types and work out their subtype flexibility // Type check and generalize the supplied bindings let fldsList, tpenv = let env = { env with eContextInfo = ContextInfo.RecordFields } - (tpenv, fldsList) ||> List.mapFold (fun tpenv (fname, fexpr, fty, flex) -> - let fieldExpr, tpenv = TcExprFlex cenv flex false fty env tpenv fexpr - (fname, fieldExpr), tpenv) + let rec tcFields checkedFields tpenv fields = + match fields with + | [] -> List.rev checkedFields, tpenv + | (fname, ExplicitOrSpread.Explicit fexpr) :: fields -> + let checkedFields, tpenv = + fspecs + |> List.tryFind (fun fspec -> fspec.LogicalName = fname) + |> Option.map (fun fspec -> + let fty = actualTyOfRecdFieldForTycon tycon tinst fspec + let flex = not (isTyparTy g fty) + let fieldExpr, tpenv = TcExprFlex cenv flex false fty env tpenv fexpr + (fname, fieldExpr) :: checkedFields, tpenv) + |> Option.defaultWith (fun () -> + error (Error(FSComp.SR.tcUndefinedField(fname, NicePrint.minimalStringOfType env.DisplayEnv objTy), m))) + + tcFields checkedFields tpenv fields + + | (fname, ExplicitOrSpread.Spread (ty, spreadValue)) :: fields -> + let checkedFields = + fspecs + |> List.tryPick (fun fspec -> + if fspec.LogicalName = fname then + let fty = actualTyOfRecdFieldForTycon tycon tinst fspec + let _succeded = AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m fty ty + let overallTy = MustConvertTo (false, fty) + UnifyOverallType cenv env m overallTy ty + let fieldExpr = TcAdjustExprForTypeDirectedConversions cenv overallTy fty env m spreadValue + Some ((fname, mkCoerceIfNeeded g fty (tyOfExpr g fieldExpr) fieldExpr) :: checkedFields) + else None) + |> Option.defaultValue checkedFields // We ignore extra fields from spreads. + + tcFields checkedFields tpenv fields + + tcFields [] tpenv fldsList // Add rebindings for unbound field when an "old value" is available // Effect order: mutable fields may get modified by other bindings... @@ -7106,16 +7101,20 @@ and TcRecordConstruction (cenv: cenv) (overallTy: TType) isObjExpr env tpenv wit let expr = mkRecordExpr g (GetRecdInfo env, tcref, tinst, rfrefs, args, m) let expr = - match withExprInfoOpt with - | None -> - // '{ recd fields }'. // - expr + let locals = + [ + match withExprInfoOpt with + | None -> id + | Some (withExpr, withExprAddrVal, _) -> + // '{ recd with fields }'. + // Assign the first object to a tmp and then construct + let wrap, oldaddr, _readonly, _writeonly = mkExprAddrOfExpr g tycon.IsStructOrEnumTycon false NeverMutates withExpr None m + fun expr -> wrap (mkCompGenLet m withExprAddrVal oldaddr expr) - | Some (withExpr, withExprAddrVal, _) -> - // '{ recd with fields }'. - // Assign the first object to a tmp and then construct - let wrap, oldaddr, _readonly, _writeonly = mkExprAddrOfExpr g tycon.IsStructOrEnumTycon false NeverMutates withExpr None m - wrap (mkCompGenLet m withExprAddrVal oldaddr expr) + yield! spreadSrcs + ] + + (locals, expr) ||> List.foldBack (fun local expr -> local expr) expr, tpenv @@ -7405,10 +7404,11 @@ and TcObjectExpr (cenv: cenv) env tpenv (objTy, realObjTy, argopt, binds, extraI let fldsList = binds |> List.map (fun b -> match BindingNormalization.NormalizeBinding ObjExprBinding cenv env b with - | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(SynIdent(id,_), _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, rhsExpr + | NormalizedBinding (_, _, _, _, [], _, _, _, SynPat.Named(SynIdent(id,_), _, _, _), NormalizedBindingRhs(_, _, rhsExpr), _, _) -> id.idText, ExplicitOrSpread.Explicit rhsExpr | _ -> error(Error(FSComp.SR.tcOnlySimpleBindingsCanBeUsedInConstructionExpressions(), b.RangeOfBindingWithoutRhs))) - TcRecordConstruction cenv objTy true env tpenv None objTy fldsList mWholeExpr + let spreadSrcs = [] + TcRecordConstruction cenv objTy true env tpenv None spreadSrcs objTy fldsList mWholeExpr else // object expression construction e.g. { new A() with ... } or { new IA with ... } let ctorCall, baseIdOpt, tpenv = @@ -7920,6 +7920,7 @@ and TcAssertExpr cenv overallTy env (m: range) tpenv x = and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, mWholeExpr) = CallExprHasTypeSink cenv.tcSink (mWholeExpr, env.NameEnv, overallTy, env.eAccessRights) let g = cenv.g + let ad = env.eAccessRights let requiresCtor = (GetCtorShapeCounter env = 1) // Get special expression forms for constructors let haveCtor = Option.isSome inherits @@ -7936,26 +7937,92 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m let hasOrigExpr = withExprOptChecked.IsSome - let fldsList = - let flds = - synRecdFields - |> List.map (fun (SynExprRecordField (fieldName = (synLongId, isOk); expr = exprBeingAssigned)) -> - // if we met at least one field that is not syntactically correct - raise ReportedError to transfer control to the recovery routine - if not isOk then - // raising ReportedError None transfers control to the closest errorRecovery point but do not make any records into log - // we assume that parse errors were already reported - raise (ReportedError None) - - match withExprOpt, synLongId.LongIdent, exprBeingAssigned with - | _, [ id ], _ -> ([], id), exprBeingAssigned - | Some withExpr, lid, Some exprBeingAssigned -> TransformAstForNestedUpdates cenv env overallTy lid exprBeingAssigned withExpr - | _ -> List.frontAndBack synLongId.LongIdent, exprBeingAssigned) + let spreadSrcs, fldsList, tpenv = + let spreadSrcs, flds = + let tcField (SynExprRecordField (fieldName = synLongId, _; expr = exprBeingAssigned; range = m)) = + let isFromNestedUpdate, fieldId, field = + match withExprOpt, synLongId.LongIdent, exprBeingAssigned with + | _, [ id ], _ -> false, id, ExplicitOrSpread.Explicit (([], id), exprBeingAssigned) + | Some withExpr, lid, Some exprBeingAssigned -> + let _, id as longIdent, exprBeingAssigned = TransformAstForNestedUpdates cenv env overallTy lid exprBeingAssigned withExpr + true, id, ExplicitOrSpread.Explicit (longIdent, Some exprBeingAssigned) + | _ -> + let _, id as longIdent = List.frontAndBack synLongId.LongIdent + false, id, ExplicitOrSpread.Explicit (longIdent, exprBeingAssigned) + + let errorAmbiguousShadowing () = if not isFromNestedUpdate then errorR (Error (FSComp.SR.tcMultipleFieldsInRecord fieldId.idText, m)) + fieldId.idText, field, errorAmbiguousShadowing + + let tcSpread (SynExprSpread (expr = expr; range = m)) = + let flex = false + let spreadSrcExpr, _tpenv = TcExprFlex cenv flex false (NewInferenceType g) env tpenv expr + let tyOfSpreadSrcExpr = tyOfExpr g spreadSrcExpr + + let isValidSpreadSrcTy = + (not g.checkNullness || (nullnessOfTy g tyOfSpreadSrcExpr).Evaluate() <> NullnessInfo.WithNull) + && (isRecdTy g tyOfSpreadSrcExpr || isAnonRecdTy g tyOfSpreadSrcExpr) + + if isValidSpreadSrcTy then + let spreadSrcAddrExpr, spreadSrc = + let srcTyIsStruct = isStructTy g tyOfSpreadSrcExpr + let spreadSrcAddrVal, spreadSrcAddrExpr = mkCompGenLocal mWholeExpr "spreadSrc" (if srcTyIsStruct then mkByrefTy g tyOfSpreadSrcExpr else tyOfSpreadSrcExpr) + let wrap, oldAddr, _readonly, _writeonly = mkExprAddrOfExpr g srcTyIsStruct false NeverMutates spreadSrcExpr None m + spreadSrcAddrExpr, Some (fun expr -> wrap (mkCompGenLet m spreadSrcAddrVal oldAddr expr)) + + let recordFieldsFromSpread = + if isRecdTy g tyOfSpreadSrcExpr then + ResolveRecordOrClassFieldsOfType cenv.nameResolver m ad tyOfSpreadSrcExpr false + else + tryDestAnonRecdTy g tyOfSpreadSrcExpr + |> ValueOption.map (fun (anonInfo, tys) -> + anonInfo.SortedIds + |> List.ofArray + |> List.mapi (fun i id -> Item.AnonRecdField (anonInfo, tys, i, id.idRange))) + |> ValueOption.defaultValue [] + + let fields = + recordFieldsFromSpread + |> List.choose (fun field -> + match field with + | Item.RecdField fieldInfo -> + let fieldExpr = mkRecdFieldGetViaExprAddr (spreadSrcAddrExpr, fieldInfo.RecdFieldRef, fieldInfo.TypeInst, m) + let fieldId = ident (fieldInfo.RecdField.Id.idText, m) + let ty = fieldInfo.FieldType + + let warnAmbiguousShadowing () = + let fmtedSpreadField = NicePrint.stringOfRecdField env.DisplayEnv cenv.infoReader fieldInfo.TyconRef fieldInfo.RecdField + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId.idText, ExplicitOrSpread.Spread (([], fieldId), Some (ty, fieldExpr)), warnAmbiguousShadowing) + + | Item.AnonRecdField (anonInfo, tys, fieldIndex, _) -> + let fieldExpr = mkAnonRecdFieldGet g (anonInfo, spreadSrcAddrExpr, tys, fieldIndex, m) + let fieldId = anonInfo.SortedIds[fieldIndex] + let ty = tys[fieldIndex] + + let warnAmbiguousShadowing () = + let typars = tryAppTy g ty |> ValueOption.map (snd >> List.choose (tryDestTyparTy g >> ValueOption.toOption)) |> ValueOption.defaultValue [] + let fmtedSpreadField = LayoutRender.showL (NicePrint.prettyLayoutOfMemberSig env.DisplayEnv ([], fieldId.idText, typars, [], ty)) + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId.idText, ExplicitOrSpread.Spread (([], fieldId), Some (ty, fieldExpr)), warnAmbiguousShadowing) + + | _ -> None) + + spreadSrc, fields + else + if not expr.IsArbExprAndThusAlreadyReportedError then + errorR (Error (FSComp.SR.tcRecordExprSpreadSourceMustBeRecord (), m)) + None, [] + + let checkSpreadsLanguageFeature m = checkLanguageFeatureAndRecover g.langVersion LanguageFeature.RecordSpreads m + synRecdFields |> Spreads.Values.Records.check checkSpreadsLanguageFeature tcField tcSpread let flds = if hasOrigExpr then GroupUpdatesToNestedFields flds else flds // Check if the overall type is an anon record type and if so raise an copy-update syntax error // let f (r: {| A: int; C: int |}) = { r with A = 1; B = 2; C = 3 } if isAnonRecdTy cenv.g overallTy || isStructAnonRecdTy cenv.g overallTy then - for fld, _ in flds do + for ExplicitOrSpread.Explicit (fld, _) | ExplicitOrSpread.Spread (fld, _) in flds do let _, fldId = fld match TryFindAnonRecdFieldOfType g overallTy fldId.idText with | Some item -> @@ -7967,30 +8034,34 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m // Use the right } in the expression let lastPartRange = withStartEnd (mkPos mWholeExpr.StartLine (mWholeExpr.EndColumn - 1)) (mkPos mWholeExpr.StartLine mWholeExpr.EndColumn) mWholeExpr errorR(Error(FSComp.SR.chkCopyUpdateSyntaxInAnonRecords(), lastPartRange)) - [] + [], [], tpenv else // If the overall type is a record type build a map of the fields - match flds with - | [] -> [] - | _ -> - match BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr with - | None -> [] - | Some(tinst, tcref, _, fldsList) -> + let fieldMap = + match flds with + | [] -> [] + | _ -> + match BuildFieldMap cenv env hasOrigExpr overallTy flds mWholeExpr with + | None -> [] + | Some(tinst, tcref, _, fldsList) -> + + let gtyp = mkWoNullAppTy tcref tinst + UnifyTypes cenv env mWholeExpr overallTy gtyp - let gtyp = mkWoNullAppTy tcref tinst - UnifyTypes cenv env mWholeExpr overallTy gtyp + // (#15290) For copy-and-update expressions, register the record type as a related symbol + // so that "Find All References" on the record type includes copy-and-update usages. + // Reported via CallRelatedSymbolSink to avoid affecting colorization or symbol info. + if hasOrigExpr then + let item = Item.Types(tcref.DisplayName, [gtyp]) + CallRelatedSymbolSink cenv.tcSink (mWholeExpr, item, RelatedSymbolUseKind.CopyAndUpdateRecord) - // (#15290) For copy-and-update expressions, register the record type as a related symbol - // so that "Find All References" on the record type includes copy-and-update usages. - // Reported via CallRelatedSymbolSink to avoid affecting colorization or symbol info. - if hasOrigExpr then - let item = Item.Types(tcref.DisplayName, [gtyp]) - CallRelatedSymbolSink cenv.tcSink (mWholeExpr, item, RelatedSymbolUseKind.CopyAndUpdateRecord) + [ for n, fld in fldsList do + match fld with + | ExplicitOrSpread.Explicit (Some v) -> yield n, ExplicitOrSpread.Explicit v + | ExplicitOrSpread.Spread (Some v) -> yield n, ExplicitOrSpread.Spread v + | _ -> () ] - [ for n, v in fldsList do - match v with - | Some v -> yield n, v - | None -> () ] + spreadSrcs, fieldMap, tpenv let withExprInfoOpt = match withExprOptChecked with @@ -8036,7 +8107,7 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m SolveTypeAsError env.DisplayEnv cenv.css mWholeExpr overallTy mkDefault (mWholeExpr, overallTy), tpenv else - let expr, tpenv = TcRecordConstruction cenv overallTy false env tpenv withExprInfoOpt overallTy fldsList mWholeExpr + let expr, tpenv = TcRecordConstruction cenv overallTy false env tpenv withExprInfoOpt spreadSrcs overallTy fldsList mWholeExpr let expr = match superInitExprOpt with @@ -8045,12 +8116,6 @@ and TcRecdExpr cenv overallTy env tpenv (inherits, withExprOpt, synRecdFields, m | None -> expr expr, tpenv -and CheckAnonRecdExprDuplicateFields (elems: Ident array) = - elems |> Array.iteri (fun i (uc1: Ident) -> - elems |> Array.iteri (fun j (uc2: Ident) -> - if j > i && uc1.idText = uc2.idText then - errorR(Error (FSComp.SR.tcAnonRecdDuplicateFieldId(uc1.idText), uc1.idRange)))) - // Check '{| .... |}' and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = match optOrigSynExpr with @@ -8061,7 +8126,10 @@ and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, // Ideally we should also check for duplicate field IDs in the TcCopyAndUpdateAnonRecdExpr case, but currently the logic is too complex to guarantee a proper error reporting // So here we error instead errorR to avoid cascading internal errors unsortedFieldIdsAndSynExprsGiven - |> List.countBy (fun (fId, _, _) -> textOfLid fId.LongIdent) + |> List.choose (function + | SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (fieldName = SynLongIdent (name, _, _)), _) -> Some name + | SynExprAnonRecordFieldOrSpread.Spread _ -> (* Spreads are allowed to shadow fields. *) None) + |> List.countBy textOfLid |> List.iter (fun (label, count) -> if count > 1 then error (Error (FSComp.SR.tcAnonRecdDuplicateFieldId(label), mWholeExpr))) @@ -8070,39 +8138,167 @@ and TcAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, optOrigSynExpr, and TcNewAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = let g = cenv.g - let unsortedFieldSynExprsGiven = unsortedFieldIdsAndSynExprsGiven |> List.map (fun (_, _, fieldExpr) -> fieldExpr) - let unsortedFieldIds = unsortedFieldIdsAndSynExprsGiven |> List.map (fun (synLongIdent, _, _) -> synLongIdent.LongIdent[0]) |> List.toArray - let anonInfo, sortedFieldTys = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIds - - if unsortedFieldIds.Length > 1 then - CheckAnonRecdExprDuplicateFields unsortedFieldIds - - // Sort into canonical order - let sortedIndexedArgs = - unsortedFieldIdsAndSynExprsGiven - |> List.indexed - |> List.sortBy (fun (i,_) -> unsortedFieldIds[i].idText) - - // Map from sorted indexes to unsorted indexes - let sigma = sortedIndexedArgs |> List.map fst |> List.toArray - let sortedFieldExprs = sortedIndexedArgs |> List.map snd - - sortedFieldExprs |> List.iteri (fun j (synLongIdent, _, _) -> - let m = rangeOfLid synLongIdent.LongIdent - let item = Item.AnonRecdField(anonInfo, sortedFieldTys, j, m) - CallNameResolutionSink cenv.tcSink (m, env.NameEnv, item, emptyTyparInst, ItemOccurrence.Use, env.eAccessRights)) - - let unsortedFieldTys = - sortedFieldTys - |> List.indexed - |> List.sortBy (fun (sortedIdx, _) -> sigma[sortedIdx]) - |> List.map snd + let ad = env.eAccessRights - let flexes = unsortedFieldTys |> List.map (fun _ -> true) + let maybeAnonRecdTargetTy = tryDestAnonRecdTy g overallTy + + let spreadSrcs, unsortedFields, anonInfo, tpenv = + let spreadSrcs, fieldIdsInAlphabeticalOrder, fieldTysInAlphabeticalOrder, fieldsInSrcOrder = + let checkSpreadsLanguageFeature m = checkLanguageFeatureAndRecover g.langVersion LanguageFeature.RecordSpreads m + + let possibleTargetTyAt = + match maybeAnonRecdTargetTy with + | ValueSome (anonInfo, tys) -> + let names = anonInfo.SortedNames + let tys = List.toArray tys + fun name -> + let i = Array.BinarySearch (names, name) + if i < 0 then ValueNone + else ValueSome tys[i] + | ValueNone -> fun _ -> ValueNone + + let tcField (SynExprAnonRecordField (fieldName = SynLongIdent (fieldId, _, _); expr = expr; range = m)) = + let fieldId = match fieldId with [fieldId] -> fieldId | _ -> error (InternalError ("All field names should have been transformed into simple identifiers by this point.", m)) + let fieldTy = possibleTargetTyAt fieldId.idText |> ValueOption.defaultWith (fun () -> NewInferenceType g) + let tcField _ = fun () -> let fieldExpr, _ = TcExprFlex cenv true false fieldTy env tpenv expr in fieldExpr + let errorAmbiguousShadowing () = errorR (Error (FSComp.SR.tcAnonRecdDuplicateFieldId fieldId.idText, m)) + fieldId, fieldTy, expr, tcField, errorAmbiguousShadowing + + let tcSpread expr m = + let flex = false + let spreadSrcExpr, _ = TcExprFlex cenv flex false (NewInferenceType g) env tpenv expr + let tyOfSpreadSrcExpr = tyOfExpr g spreadSrcExpr + + let isValidSpreadSrcTy = + (not g.checkNullness || (nullnessOfTy g tyOfSpreadSrcExpr).Evaluate() <> NullnessInfo.WithNull) + && (isRecdTy g tyOfSpreadSrcExpr || isAnonRecdTy g tyOfSpreadSrcExpr) + + if isValidSpreadSrcTy then + let spreadSrcAddrExpr, spreadSrcExpr = + let srcTyIsStruct = isStructTy g tyOfSpreadSrcExpr + let spreadSrcAddrVal, spreadSrcAddrExpr = mkCompGenLocal mWholeExpr "spreadSrc" (if srcTyIsStruct then mkByrefTy g tyOfSpreadSrcExpr else tyOfSpreadSrcExpr) + let wrap, oldAddr, _readonly, _writeonly = mkExprAddrOfExpr g srcTyIsStruct false NeverMutates spreadSrcExpr None m + spreadSrcAddrExpr, (fun expr -> wrap (mkCompGenLet m spreadSrcAddrVal oldAddr expr)) + + let recordFieldsFromSpread = + if isRecdTy g tyOfSpreadSrcExpr then + ResolveRecordOrClassFieldsOfType cenv.nameResolver m ad tyOfSpreadSrcExpr false + else + tryDestAnonRecdTy g tyOfSpreadSrcExpr + |> ValueOption.map (fun (anonInfo, tys) -> + anonInfo.SortedIds + |> List.ofArray + |> List.mapi (fun i id -> Item.AnonRecdField (anonInfo, tys, i, id.idRange))) + |> ValueOption.defaultValue [] + + let fields = + recordFieldsFromSpread + |> List.choose (fun field -> + match field with + | Item.RecdField fieldInfo -> + let fieldId = fieldInfo.RecdField.Id + let ty = possibleTargetTyAt fieldId.idText |> ValueOption.defaultValue fieldInfo.FieldType + + let tcField () = + let get = mkRecdFieldGetViaExprAddr (spreadSrcAddrExpr, fieldInfo.RecdFieldRef, fieldInfo.TypeInst, m) + let overallTy = MustConvertTo (false, ty) + UnifyOverallType cenv env m overallTy fieldInfo.FieldType + let fieldExpr = TcAdjustExprForTypeDirectedConversions cenv overallTy fieldInfo.FieldType env m get + let fieldExpr = mkCoerceIfNeeded g ty (tyOfExpr g fieldExpr) fieldExpr + fieldExpr + + let warnAmbiguousShadowing () = + let fmtedSpreadField = NicePrint.stringOfRecdField env.DisplayEnv cenv.infoReader fieldInfo.TyconRef fieldInfo.RecdField + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId, ty, tcField, warnAmbiguousShadowing) + + | Item.AnonRecdField (anonInfo, tys, fieldIndex, _) -> + let fieldId = anonInfo.SortedIds[fieldIndex] + let ty = possibleTargetTyAt fieldId.idText |> ValueOption.defaultWith (fun () -> tys[fieldIndex]) + + let tcField () = + let get = mkAnonRecdFieldGetViaExprAddr (anonInfo, spreadSrcAddrExpr, tys, fieldIndex, m) + let overallTy = MustConvertTo (false, ty) + UnifyOverallType cenv env m overallTy tys[fieldIndex] + let fieldExpr = TcAdjustExprForTypeDirectedConversions cenv overallTy tys[fieldIndex] env m get + let fieldExpr = mkCoerceIfNeeded g ty (tyOfExpr g fieldExpr) fieldExpr + fieldExpr + + let warnAmbiguousShadowing () = + let typars = tryAppTy g ty |> ValueOption.map (snd >> List.choose (tryDestTyparTy g >> ValueOption.toOption)) |> ValueOption.defaultValue [] + let fmtedSpreadField = LayoutRender.showL (NicePrint.prettyLayoutOfMemberSig env.DisplayEnv ([], fieldId.idText, typars, [], ty)) + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId, ty, tcField, warnAmbiguousShadowing) + + | _ -> None) + + Some spreadSrcExpr, fields + else + if not expr.IsArbExprAndThusAlreadyReportedError then + errorR (Error (FSComp.SR.tcAnonRecordExprSpreadSourceMustBeRecord (), expr.Range)) + None, [] + + let targetAnonRecordTy, targetAnonRecordTyContainsField = + maybeAnonRecdTargetTy + |> ValueOption.map (fun (anonInfo, _) -> + let sortedNames = anonInfo.SortedNames + true, fun fieldId -> Array.BinarySearch (sortedNames, fieldId) >= 0) + |> ValueOption.defaultValue (false, fun _ -> false) + + unsortedFieldIdsAndSynExprsGiven + |> Spreads.Values.AnonymousRecords.check + checkSpreadsLanguageFeature + tcField + tcSpread + (targetAnonRecordTy, targetAnonRecordTyContainsField) + + // Unify the overall ty with the inferred target anonymous record type. + let anonInfo, sortedFieldTys = + let anonInfo, sortedFieldTys = + let unsortedNames = + fieldsInSrcOrder + |> List.map (fun (fieldId, _, _) -> fieldId) + |> List.toArray + + match maybeAnonRecdTargetTy with + | ValueSome (anonInfo, _) -> + // Note: use the assembly of the known type, not the current assembly + // Note: use the structness of the known type, unless explicit + // Note: use the names of our type, since they are always explicit + let tupInfo = if isStruct then tupInfoStruct else anonInfo.TupInfo + let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) + anonInfo, fieldTysInAlphabeticalOrder + | ValueNone -> + // Note: no known anonymous record type - use our assembly + let anonInfo = AnonRecdTypeInfo.Create(cenv.thisCcu, mkTupInfo isStruct, unsortedNames) + anonInfo, fieldTysInAlphabeticalOrder + let ty2 = TType_anon (anonInfo, sortedFieldTys) + AddCxTypeEqualsType env.eContextInfo env.DisplayEnv cenv.css mWholeExpr overallTy ty2 + anonInfo, sortedFieldTys + + // All sorted field identifiers, including potential duplicates. + let sortedNames = fieldIdsInAlphabeticalOrder + + // Call name resolution. + sortedNames + |> List.iteri (fun j fieldName -> + let m = fieldName.idRange + let item = Item.AnonRecdField(anonInfo, sortedFieldTys, j, m) + CallNameResolutionSink cenv.tcSink (m, env.NameEnv, item, emptyTyparInst, ItemOccurrence.Use, env.eAccessRights)) + + spreadSrcs, fieldsInSrcOrder, anonInfo, tpenv + + let unsortedNames = [| for fieldName, _, _ in unsortedFields -> fieldName |] + let unsortedTys = [ for _, fieldTy, _ in unsortedFields -> fieldTy ] + let unsortedExprs = [ for _, _, tcField in unsortedFields -> tcField () ] - let unsortedCheckedArgs, tpenv = TcExprsWithFlexes cenv env mWholeExpr tpenv flexes unsortedFieldTys unsortedFieldSynExprsGiven + let expr = + (spreadSrcs, mkAnonRecd g mWholeExpr anonInfo unsortedNames unsortedExprs unsortedTys) + ||> List.foldBack (fun wrap expr -> wrap expr) - mkAnonRecd g mWholeExpr anonInfo unsortedFieldIds unsortedCheckedArgs unsortedFieldTys, tpenv + expr, tpenv and TcCopyAndUpdateAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, (origExpr, blockSeparator), unsortedFieldIdsAndSynExprsGiven, mWholeExpr) = // The fairly complex case '{| origExpr with X = 1; Y = 2 |}' @@ -8115,6 +8311,7 @@ and TcCopyAndUpdateAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, (or // Unlike in the case of record type copy-and-update {| a with X = 1 |} does not force a.X to exist or have had type 'int' let g = cenv.g + let ad = env.eAccessRights let origExprTy = NewInferenceType g let origExprChecked, tpenv = TcExpr cenv (MustEqual origExprTy) env tpenv origExpr let oldv, oldve = mkCompGenLocal mWholeExpr "inputRecord" origExprTy @@ -8123,17 +8320,128 @@ and TcCopyAndUpdateAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, (or if not (isAppTy g origExprTy || isAnonRecdTy g origExprTy) then error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) - // Expand expressions with respect to potential nesting - let unsortedFieldIdsAndSynExprsGiven = - unsortedFieldIdsAndSynExprsGiven - |> List.map (fun (synLongIdent, _, exprBeingAssigned) -> - match synLongIdent.LongIdent with - | [] -> error(Error(FSComp.SR.nrUnexpectedEmptyLongId(), mWholeExpr)) - | [ id ] -> ([], id), Some exprBeingAssigned - | lid -> TransformAstForNestedUpdates cenv env origExprTy lid exprBeingAssigned (origExpr, blockSeparator)) - |> GroupUpdatesToNestedFields + let maybeAnonRecdTargetTy = tryDestAnonRecdTy g overallTy + + // Collect explicitly-defined fields and fields from spreads + // and expand expressions with respect to potential nesting. + let spreadSrcs, _fieldIdsInAlphabeticalOrder, _fieldTysInAlphabeticalOrder, fieldsInSrcOrder = + let checkSpreadsLanguageFeature m = checkLanguageFeatureAndRecover g.langVersion LanguageFeature.RecordSpreads m + + let possibleTargetTyAt = + match maybeAnonRecdTargetTy with + | ValueSome (anonInfo, tys) -> + let names = anonInfo.SortedNames + let tys = List.toArray tys + fun name -> + let i = Array.BinarySearch (names, name) + if i < 0 then ValueNone + else ValueSome tys[i] + | ValueNone -> fun _ -> ValueNone + + let tcField (SynExprAnonRecordField (fieldName = SynLongIdent (fieldLid, _, _); expr = expr; range = m)) = + let isFromNestedUpdate, fieldId, transformedFieldExpr = + match fieldLid with + | [] -> error(Error(FSComp.SR.nrUnexpectedEmptyLongId(), mWholeExpr)) + | [ id ] -> false, id, expr + | lid -> + let (_, id), exprBeingAssigned = TransformAstForNestedUpdates cenv env origExprTy lid expr (origExpr, blockSeparator) + true, id, exprBeingAssigned + + let fieldTy = possibleTargetTyAt fieldId.idText |> ValueOption.defaultWith (fun () -> NewInferenceType g) + let tcField expr = fun () -> let fieldExpr, _ = TcExprFlex cenv true false fieldTy env tpenv expr in fieldExpr + let errorAmbiguousShadowing () = if not isFromNestedUpdate then errorR (Error (FSComp.SR.tcAnonRecdDuplicateFieldId fieldId.idText, m)) + + fieldId, fieldTy, transformedFieldExpr, tcField, errorAmbiguousShadowing + + let tcSpread expr m = + let flex = false + let spreadSrcExpr, _ = TcExprFlex cenv flex false (NewInferenceType g) env tpenv expr + let tyOfSpreadSrcExpr = tyOfExpr g spreadSrcExpr + + let isValidSpreadSrcTy = + (not g.checkNullness || (nullnessOfTy g tyOfSpreadSrcExpr).Evaluate() <> NullnessInfo.WithNull) + && (isRecdTy g tyOfSpreadSrcExpr || isAnonRecdTy g tyOfSpreadSrcExpr) + + if isValidSpreadSrcTy then + let spreadSrcAddrExpr, spreadSrcExpr = + let srcTyIsStruct = isStructTy g tyOfSpreadSrcExpr + let spreadSrcAddrVal, spreadSrcAddrExpr = mkCompGenLocal mWholeExpr "spreadSrc" (if srcTyIsStruct then mkByrefTy g tyOfSpreadSrcExpr else tyOfSpreadSrcExpr) + let wrap, oldAddr, _readonly, _writeonly = mkExprAddrOfExpr g srcTyIsStruct false NeverMutates spreadSrcExpr None m + spreadSrcAddrExpr, (fun expr -> wrap (mkCompGenLet m spreadSrcAddrVal oldAddr expr)) + + let recordFieldsFromSpread = + if isRecdTy g tyOfSpreadSrcExpr then + ResolveRecordOrClassFieldsOfType cenv.nameResolver m ad tyOfSpreadSrcExpr false + else + tryDestAnonRecdTy g tyOfSpreadSrcExpr + |> ValueOption.map (fun (anonInfo, tys) -> + anonInfo.SortedIds + |> List.ofArray + |> List.mapi (fun i id -> Item.AnonRecdField (anonInfo, tys, i, id.idRange))) + |> ValueOption.defaultValue [] + + let fields = + recordFieldsFromSpread + |> List.choose (fun field -> + match field with + | Item.RecdField fieldInfo -> + let fieldId = fieldInfo.RecdField.Id + let ty = possibleTargetTyAt fieldId.idText |> ValueOption.defaultValue fieldInfo.FieldType + + let tcField () = + let get = mkRecdFieldGetViaExprAddr (spreadSrcAddrExpr, fieldInfo.RecdFieldRef, fieldInfo.TypeInst, m) + let overallTy = MustConvertTo (false, ty) + UnifyOverallType cenv env m overallTy fieldInfo.FieldType + let fieldExpr = TcAdjustExprForTypeDirectedConversions cenv overallTy fieldInfo.FieldType env m get + let fieldExpr = mkCoerceIfNeeded g ty (tyOfExpr g fieldExpr) fieldExpr + fieldExpr + + let warnAmbiguousShadowing () = + let fmtedSpreadField = NicePrint.stringOfRecdField env.DisplayEnv cenv.infoReader fieldInfo.TyconRef fieldInfo.RecdField + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId, ty, tcField, warnAmbiguousShadowing) + + | Item.AnonRecdField (anonInfo, tys, fieldIndex, _) -> + let fieldId = anonInfo.SortedIds[fieldIndex] + let ty = possibleTargetTyAt fieldId.idText |> ValueOption.defaultWith (fun () -> tys[fieldIndex]) + + let tcField () = + let get = mkAnonRecdFieldGetViaExprAddr (anonInfo, spreadSrcAddrExpr, tys, fieldIndex, m) + let overallTy = MustConvertTo (false, ty) + UnifyOverallType cenv env m overallTy tys[fieldIndex] + let fieldExpr = TcAdjustExprForTypeDirectedConversions cenv overallTy tys[fieldIndex] env m get + let fieldExpr = mkCoerceIfNeeded g ty (tyOfExpr g fieldExpr) fieldExpr + fieldExpr + + let warnAmbiguousShadowing () = + let typars = tryAppTy g ty |> ValueOption.map (snd >> List.choose (tryDestTyparTy g >> ValueOption.toOption)) |> ValueOption.defaultValue [] + let fmtedSpreadField = LayoutRender.showL (NicePrint.prettyLayoutOfMemberSig env.DisplayEnv ([], fieldId.idText, typars, [], ty)) + warning (Error (FSComp.SR.tcRecordExprSpreadFieldShadowsExplicitField fmtedSpreadField, m)) + + Some (fieldId, ty, tcField, warnAmbiguousShadowing) + + | _ -> None) + + Some spreadSrcExpr, fields + else + if not expr.IsArbExprAndThusAlreadyReportedError then + errorR (Error (FSComp.SR.tcAnonRecordExprSpreadSourceMustBeRecord (), expr.Range)) + None, [] - let unsortedFieldSynExprsGiven = unsortedFieldIdsAndSynExprsGiven |> List.choose snd + let targetAnonRecordTy, targetAnonRecordTyContainsField = + maybeAnonRecdTargetTy + |> ValueOption.map (fun (anonInfo, _) -> + let sortedNames = anonInfo.SortedNames + true, fun fieldId -> Array.BinarySearch (sortedNames, fieldId) >= 0) + |> ValueOption.defaultValue (false, fun _ -> false) + + unsortedFieldIdsAndSynExprsGiven + |> Spreads.Values.AnonymousRecords.check + checkSpreadsLanguageFeature + tcField + tcSpread + (targetAnonRecordTy, targetAnonRecordTyContainsField) let origExprIsStruct = match tryDestAnonRecdTy g origExprTy with @@ -8150,37 +8458,59 @@ and TcCopyAndUpdateAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, (or /// - Choice2Of2 for a binding coming from the original expression let unsortedIdAndExprsAll = [| - for (_, id), e in unsortedFieldIdsAndSynExprsGiven do - yield (id, Choice1Of2 e) + for id, ty, tcField in fieldsInSrcOrder do + yield (id, ty, Choice1Of2 tcField) + match tryDestAnonRecdTy g origExprTy with | ValueSome (anonInfo, tinst) -> for i, id in Array.indexed anonInfo.SortedIds do - yield id, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) + yield id, NewInferenceType g, Choice2Of2 (mkAnonRecdFieldGetViaExprAddr (anonInfo, oldveaddr, tinst, i, mOrigExpr)) | ValueNone -> match tryAppTy g origExprTy with | ValueSome(tcref, tinst) when tcref.IsRecordTycon -> let fspecs = tcref.Deref.TrueInstanceFieldsAsList for fspec in fspecs do - yield fspec.Id, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) + yield fspec.Id, NewInferenceType g, Choice2Of2 (mkRecdFieldGetViaExprAddr (oldveaddr, tcref.MakeNestedRecdFieldRef fspec, tinst, mOrigExpr)) | _ -> error (Error (FSComp.SR.tcCopyAndUpdateNeedsRecordType(), mOrigExpr)) |] - |> Array.distinctBy (fst >> textOfId) - - let unsortedFieldIdsAll = Array.map fst unsortedIdAndExprsAll + |> Array.distinctBy (fun (fieldId, _, _) -> textOfId fieldId) - let anonInfo, sortedFieldTysAll = UnifyAnonRecdTypeAndInferCharacteristics env.eContextInfo cenv env.DisplayEnv mWholeExpr overallTy isStruct unsortedFieldIdsAll + let unsortedFieldIdsAll = [|for fieldId, _, _ in unsortedIdAndExprsAll -> fieldId|] - let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (snd >> fst >> textOfId) + let sortedIndexedFieldsAll = unsortedIdAndExprsAll |> Array.indexed |> Array.sortBy (fun (_, (fieldId, _, _)) -> textOfId fieldId) // map from sorted indexes to unsorted indexes let sigma = Array.map fst sortedIndexedFieldsAll let sortedFieldsAll = Array.map snd sortedIndexedFieldsAll + // Unify the overall ty with the inferred target anonymous record type. + let anonInfo, sortedFieldTysAll = + let anonInfo = + let unsortedNames = unsortedFieldIdsAll + + match maybeAnonRecdTargetTy with + | ValueSome (anonInfo, _) -> + // Note: use the assembly of the known type, not the current assembly + // Note: use the structness of the known type, unless explicit + // Note: use the names of our type, since they are always explicit + let tupInfo = if isStruct then tupInfoStruct else anonInfo.TupInfo + let anonInfo = AnonRecdTypeInfo.Create(anonInfo.Assembly, tupInfo, unsortedNames) + anonInfo + | ValueNone -> + // Note: no known anonymous record type - use our assembly + let anonInfo = AnonRecdTypeInfo.Create(cenv.thisCcu, mkTupInfo isStruct, unsortedNames) + anonInfo + + let sortedFieldTysAll = [for _, ty, _ in sortedFieldsAll -> ty] + let ty2 = TType_anon (anonInfo, sortedFieldTysAll) + AddCxTypeEqualsType env.eContextInfo env.DisplayEnv cenv.css mWholeExpr overallTy ty2 + anonInfo, sortedFieldTysAll + // Report _all_ identifiers to name resolution. We should likely just report the ones // that are explicit in source code. - sortedFieldsAll |> Array.iteri (fun j (fieldId, expr) -> + sortedFieldsAll |> Array.iteri (fun j (fieldId, _, expr) -> match expr with | Choice1Of2 _ -> let item = Item.AnonRecdField(anonInfo, sortedFieldTysAll, j, fieldId.idRange) @@ -8193,33 +8523,21 @@ and TcCopyAndUpdateAnonRecdExpr cenv (overallTy: TType) env tpenv (isStruct, (or |> List.sortBy (fun (sortedIdx, _) -> sigma[sortedIdx]) |> List.map snd - let unsortedFieldTysGiven = - unsortedFieldTysAll - |> List.take unsortedFieldIdsAndSynExprsGiven.Length - - let flexes = unsortedFieldTysGiven |> List.map (fun _ -> true) - // Check the expressions in unsorted order - let unsortedFieldExprsGiven, tpenv = - TcExprsWithFlexes cenv env mWholeExpr tpenv flexes unsortedFieldTysGiven unsortedFieldSynExprsGiven - - let unsortedFieldExprsGiven = unsortedFieldExprsGiven |> List.toArray - - let unsortedFieldIds = - unsortedIdAndExprsAll - |> Array.map fst + let unsortedFieldExprsGiven = fieldsInSrcOrder |> List.map (fun (_, _, tcField) -> tcField ()) |> List.toArray + let unsortedFieldIds = unsortedFieldIdsAll let unsortedFieldExprs = unsortedIdAndExprsAll - |> Array.mapi (fun unsortedIdx (_, expr) -> + |> Array.mapi (fun unsortedIdx (_fieldId, ty, expr) -> match expr with | Choice1Of2 _ -> unsortedFieldExprsGiven[unsortedIdx] - | Choice2Of2 subExpr -> UnifyTypes cenv env mOrigExpr (tyOfExpr g subExpr) unsortedFieldTysAll[unsortedIdx]; subExpr) + | Choice2Of2 subExpr -> UnifyTypes cenv env mOrigExpr (tyOfExpr g subExpr) ty; subExpr) |> List.ofArray // Permute the expressions to sorted order in the TAST let expr = mkAnonRecd g mWholeExpr anonInfo unsortedFieldIds unsortedFieldExprs unsortedFieldTysAll - let expr = wrap expr + let expr = (wrap :: spreadSrcs, expr) ||> List.foldBack (fun wrap expr -> wrap expr) // Bind the original expression let expr = mkCompGenLet mOrigExpr oldv origExprChecked expr @@ -9401,7 +9719,9 @@ and TcImplicitOpItemThen (cenv: cenv) overallTy env id sln tpenv mItem delayed = | SynExpr.Tuple (_, synExprs, _, _) | SynExpr.ArrayOrList (_, synExprs, _) -> synExprs |> List.forall isSimpleArgument - | SynExpr.Record (copyInfo=copyOpt; recordFields=fields) -> copyOpt |> Option.forall (fst >> isSimpleArgument) && fields |> List.forall ((fun (SynExprRecordField(expr=e)) -> e) >> Option.forall isSimpleArgument) + | SynExpr.Record (copyInfo=copyOpt; recordFields=fields) -> + copyOpt |> Option.forall (fst >> isSimpleArgument) + && fields |> List.forall ((function SynExprRecordFieldOrSpread.Field (SynExprRecordField(expr=e), _) -> e | _ -> None) >> Option.forall isSimpleArgument) | SynExpr.App (_, _, synExpr, synExpr2, _) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 | SynExpr.IfThenElse (ifExpr=synExpr; thenExpr=synExpr2; elseExpr=synExprOpt) -> isSimpleArgument synExpr && isSimpleArgument synExpr2 && Option.forall isSimpleArgument synExprOpt | SynExpr.DotIndexedGet (synExpr, _, _, _) -> isSimpleArgument synExpr diff --git a/src/Compiler/Checking/Expressions/CheckExpressions.fsi b/src/Compiler/Checking/Expressions/CheckExpressions.fsi index d99bfa88e18..4332d64c726 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressions.fsi +++ b/src/Compiler/Checking/Expressions/CheckExpressions.fsi @@ -903,15 +903,21 @@ val UnifyTupleTypeAndInferCharacteristics: 'T list -> TupInfo * TTypes +/// Helper used to check for duplicate fields in records. +val CheckRecdExprDuplicateFields: elems: Ident list -> unit + /// Helper used to check both record expressions and record patterns val BuildFieldMap: cenv: TcFileState -> env: TcEnv -> isPartial: bool -> ty: TType -> - flds: ((Ident list * Ident) * 'T) list -> + flds: ExplicitOrSpread<(Ident list * Ident) * 'Explicit, (Ident list * Ident) * 'Spread> list -> m: range -> - (TypeInst * TyconRef * Map * (string * 'T) list) option + (TypeInst * + TyconRef * + Map> * + (string * ExplicitOrSpread<'Explicit, 'Spread>) list) option /// Check a long identifier 'Case' or 'Case argsR' that has been resolved to an active pattern case val TcPatLongIdentActivePatternCase: diff --git a/src/Compiler/Checking/NameResolution.fs b/src/Compiler/Checking/NameResolution.fs index 898dc78aa75..fcb124f256b 100644 --- a/src/Compiler/Checking/NameResolution.fs +++ b/src/Compiler/Checking/NameResolution.fs @@ -3940,8 +3940,19 @@ let SuggestLabelsOfRelatedRecords g (nenv: NameResolutionEnv) (id: Ident) (allFi UndefinedName(0, FSComp.SR.undefinedNameRecordLabel, id, suggestLabels) +[] +type internal ExplicitOrSpread<'Explicit, 'Spread> = + /// An expression or value derived from an explicit member or record field. + | Explicit of 'Explicit + + /// An expression or value derived from a member or field coming from a spread. + | Spread of 'Spread + +let (|ExplicitOrSpread|) (ExplicitOrSpread.Explicit value | ExplicitOrSpread.Spread value) = value + /// Resolve a long identifier representing a record field -let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFields = +let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad fldInfo allFields = + let (ExplicitOrSpread (ty, mp, id: Ident)) = fldInfo let typeNameResInfo = TypeNameResolutionInfo.Default let g = ncenv.g let m = id.idRange @@ -3967,9 +3978,10 @@ let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFi match tryTcrefOfAppTy g ty with | ValueSome tcref -> match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText, m, ty) with - | ValueSome (RecdFieldInfo(_, rfref)) -> [ResolutionInfo.Empty, FieldResolution(FreshenRecdFieldRef ncenv m rfref, false)] + | ValueSome (RecdFieldInfo(_, rfref)) -> Some [ResolutionInfo.Empty, FieldResolution(FreshenRecdFieldRef ncenv m rfref, false)] | _ -> - if tcref.IsRecordTycon then + if fldInfo.IsSpread then None + elif tcref.IsRecordTycon then // record label doesn't belong to record type -> suggest other labels of same record let suggestLabels (addToBuffer: string -> unit) = for label in SuggestOtherLabelsOfSameRecordType g nenv ty id allFields do @@ -3979,8 +3991,8 @@ let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFi let errorText = FSComp.SR.nrRecordDoesNotContainSuchLabel(typeName, id.idText) error(ErrorWithSuggestions(errorText, m, id.idText, suggestLabels)) else - lookup() - | ValueNone -> lookup() + Some (lookup()) + | ValueNone -> Some (lookup()) | _ -> let lid = (mp@[id]) let tyconSearch ad () = @@ -4011,17 +4023,18 @@ let ResolveFieldPrim sink (ncenv: NameResolver) nenv ad ty (mp, id: Ident) allFi if not (isNil rest) then errorR(Error(FSComp.SR.nrInvalidFieldLabel(), (List.head rest).idRange)) - [(resInfo, item)] + Some [(resInfo, item)] -let ResolveField sink ncenv nenv ad ty mp id allFields = - let res = ResolveFieldPrim sink ncenv nenv ad ty (mp, id) allFields +let ResolveField sink ncenv nenv ad fldInfo allFields = + let res = ResolveFieldPrim sink ncenv nenv ad fldInfo allFields // Register the results of any field paths "Module.Type" in "Module.Type.field" as a name resolution. (Note, the path resolution // info is only non-empty if there was a unique resolution of the field) - let checker = ResultTyparChecker(fun () -> true) res - |> List.map (fun (resInfo, rfref) -> - ResolutionInfo.SendEntityPathToSink(sink, ncenv, nenv, ItemOccurrence.UseInType, ad, resInfo, checker) - rfref) + |> Option.map (fun res -> + let checker = ResultTyparChecker(fun () -> true) + res |> List.map (fun (resInfo, rfref) -> + ResolutionInfo.SendEntityPathToSink(sink, ncenv, nenv, ItemOccurrence.UseInType, ad, resInfo, checker) + rfref)) /// Resolve a long identifier representing a nested record field. /// diff --git a/src/Compiler/Checking/NameResolution.fsi b/src/Compiler/Checking/NameResolution.fsi index 1dc02a2245b..e01573c21b2 100755 --- a/src/Compiler/Checking/NameResolution.fsi +++ b/src/Compiler/Checking/NameResolution.fsi @@ -834,17 +834,25 @@ val internal ResolveTypeLongIdent: genOk: PermitDirectReferenceToGeneratedType -> ResultOrException +[] +type internal ExplicitOrSpread<'Explicit, 'Spread> = + /// An expression or value derived from an explicit member or record field. + | Explicit of 'Explicit + + /// An expression or value derived from a member or field coming from a spread. + | Spread of 'Spread + +val (|ExplicitOrSpread|): ExplicitOrSpread<'Value, 'Value> -> 'Value + /// Resolve a long identifier to a field val internal ResolveField: sink: TcResultsSink -> ncenv: NameResolver -> nenv: NameResolutionEnv -> ad: AccessorDomain -> - ty: TType -> - mp: Ident list -> - id: Ident -> + fldInfo: ExplicitOrSpread -> allFields: Ident list -> - FieldResolution list + FieldResolution list option /// Resolve a long identifier to a nested field val internal ResolveNestedField: diff --git a/src/Compiler/Checking/Spreads.fs b/src/Compiler/Checking/Spreads.fs new file mode 100644 index 00000000000..70f361c773a --- /dev/null +++ b/src/Compiler/Checking/Spreads.fs @@ -0,0 +1,254 @@ +[] +module internal FSharp.Compiler.Spreads + +open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTreeOps + +[] +module private Patterns = + [] + let LeftwardExplicit = true + + [] + let NoLeftwardExplicit = false + +/// Functions for checking type spreads. +[] +module Types = + /// Functions for checking record type spreads. + [] + module Records = + /// Typechecks the given list of record fields or spreads. + let check checkSpreadsLanguageFeature tcField tcSpread (fieldsAndSpreads: SynFieldOrSpread list) : _ list = + let rec loop fields i fieldsAndSpreads = + match fieldsAndSpreads with + | [] -> + fields + |> Map.toList + |> List.collect (fun (_, (_, dupes)) -> dupes) + |> List.sortBy (fun (i, _) -> i) + |> List.map (fun (_, r) -> r) + + | SynFieldOrSpread.Field(SynField(idOpt = None)) :: fieldsAndSpreads -> loop fields i fieldsAndSpreads + + | SynFieldOrSpread.Field(SynField(idOpt = Some fieldId) as synField) :: fieldsAndSpreads -> + let field, errorAmbiguousShadowing = tcField synField + + let fields = + fields + |> Map.change fieldId.idText (function + | None -> Some(LeftwardExplicit, [ i, field ]) + | Some(LeftwardExplicit, dupes) -> + errorAmbiguousShadowing () + Some(LeftwardExplicit, (i, field) :: dupes) + | Some(NoLeftwardExplicit, _dupes) -> Some(LeftwardExplicit, [ i, field ])) + + loop fields (i + 1) fieldsAndSpreads + + | SynFieldOrSpread.Spread(SynTypeSpread(range = m) as synSpread) :: fieldsAndSpreads -> + checkSpreadsLanguageFeature m + + let rec collectFieldsFromSpread fields i fieldsFromSpread = + match fieldsFromSpread with + | [] -> fields, i + | (fieldId, field, warnAmbiguousShadowing) :: fieldsFromSpread -> + let fields = + fields + |> Map.change fieldId (function + | None -> Some(NoLeftwardExplicit, [ i, field ]) + | Some(LeftwardExplicit, _dupes) -> + warnAmbiguousShadowing () + Some(LeftwardExplicit, [ i, field ]) + | Some(NoLeftwardExplicit, _dupes) -> Some(NoLeftwardExplicit, [ i, field ])) + + collectFieldsFromSpread fields (i + 1) fieldsFromSpread + + let fields, i = collectFieldsFromSpread fields i (tcSpread synSpread) + loop fields i fieldsAndSpreads + + loop Map.empty 0 fieldsAndSpreads + +/// Functions for checking value spreads. +[] +module Values = + /// Functions for checking record spreads. + [] + module Records = + /// Typechecks the given list of record fields or spreads. + let check checkSpreadsLanguageFeature tcField tcSpread (fieldsAndSpreads: SynExprRecordFieldOrSpread list) = + let rec loop fields i spreadSrcExprs fieldsAndSpreads = + match fieldsAndSpreads with + | [] -> + let fields = + fields + |> Map.toList + |> List.collect (fun (_, (_, dupes)) -> dupes) + |> List.sortBy (fun (i, _) -> i) + |> List.map (fun (_, r) -> r) + + List.rev spreadSrcExprs, fields + + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(fieldName = _, (* isOk *) false), _) :: _ -> + // if we met at least one field that is not syntactically correct - raise ReportedError to transfer control to the recovery routine + // raising ReportedError None transfers control to the closest errorRecovery point but do not make any records into log + // we assume that parse errors were already reported + raise (FSharp.Compiler.DiagnosticsLogger.ReportedError None) + + | SynExprRecordFieldOrSpread.Field(synExprRecordField, _) :: fieldsAndSpreads -> + let fieldId, field, errorAmbiguousShadowing = tcField synExprRecordField + + let fields = + fields + |> Map.change fieldId (function + | None -> Some(LeftwardExplicit, [ i, field ]) + | Some(LeftwardExplicit, dupes) -> + errorAmbiguousShadowing () + Some(LeftwardExplicit, (i, field) :: dupes) + | Some(NoLeftwardExplicit, _dupes) -> Some(LeftwardExplicit, [ i, field ])) + + loop fields (i + 1) spreadSrcExprs fieldsAndSpreads + + | SynExprRecordFieldOrSpread.Spread(SynExprSpread(range = m) as synExprSpread, _) :: fieldsAndSpreads -> + checkSpreadsLanguageFeature m + + let rec collectFieldsFromSpread fields i fieldsFromSpread = + match fieldsFromSpread with + | [] -> fields, i + | (fieldId, field, warnAmbiguousShadowing) :: fieldsFromSpread -> + let tys = + fields + |> Map.change fieldId (function + | None -> Some(NoLeftwardExplicit, [ i, field ]) + | Some(LeftwardExplicit, _dupes) -> + warnAmbiguousShadowing () + Some(LeftwardExplicit, [ i, field ]) + | Some(NoLeftwardExplicit, _dupes) -> Some(NoLeftwardExplicit, [ i, field ])) + + collectFieldsFromSpread tys (i + 1) fieldsFromSpread + + let spreadSrcExpr, fieldsFromSpread = tcSpread synExprSpread + let fields, i = collectFieldsFromSpread fields i fieldsFromSpread + + let spreadSrcExprs = + spreadSrcExpr + |> Option.map (fun spreadSrcExpr -> spreadSrcExpr :: spreadSrcExprs) + |> Option.defaultValue spreadSrcExprs + + loop fields i spreadSrcExprs fieldsAndSpreads + + loop Map.empty 0 [] fieldsAndSpreads + + /// Functions for checking anonymous record spreads. + module AnonymousRecords = + /// Typechecks the given list of anonymous record fields or spreads. + let check + checkSpreadsLanguageFeature + tcField + tcSpread + (targetAnonRecordTy, targetAnonRecordTyContainsField) + (fieldsAndSpreads: SynExprAnonRecordFieldOrSpread list) + = + // See CheckRecordSyntaxHelpers.GroupUpdatesToNestedFields. + let (|NestedUpdate|_|) expr2 expr1 = + match expr1, expr2 with + | SynExpr.Record(baseInfo, copyInfo, fields1, m), SynExpr.Record(recordFields = fields2) -> + Some(SynExpr.Record(baseInfo, copyInfo, fields1 @ fields2, m)) + | SynExpr.AnonRecd(isStruct, copyInfo, fields1, m, trivia), SynExpr.AnonRecd(recordFields = fields2) -> + Some(SynExpr.AnonRecd(isStruct, copyInfo, fields1 @ fields2, m, trivia)) + | _ -> None + + let rec loop fields i spreadSrcExprs fieldsAndSpreads = + match fieldsAndSpreads with + | [] -> + let processedFieldsList = Map.toList fields + + let processedFieldsList = + // If the target type is a known anonymous record type, + // keep only those fields that are present in that type + // or that are explicitly defined in this one. + if targetAnonRecordTy then + processedFieldsList + |> List.filter (function + | _, (LeftwardExplicit, _, _) -> true + | fieldId, (NoLeftwardExplicit, _, _) -> targetAnonRecordTyContainsField fieldId) + else + processedFieldsList + + let (|Head|) = List.head + + let fieldsInAlphabeticalOrder = + processedFieldsList |> List.sortBy (fun (fieldName, _) -> fieldName) + + let fieldTysInAlphabeticalOrder = + fieldsInAlphabeticalOrder + |> List.map (fun (_, (_, _, Head(_, (_, fieldTy, _)))) -> fieldTy) + + let fieldIdsInAlphabeticalOrder = + fieldsInAlphabeticalOrder + |> List.map (fun (_, (_, _, Head(_, (fieldId, _, _)))) -> fieldId) + + let fieldsInSrcOrder = + processedFieldsList + |> List.collect (fun (_, (_, _, dupes)) -> dupes) + |> List.sortBy (fun (i, _) -> i) + |> List.map (fun (_, field) -> field) + + List.rev spreadSrcExprs, fieldIdsInAlphabeticalOrder, fieldTysInAlphabeticalOrder, fieldsInSrcOrder + + | SynExprAnonRecordFieldOrSpread.Field(synExprAnonRecordField, _) :: fieldsAndSpreads -> + let fieldId, fieldTy, transformedFieldExpr, mkTcField, errorAmbiguousShadowing = + tcField synExprAnonRecordField + + let fields = + fields + |> Map.change (textOfId fieldId) (function + | None -> + Some(LeftwardExplicit, transformedFieldExpr, [ i, (fieldId, fieldTy, mkTcField transformedFieldExpr) ]) + | Some(LeftwardExplicit, NestedUpdate transformedFieldExpr groupedExpr, _ :: dupes) -> + Some(LeftwardExplicit, groupedExpr, (i, (fieldId, fieldTy, mkTcField groupedExpr)) :: dupes) + | Some(LeftwardExplicit, (SynExpr.Record _ | SynExpr.AnonRecd _ as dupeExpr), dupes) -> + errorAmbiguousShadowing () + Some(LeftwardExplicit, dupeExpr, (i, (fieldId, fieldTy, mkTcField transformedFieldExpr)) :: dupes) + | Some(LeftwardExplicit, _dupeExpr, dupes) -> + errorAmbiguousShadowing () + + Some( + LeftwardExplicit, + transformedFieldExpr, + (i, (fieldId, fieldTy, mkTcField transformedFieldExpr)) :: dupes + ) + | Some(NoLeftwardExplicit, _dupeExpr, _dupes) -> + Some(LeftwardExplicit, transformedFieldExpr, [ i, (fieldId, fieldTy, mkTcField transformedFieldExpr) ])) + + loop fields (i + 1) spreadSrcExprs fieldsAndSpreads + + | SynExprAnonRecordFieldOrSpread.Spread(SynExprSpread(expr = expr; range = m), _) :: fieldsAndSpreads -> + checkSpreadsLanguageFeature m + + let rec collectFieldsFromSpread fields i fieldsFromSpread = + match fieldsFromSpread with + | [] -> fields, i + | (fieldId, fieldTy, tcField, warnAmbiguousShadowing) :: fieldsFromSpread -> + let tys = + fields + |> Map.change (textOfId fieldId) (function + | None -> Some(NoLeftwardExplicit, expr, [ i, (fieldId, fieldTy, tcField) ]) + | Some(LeftwardExplicit, expr, _dupes) -> + warnAmbiguousShadowing () + Some(LeftwardExplicit, expr, [ i, (fieldId, fieldTy, tcField) ]) + | Some(NoLeftwardExplicit, expr, _dupes) -> + Some(NoLeftwardExplicit, expr, [ i, (fieldId, fieldTy, tcField) ])) + + collectFieldsFromSpread tys (i + 1) fieldsFromSpread + + let spreadSrcExpr, fieldsFromSpread = tcSpread expr m + let fields, i = collectFieldsFromSpread fields i fieldsFromSpread + + let spreadSrcExprs = + spreadSrcExpr + |> Option.map (fun spreadSrcExpr -> spreadSrcExpr :: spreadSrcExprs) + |> Option.defaultValue spreadSrcExprs + + loop fields i spreadSrcExprs fieldsAndSpreads + + loop Map.empty 0 [] fieldsAndSpreads diff --git a/src/Compiler/Driver/CompilerDiagnostics.fs b/src/Compiler/Driver/CompilerDiagnostics.fs index 4ecbfc081ef..2c837aaf2c9 100644 --- a/src/Compiler/Driver/CompilerDiagnostics.fs +++ b/src/Compiler/Driver/CompilerDiagnostics.fs @@ -1162,7 +1162,8 @@ type Exception with | Parser.TOKEN_COLON_QMARK -> SR.GetString("Parser.TOKEN.COLON.QMARK") | Parser.TOKEN_INT32_DOT_DOT -> SR.GetString("Parser.TOKEN.INT32.DOT.DOT") | Parser.TOKEN_DOT_DOT -> SR.GetString("Parser.TOKEN.DOT.DOT") - | Parser.TOKEN_DOT_DOT_HAT -> SR.GetString("Parser.TOKEN.DOT.DOT") + | Parser.TOKEN_DOT_DOT_HAT -> SR.GetString("Parser.TOKEN.DOT.DOT.HAT") + | Parser.TOKEN_DOT_DOT_DOT -> SR.GetString("Parser.TOKEN.DOT.DOT.DOT") | Parser.TOKEN_QUOTE -> SR.GetString("Parser.TOKEN.QUOTE") | Parser.TOKEN_STAR -> SR.GetString("Parser.TOKEN.STAR") | Parser.TOKEN_HIGH_PRECEDENCE_TYAPP -> SR.GetString("Parser.TOKEN.HIGH.PRECEDENCE.TYAPP") diff --git a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs index 6f13677025b..d812ba572bd 100644 --- a/src/Compiler/Driver/GraphChecking/FileContentMapping.fs +++ b/src/Compiler/Driver/GraphChecking/FileContentMapping.fs @@ -1,4 +1,4 @@ -module internal rec FSharp.Compiler.GraphChecking.FileContentMapping +module internal rec FSharp.Compiler.GraphChecking.FileContentMapping open FSharp.Compiler.Syntax open FSharp.Compiler.SyntaxTreeOps @@ -127,7 +127,13 @@ let visitSynTypeDefn match simpleRepr with | SynTypeDefnSimpleRepr.Union(unionCases = unionCases) -> yield! List.collect visitSynUnionCase unionCases | SynTypeDefnSimpleRepr.Enum(cases = cases) -> yield! List.collect visitSynEnumCase cases - | SynTypeDefnSimpleRepr.Record(recordFields = recordFields) -> yield! List.collect visitSynField recordFields + | SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads) -> + yield! + List.collect + (function + | SynFieldOrSpread.Field field -> visitSynField field + | SynFieldOrSpread.Spread spread -> visitSynTypeSpread spread) + fieldsAndSpreads // This is only used in the typed tree // The parser doesn't construct this | SynTypeDefnSimpleRepr.General _ @@ -168,7 +174,13 @@ let visitSynTypeDefnSig match simpleRepr with | SynTypeDefnSimpleRepr.Union(unionCases = unionCases) -> yield! List.collect visitSynUnionCase unionCases | SynTypeDefnSimpleRepr.Enum(cases = cases) -> yield! List.collect visitSynEnumCase cases - | SynTypeDefnSimpleRepr.Record(recordFields = recordFields) -> yield! List.collect visitSynField recordFields + | SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads) -> + yield! + List.collect + (function + | SynFieldOrSpread.Field field -> visitSynField field + | SynFieldOrSpread.Spread spread -> visitSynTypeSpread spread) + fieldsAndSpreads // This is only used in the typed tree // The parser doesn't construct this | SynTypeDefnSimpleRepr.General _ @@ -204,6 +216,8 @@ let visitSynValSig (SynValSig(attributes = attributes; synType = synType; synExp let visitSynField (SynField(attributes = attributes; fieldType = fieldType)) = visitSynAttributes attributes @ visitSynType fieldType +let visitSynTypeSpread (SynTypeSpread(ty = ty)) = visitSynType ty + let visitSynMemberDefn (md: SynMemberDefn) : FileContentEntry list = [ match md with @@ -386,8 +400,19 @@ let visitSynExpr (e: SynExpr) : FileContentEntry list = | SynExpr.AnonRecd(copyInfo = copyInfo; recordFields = recordFields) -> let continuations = match copyInfo with - | None -> List.map (fun (_, _, e) -> visit e) recordFields - | Some(cp, _) -> visit cp :: List.map (fun (_, _, e) -> visit e) recordFields + | None -> + List.map + (function + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, _, e, _), _) + | SynExprAnonRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> visit e) + recordFields + | Some(cp, _) -> + visit cp + :: List.map + (function + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, _, e, _), _) + | SynExprAnonRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> visit e) + recordFields Continuation.concatenate continuations continuation | SynExpr.ArrayOrList(exprs = exprs) -> @@ -396,9 +421,12 @@ let visitSynExpr (e: SynExpr) : FileContentEntry list = | SynExpr.Record(baseInfo = baseInfo; copyInfo = copyInfo; recordFields = recordFields) -> let fieldNodes = [ - for SynExprRecordField(fieldName = (si, _); expr = expr) in recordFields do - yield! visitSynLongIdent si - yield! collectFromOption visitSynExpr expr + for fieldOrSpread in recordFields do + match fieldOrSpread with + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(fieldName = (si, _); expr = expr), _) -> + yield! visitSynLongIdent si + yield! collectFromOption visitSynExpr expr + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = expr)) -> yield! visitSynExpr expr ] match baseInfo, copyInfo with diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index f9765bdbd6e..16624419461 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1819,3 +1819,12 @@ featurePreprocessorElif,"#elif preprocessor directive" 3886,tcListLiteralWithSingleTupleElement,"This list expression contains a single tuple element. Did you mean to use ';' instead of ',' to separate list elements?" 3887,ilCustomAttrInvalidArrayElemType,"The type '%s' is not a valid custom attribute argument type. Custom attribute arrays must have elements of primitive types, enums, string, System.Type, or System.Object." featureExceptionFieldSerializationSupport,"emit GetObjectData and field-restoring deserialization constructor for exception types" +3888,tcRecordTypeDefinitionSpreadSourceMustBeRecord,"The source type of a spread into a record type definition must itself be a nominal or anonymous record type." +3889,tcRecordExprSpreadSourceMustBeRecord,"The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." +3890,tcAnonRecordExprSpreadSourceMustBeRecord,"The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." +3891,tcRecordTypeDefinitionSpreadFieldShadowsExplicitField,"Spread field '%s' from type '%s' shadows an explicitly declared field with the same name." +3892,tcRecordExprSpreadFieldShadowsExplicitField,"Spread field '%s' shadows an explicitly declared field with the same name." +3893,parsMissingSpreadSrcExpr,"Missing spread source expression after '...'." +3894,parsMissingSpreadSrcTy,"Missing spread source type after '...'." +3895,tcTypeDefinitionIsCyclicThroughSpreads,"This type definition involves a cyclic reference through a spread." +featureRecordSpreads,"record type and expression spreads" diff --git a/src/Compiler/FSStrings.resx b/src/Compiler/FSStrings.resx index 920cc48a52a..05643e4a128 100644 --- a/src/Compiler/FSStrings.resx +++ b/src/Compiler/FSStrings.resx @@ -365,10 +365,10 @@ symbol '>|}' - + symbol '@>|}' or '@@>|}' - + symbol '>|]' @@ -1170,4 +1170,7 @@ No constructors are available for the type '{0}' + + symbol '...' + \ No newline at end of file diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index 360247d7a20..4f8a06c3d0f 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -402,6 +402,7 @@ + diff --git a/src/Compiler/Facilities/LanguageFeatures.fs b/src/Compiler/Facilities/LanguageFeatures.fs index c66a039d7df..93ca7c3b689 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fs +++ b/src/Compiler/Facilities/LanguageFeatures.fs @@ -109,6 +109,7 @@ type LanguageFeature = | ImplicitDIMCoverage | PreprocessorElif | ExceptionFieldSerializationSupport + | RecordSpreads /// LanguageVersion management type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) = @@ -261,6 +262,7 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) LanguageFeature.FromEndSlicing, previewVersion // Unfinished features --- needs work LanguageFeature.MethodOverloadsCache, previewVersion // Performance optimization for overload resolution LanguageFeature.ImplicitDIMCoverage, languageVersion110 + LanguageFeature.RecordSpreads, previewVersion ] static let defaultLanguageVersion = LanguageVersion("default") @@ -456,6 +458,7 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) | LanguageFeature.ImplicitDIMCoverage -> FSComp.SR.featureImplicitDIMCoverage () | LanguageFeature.PreprocessorElif -> FSComp.SR.featurePreprocessorElif () | LanguageFeature.ExceptionFieldSerializationSupport -> FSComp.SR.featureExceptionFieldSerializationSupport () + | LanguageFeature.RecordSpreads -> FSComp.SR.featureRecordSpreads () /// Get a version string associated with the given feature. static member GetFeatureVersionString feature = diff --git a/src/Compiler/Facilities/LanguageFeatures.fsi b/src/Compiler/Facilities/LanguageFeatures.fsi index 4219ce43e35..5f516af3d1c 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fsi +++ b/src/Compiler/Facilities/LanguageFeatures.fsi @@ -100,6 +100,7 @@ type LanguageFeature = | ImplicitDIMCoverage | PreprocessorElif | ExceptionFieldSerializationSupport + | RecordSpreads /// LanguageVersion management type LanguageVersion = diff --git a/src/Compiler/Service/FSharpParseFileResults.fs b/src/Compiler/Service/FSharpParseFileResults.fs index 434974de754..66fd0b9cb65 100644 --- a/src/Compiler/Service/FSharpParseFileResults.fs +++ b/src/Compiler/Service/FSharpParseFileResults.fs @@ -633,14 +633,26 @@ type FSharpParseFileResults(diagnostics: FSharpDiagnostic[], input: ParsedInput, | Some(e, _) -> yield! walkExpr true e | None -> () - yield! walkExprs (fs |> List.choose (fun (SynExprRecordField(expr = e)) -> e)) + yield! + walkExprs ( + fs + |> List.choose (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(expr = e), _) -> e + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> Some e) + ) | SynExpr.AnonRecd(copyInfo = copyExprOpt; recordFields = fs) -> match copyExprOpt with | Some(e, _) -> yield! walkExpr true e | None -> () - yield! walkExprs (fs |> List.map (fun (_, _, e) -> e)) + yield! + walkExprs ( + fs + |> List.map (function + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, _, e, _), _) + | SynExprAnonRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> e) + ) | SynExpr.ObjExpr(argOptions = args; bindings = bs; members = ms; extraImpls = is) -> let bs = unionBindingAndMembers bs ms diff --git a/src/Compiler/Service/ServiceInterfaceStubGenerator.fs b/src/Compiler/Service/ServiceInterfaceStubGenerator.fs index 2687b4e0f54..096ea38438f 100644 --- a/src/Compiler/Service/ServiceInterfaceStubGenerator.fs +++ b/src/Compiler/Service/ServiceInterfaceStubGenerator.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace FSharp.Compiler.EditorServices @@ -850,7 +850,11 @@ module InterfaceStubGenerator = | SynExpr.ArrayOrList(_, synExprList, _range) -> List.tryPick walkExpr synExprList | SynExpr.Record(_inheritOpt, _copyOpt, fields, _range) -> - List.tryPick (fun (SynExprRecordField(expr = e)) -> Option.bind walkExpr e) fields + List.tryPick + (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(expr = e), _) -> Option.bind walkExpr e + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> walkExpr e) + fields | SynExpr.New(_, _synType, synExpr, _range) -> walkExpr synExpr diff --git a/src/Compiler/Service/ServiceLexing.fs b/src/Compiler/Service/ServiceLexing.fs index 5ce87706c51..e8e05595b75 100644 --- a/src/Compiler/Service/ServiceLexing.fs +++ b/src/Compiler/Service/ServiceLexing.fs @@ -63,6 +63,7 @@ module FSharpTokenTag = let DOT = tagOfToken DOT let DOT_DOT = tagOfToken DOT_DOT let DOT_DOT_HAT = tagOfToken DOT_DOT_HAT + let DOT_DOT_DOT = tagOfToken DOT_DOT_DOT let INT32_DOT_DOT = tagOfToken (INT32_DOT_DOT(0, true)) let UNDERSCORE = tagOfToken UNDERSCORE let BAR = tagOfToken BAR @@ -233,7 +234,8 @@ module internal TokenClassifications = | INFIX_AMP_OP _ -> (FSharpTokenColorKind.Operator, FSharpTokenCharKind.Operator, FSharpTokenTriggerClass.None) | DOT_DOT - | DOT_DOT_HAT -> (FSharpTokenColorKind.Operator, FSharpTokenCharKind.Operator, FSharpTokenTriggerClass.MemberSelect) + | DOT_DOT_HAT + | DOT_DOT_DOT -> (FSharpTokenColorKind.Operator, FSharpTokenCharKind.Operator, FSharpTokenTriggerClass.MemberSelect) | COMMA -> (FSharpTokenColorKind.Punctuation, FSharpTokenCharKind.Delimiter, FSharpTokenTriggerClass.ParamNext) @@ -1322,6 +1324,7 @@ type FSharpTokenKind = | End | DotDot | DotDotHat + | DotDotDot | BarBar | Upcast | Downcast @@ -1521,6 +1524,7 @@ type FSharpToken = | END -> FSharpTokenKind.End | DOT_DOT -> FSharpTokenKind.DotDot | DOT_DOT_HAT -> FSharpTokenKind.DotDotHat + | DOT_DOT_DOT -> FSharpTokenKind.DotDotDot | BAR_BAR -> FSharpTokenKind.BarBar | UPCAST -> FSharpTokenKind.Upcast | DOWNCAST -> FSharpTokenKind.Downcast diff --git a/src/Compiler/Service/ServiceLexing.fsi b/src/Compiler/Service/ServiceLexing.fsi index fab55c4645e..4aad2727e7e 100755 --- a/src/Compiler/Service/ServiceLexing.fsi +++ b/src/Compiler/Service/ServiceLexing.fsi @@ -176,9 +176,12 @@ module FSharpTokenTag = /// Indicates the token is a `..` val DOT_DOT: int - /// Indicates the token is a `..` + /// Indicates the token is a `..^` val DOT_DOT_HAT: int + /// Indicates the token is a `...` + val DOT_DOT_DOT: int + /// Indicates the token is a `..^` val INT32_DOT_DOT: int @@ -500,6 +503,7 @@ type public FSharpTokenKind = | End | DotDot | DotDotHat + | DotDotDot | BarBar | Upcast | Downcast diff --git a/src/Compiler/Service/ServiceNavigation.fs b/src/Compiler/Service/ServiceNavigation.fs index 5c15f756133..fe408be5cd9 100755 --- a/src/Compiler/Service/ServiceNavigation.fs +++ b/src/Compiler/Service/ServiceNavigation.fs @@ -289,12 +289,14 @@ module NavigationImpl = createTypeDecl (baseName, lid, FSharpGlyph.Enum, m, mBody, nested, NavigationEntityKind.Enum, access) ] - | SynTypeDefnSimpleRepr.Record(_, fields, mBody) -> + | SynTypeDefnSimpleRepr.Record(_, fieldsAndSpreads, mBody) -> let fields = [ - for SynField(idOpt = id; range = m) in fields do - match id with - | Some ident -> yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + for fieldOrSpread in fieldsAndSpreads do + match fieldOrSpread with + | SynFieldOrSpread.Field(SynField(idOpt = Some ident; range = m)) -> + yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + | SynFieldOrSpread.Spread _ | _ -> () ] @@ -546,12 +548,14 @@ module NavigationImpl = let nested = cases @ topMembers let mBody = bodyRange mBody nested createTypeDecl (baseName, lid, FSharpGlyph.Enum, m, mBody, nested, NavigationEntityKind.Enum, access) - | SynTypeDefnSimpleRepr.Record(_, fields, mBody) -> + | SynTypeDefnSimpleRepr.Record(_, fieldsAndSpreads, mBody) -> let fields = [ - for SynField(idOpt = id; range = m) in fields do - match id with - | Some ident -> yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + for fieldOrSpread in fieldsAndSpreads do + match fieldOrSpread with + | SynFieldOrSpread.Field(SynField(idOpt = Some ident; range = m)) -> + yield createMember (ident, NavigationItemKind.Field, FSharpGlyph.Field, m, NavigationEntityKind.Record, false, access) + | SynFieldOrSpread.Spread _ | _ -> () ] @@ -994,10 +998,12 @@ module NavigateTo = | SynTypeDefnSimpleRepr.Enum(enumCases, _) -> for c in enumCases do addEnumCase c isSig container - | SynTypeDefnSimpleRepr.Record(_, fields, _) -> - for f in fields do + | SynTypeDefnSimpleRepr.Record(_, fieldsAndSpreads, _) -> + for fieldOrSpread in fieldsAndSpreads do // TODO: add specific case for record field? - addField f isSig container + match fieldOrSpread with + | SynFieldOrSpread.Field f -> addField f isSig container + | SynFieldOrSpread.Spread _ -> () | SynTypeDefnSimpleRepr.Union(_, unionCases, _) -> for uc in unionCases do addUnionCase uc isSig container diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fs b/src/Compiler/Service/ServiceParseTreeWalk.fs index 4a1177b7b26..f513f2bbdb9 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fs +++ b/src/Compiler/Service/ServiceParseTreeWalk.fs @@ -110,10 +110,10 @@ type SyntaxVisitorBase<'T>() = None /// VisitRecordDefn allows overriding behavior when visiting record definitions (by default do nothing) - abstract VisitRecordDefn: path: SyntaxVisitorPath * fields: SynField list * range -> 'T option + abstract VisitRecordDefn: path: SyntaxVisitorPath * fieldsAndSpreads: SynFieldOrSpread list * range -> 'T option - default _.VisitRecordDefn(path, fields, range) = - ignore (path, fields, range) + default _.VisitRecordDefn(path, fieldsAndSpreads, range) = + ignore (path, fieldsAndSpreads, range) None /// VisitUnionDefn allows overriding behavior when visiting union definitions (by default do nothing) @@ -458,9 +458,13 @@ module SyntaxTraversal = None) | _ -> () - for field, _, x in fields do - yield dive () field.Range (fun () -> visitor.VisitRecordField(path, copyOpt |> Option.map fst, Some field)) - yield dive x x.Range traverseSynExpr + for fieldOrSpread in fields do + match fieldOrSpread with + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(field, _, x, _), _) -> + yield dive () field.Range (fun () -> visitor.VisitRecordField(path, copyOpt |> Option.map fst, Some field)) + yield dive x x.Range traverseSynExpr + | SynExprAnonRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = expr)) -> + yield dive expr expr.Range traverseSynExpr ] |> pick expr @@ -525,57 +529,73 @@ module SyntaxTraversal = let copyOpt = Option.map fst copyOpt - for SynExprRecordField(fieldName = (field, _); expr = e; blockSeparator = sepOpt) in fields do - yield - dive (path, copyOpt, Some field) field.Range (fun r -> - // Treat the caret placed right after the field name (before '=' or a value) as "inside" the field, - // but only if the field does not yet have a value. - // - // Examples (the '$' marks the caret): - // { r with Field1$ } - // { r with - // Field1$ - // } - let isCaretAfterFieldNameWithoutValue = (e.IsNone && posEq pos field.Range.End) - - if rangeContainsPos field.Range pos || isCaretAfterFieldNameWithoutValue then - visitor.VisitRecordField r - else - None) - - let offsideColumn = - match inheritOpt with - | Some(_, _, _, _, inheritRange) -> inheritRange.StartColumn - | None -> field.Range.StartColumn - - match e with - | Some e -> + for fieldOrSpread in fields do + match fieldOrSpread with + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(fieldName = (field, _); expr = e), sepOpt) -> yield - dive e e.Range (fun expr -> - // special case: caret is below field binding - // field x = 5 - // $ - if - not (rangeContainsPos e.Range pos) - && sepOpt.IsNone - && pos.Column = offsideColumn - then - visitor.VisitRecordField(path, copyOpt, None) + dive (path, copyOpt, Some field) field.Range (fun r -> + // Treat the caret placed right after the field name (before '=' or a value) as "inside" the field, + // but only if the field does not yet have a value. + // + // Examples (the '$' marks the caret): + // { r with Field1$ } + // { r with + // Field1$ + // } + let isCaretAfterFieldNameWithoutValue = (e.IsNone && posEq pos field.Range.End) + + if rangeContainsPos field.Range pos || isCaretAfterFieldNameWithoutValue then + visitor.VisitRecordField r else - traverseSynExpr expr) - | None -> () - - match sepOpt with - | Some(sep, scPosOpt) -> - yield - dive () sep (fun () -> - // special case: caret is between field bindings - // field1 = 5 - // $ - // field2 = 5 - diveIntoSeparator offsideColumn scPosOpt copyOpt) - | _ -> () - + None) + + let offsideColumn = + match inheritOpt with + | Some(_, _, _, _, inheritRange) -> inheritRange.StartColumn + | None -> field.Range.StartColumn + + match e with + | Some e -> + yield + dive e e.Range (fun expr -> + // special case: caret is below field binding + // field x = 5 + // $ + if + not (rangeContainsPos e.Range pos) + && sepOpt.IsNone + && pos.Column = offsideColumn + then + visitor.VisitRecordField(path, copyOpt, None) + else + traverseSynExpr expr) + | None -> () + + match sepOpt with + | Some(sep, scPosOpt) -> + yield + dive () sep (fun () -> + // special case: caret is between field bindings + // field1 = 5 + // $ + // field2 = 5 + diveIntoSeparator offsideColumn scPosOpt copyOpt) + | None -> () + + | SynExprRecordFieldOrSpread.Spread(SynExprSpread(spreadRange = spreadRange; expr = expr), sepOpt) -> + yield dive expr expr.Range traverseSynExpr + + match sepOpt with + | Some(sep, scPosOpt) -> + yield + dive () sep (fun () -> + // special case: caret is between field bindings + // field1 = 5 + // $ + // field2 = 5 + let offsideColumn = spreadRange.StartColumn + diveIntoSeparator offsideColumn scPosOpt copyOpt) + | None -> () ] |> pick expr @@ -909,10 +929,13 @@ module SyntaxTraversal = ] |> pick tRange tydef - and traverseRecordDefn path fields m = - fields - |> List.tryPick (fun (SynField(attributes = attributes)) -> attributeApplicationDives path attributes |> pick m attributes) - |> Option.orElseWith (fun () -> visitor.VisitRecordDefn(path, fields, m)) + and traverseRecordDefn path fieldsAndSpreads m = + fieldsAndSpreads + |> List.tryPick (function + | SynFieldOrSpread.Field(SynField(attributes = attributes)) -> + attributeApplicationDives path attributes |> pick m attributes + | SynFieldOrSpread.Spread _ -> None) + |> Option.orElseWith (fun () -> visitor.VisitRecordDefn(path, fieldsAndSpreads, m)) and traverseEnumDefn path cases m = cases @@ -1160,7 +1183,12 @@ module SyntaxTraversal = module SyntaxNode = let (|Attributes|) node = let (|All|) = List.collect - let field (SynField(attributes = attributes)) = attributes + + let fieldOrSpread = + function + | SynFieldOrSpread.Field(SynField(attributes = attributes)) -> attributes + | SynFieldOrSpread.Spread _ -> [] + let unionCase (SynUnionCase(attributes = attributes)) = attributes let enumCase (SynEnumCase(attributes = attributes)) = attributes let typar (SynTyparDecl(attributes = attributes)) = attributes @@ -1186,7 +1214,7 @@ module SyntaxNode = | SyntaxNode.SynModule(SynModuleDecl.Attributes(attributes = attributes)) | SyntaxNode.SynTypeDefn(SynTypeDefn(typeInfo = SynComponentInfo attributes)) | SyntaxNode.SynTypeDefn(SynTypeDefn( - typeRepr = SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFields = All field attributes), _))) + typeRepr = SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = All fieldOrSpread attributes), _))) | SyntaxNode.SynTypeDefn(SynTypeDefn( typeRepr = SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Union(unionCases = All unionCase attributes), _))) | SyntaxNode.SynTypeDefn(SynTypeDefn( diff --git a/src/Compiler/Service/ServiceParseTreeWalk.fsi b/src/Compiler/Service/ServiceParseTreeWalk.fsi index ab9e98f6e81..d8a9e142148 100644 --- a/src/Compiler/Service/ServiceParseTreeWalk.fsi +++ b/src/Compiler/Service/ServiceParseTreeWalk.fsi @@ -101,8 +101,8 @@ type SyntaxVisitorBase<'T> = range: range -> 'T option - abstract VisitRecordDefn: path: SyntaxVisitorPath * fields: SynField list * range -> 'T option - default VisitRecordDefn: path: SyntaxVisitorPath * fields: SynField list * range -> 'T option + abstract VisitRecordDefn: path: SyntaxVisitorPath * fieldsAndSpreads: SynFieldOrSpread list * range -> 'T option + default VisitRecordDefn: path: SyntaxVisitorPath * fieldsAndSpreads: SynFieldOrSpread list * range -> 'T option abstract VisitUnionDefn: path: SyntaxVisitorPath * cases: SynUnionCase list * range -> 'T option default VisitUnionDefn: path: SyntaxVisitorPath * cases: SynUnionCase list * range -> 'T option diff --git a/src/Compiler/Service/ServiceParsedInputOps.fs b/src/Compiler/Service/ServiceParsedInputOps.fs index ed1a4da5bf5..d852ed5865e 100644 --- a/src/Compiler/Service/ServiceParsedInputOps.fs +++ b/src/Compiler/Service/ServiceParsedInputOps.fs @@ -821,7 +821,10 @@ module ParsedInput = | SynExpr.Record(_, _, fields, r) -> ifPosInRange r (fun _ -> fields - |> List.tryPick (fun (SynExprRecordField(expr = e)) -> e |> Option.bind (walkExprWithKind parentKind))) + |> List.tryPick (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(expr = e), _) -> + e |> Option.bind (walkExprWithKind parentKind) + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> walkExprWithKind parentKind e)) | SynExpr.ObjExpr(objType = ty; bindings = bindings; members = ms; extraImpls = ifaces) -> let bindings = unionBindingAndMembers bindings ms @@ -869,6 +872,8 @@ module ParsedInput = let (SynField(attributes = Attributes attrs; fieldType = t)) = synField List.tryPick walkAttribute attrs |> Option.orElseWith (fun () -> walkType t) + and walkTypeSpread (SynTypeSpread(ty = ty)) = walkType ty + and walkValSig synValSig = let (SynValSig(attributes = Attributes attrs; synType = t)) = synValSig List.tryPick walkAttribute attrs |> Option.orElseWith (fun () -> walkType t) @@ -942,7 +947,12 @@ module ParsedInput = match synTypeDefn with | SynTypeDefnSimpleRepr.Enum(cases, _) -> List.tryPick walkEnumCase cases | SynTypeDefnSimpleRepr.Union(_, cases, _) -> List.tryPick walkUnionCase cases - | SynTypeDefnSimpleRepr.Record(_, fields, _) -> List.tryPick walkField fields + | SynTypeDefnSimpleRepr.Record(_, fields, _) -> + List.tryPick + (function + | SynFieldOrSpread.Field field -> walkField field + | SynFieldOrSpread.Spread spread -> walkTypeSpread spread) + fields | SynTypeDefnSimpleRepr.TypeAbbrev(_, t, _) -> walkType t | _ -> None @@ -1501,10 +1511,12 @@ module ParsedInput = | SyntaxNode.SynExpr _ :: SyntaxNode.SynBinding _ :: SyntaxNode.SynMemberDefn _ :: SyntaxNode.SynTypeDefn(SynTypeDefn( typeInfo = SynComponentInfo(longId = [ id ]))) :: _ -> RecordContext.Constructor(id.idText) - | SyntaxNode.SynExpr(SynExpr.Record(None, _, fields, _)) :: _ -> + | SyntaxNode.SynExpr(SynExpr.Record(None, _, fieldsAndSpreads, _)) :: _ -> let isFirstField = - match field, fields with - | Some contextLid, SynExprRecordField(fieldName = lid, _) :: _ -> contextLid.Range = lid.Range + match field, fieldsAndSpreads with + | Some contextLid, SynExprRecordFieldOrSpread.Field(SynExprRecordField(fieldName = lid, _), _) :: _ -> + contextLid.Range = lid.Range + | Some _, SynExprRecordFieldOrSpread.Spread _ :: _ -> false | _ -> false RecordContext.New(completionPath, isFirstField) @@ -1793,13 +1805,19 @@ module ParsedInput = member _.VisitRecordDefn(_, fields, range) = fields - |> List.tryPick (fun (SynField(idOpt = idOpt; range = fieldRange; fieldType = fieldType)) -> - match idOpt, fieldType with - | Some id, _ when rangeContainsPos id.idRange pos -> - Some(CompletionContext.RecordField(RecordContext.Declaration true)) - | _ when rangeContainsPos fieldRange pos -> Some(CompletionContext.RecordField(RecordContext.Declaration false)) - | _, SynType.FromParseError _ -> Some(CompletionContext.RecordField(RecordContext.Declaration false)) - | _ -> None) + |> List.tryPick (function + | SynFieldOrSpread.Field(SynField(idOpt = idOpt; range = fieldRange; fieldType = fieldType)) -> + match idOpt, fieldType with + | Some id, _ when rangeContainsPos id.idRange pos -> + Some(CompletionContext.RecordField(RecordContext.Declaration true)) + | _ when rangeContainsPos fieldRange pos -> Some(CompletionContext.RecordField(RecordContext.Declaration false)) + | _, SynType.FromParseError _ -> Some(CompletionContext.RecordField(RecordContext.Declaration false)) + | _ -> None + | SynFieldOrSpread.Spread(SynTypeSpread(ty = ty)) -> + if rangeContainsPos ty.Range pos then + Some CompletionContext.Type + else + None) // No completions in a record outside of all fields, except in attributes, which is established earlier in VisitAttributeApplication |> Option.orElseWith (fun _ -> if rangeContainsPos range pos then @@ -2085,9 +2103,11 @@ module ParsedInput = | SynExpr.Record(recordFields = fields) -> fields - |> List.iter (fun (SynExprRecordField(fieldName = (ident, _); expr = e)) -> - addLongIdentWithDots ident - e |> Option.iter walkExpr) + |> List.iter (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(fieldName = (ident, _); expr = e), _) -> + addLongIdentWithDots ident + e |> Option.iter walkExpr + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> walkExpr e) | SynExpr.Ident ident -> addIdent ident @@ -2210,6 +2230,8 @@ module ParsedInput = List.iter walkAttribute attrs walkType t + and walkTypeSpread (SynTypeSpread(ty = ty)) = walkType ty + and walkValSig (SynValSig(attributes = Attributes attrs; synType = t; arity = SynValInfo(argInfos, argInfo))) = List.iter walkAttribute attrs walkType t @@ -2281,7 +2303,12 @@ module ParsedInput = match typeDefn with | SynTypeDefnSimpleRepr.Enum(cases, _) -> List.iter walkEnumCase cases | SynTypeDefnSimpleRepr.Union(_, cases, _) -> List.iter walkUnionCase cases - | SynTypeDefnSimpleRepr.Record(_, fields, _) -> List.iter walkField fields + | SynTypeDefnSimpleRepr.Record(_, fields, _) -> + List.iter + (function + | SynFieldOrSpread.Field field -> walkField field + | SynFieldOrSpread.Spread spread -> walkTypeSpread spread) + fields | SynTypeDefnSimpleRepr.TypeAbbrev(_, t, _) -> walkType t | _ -> () diff --git a/src/Compiler/Service/ServiceStructure.fs b/src/Compiler/Service/ServiceStructure.fs index 577902a9146..fe85763c675 100644 --- a/src/Compiler/Service/ServiceStructure.fs +++ b/src/Compiler/Service/ServiceStructure.fs @@ -440,7 +440,9 @@ module Structure = | _ -> () recordFields - |> List.choose (fun (SynExprRecordField(expr = e)) -> e) + |> List.choose (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(expr = e), _) -> e + | SynExprRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> Some e) |> List.iter parseExpr // exclude the opening `{` and closing `}` of the record from collapsing let m = Range.modBoth 1 1 r @@ -607,12 +609,15 @@ module Structure = rcheck Scope.EnumCase Collapse.Below cr cr parseAttributes attrs - | SynTypeDefnSimpleRepr.Record(_, fields, rr) -> + | SynTypeDefnSimpleRepr.Record(_, fieldsAndSpreads, rr) -> rcheck Scope.RecordDefn Collapse.Same rr rr - for SynField(attributes = attrs; range = fr) in fields do - rcheck Scope.RecordField Collapse.Below fr fr - parseAttributes attrs + for fieldOrSpread in fieldsAndSpreads do + match fieldOrSpread with + | SynFieldOrSpread.Field(SynField(attributes = attrs; range = fr)) -> + rcheck Scope.RecordField Collapse.Below fr fr + parseAttributes attrs + | SynFieldOrSpread.Spread _ -> () | SynTypeDefnSimpleRepr.Union(_, cases, ur) -> rcheck Scope.UnionDefn Collapse.Same ur ur diff --git a/src/Compiler/Service/SynExpr.fs b/src/Compiler/Service/SynExpr.fs index d1d0c6eb4c3..dc139c7ae1a 100644 --- a/src/Compiler/Service/SynExpr.fs +++ b/src/Compiler/Service/SynExpr.fs @@ -1111,8 +1111,13 @@ module SynExpr = let rec loop recordFields = match recordFields with | [] -> false - | SynExprRecordField(expr = Some(SynExpr.Paren(expr = Is inner)); blockSeparator = Some _) :: SynExprRecordField( - fieldName = SynLongIdent(id = id :: _), _) :: _ -> problematic inner.Range id.idRange + | SynExprRecordFieldOrSpread.Field( + field = SynExprRecordField(expr = Some(SynExpr.Paren(expr = Is inner))); blockSeparator = Some _) :: SynExprRecordFieldOrSpread.Field(SynExprRecordField( + fieldName = SynLongIdent( + id = id :: _), + _), + _) :: _ -> + problematic inner.Range id.idRange | _ :: recordFields -> loop recordFields loop recordFields @@ -1121,8 +1126,8 @@ module SynExpr = let rec loop recordFields = match recordFields with | [] -> false - | (_, Some _blockSeparator, SynExpr.Paren(expr = Is inner)) :: (SynLongIdent(id = id :: _), _, _) :: _ -> - problematic inner.Range id.idRange + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, Some _equalsRange, SynExpr.Paren(expr = Is inner), _), + _) :: next :: _ -> problematic inner.Range next.Range | _ :: recordFields -> loop recordFields loop recordFields diff --git a/src/Compiler/SyntaxTree/LexFilter.fs b/src/Compiler/SyntaxTree/LexFilter.fs index ed5da9fd043..1be407d922a 100644 --- a/src/Compiler/SyntaxTree/LexFilter.fs +++ b/src/Compiler/SyntaxTree/LexFilter.fs @@ -2366,6 +2366,7 @@ type LexFilterImpl ( match lookaheadTokenTup.Token with | RBRACE _ | IDENT _ + | DOT_DOT_DOT // The next clause detects the access annotations after the 'with' in: // member x.PublicGetSetProperty // with public get i = "Ralf" @@ -2406,18 +2407,26 @@ type LexFilterImpl ( // // with x = ... // + // or + // + // with ...spreadSrc + // // Which can only be part of // // { r with x = ... } // + // or + // + // { r with ...spreadSrc } + // // and in this case push a CtxtSeqBlock to cover the sequence - let isFollowedByLongIdentEquals = + let isFollowedByLongIdentEqualsOrDotDotDot = let tokenTup = popNextTokenTup() - let res = isLongIdentEquals tokenTup.Token + let res = isLongIdentEquals tokenTup.Token || match tokenTup.Token with DOT_DOT_DOT -> true | _ -> false delayToken tokenTup res - if isFollowedByLongIdentEquals then + if isFollowedByLongIdentEqualsOrDotDotDot then pushCtxtSeqBlock tokenTup NoAddBlockEnd returnToken tokenLexbufState OWITH diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fs b/src/Compiler/SyntaxTree/ParseHelpers.fs index b329d48ee34..ff54b94af30 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fs +++ b/src/Compiler/SyntaxTree/ParseHelpers.fs @@ -720,13 +720,27 @@ let rebindRanges first fields lastSep = | Some mEq -> unionRanges lidwd.Range mEq | None -> lidwd.Range - let rec run (name, mEquals, value: SynExpr option) l acc = - let lidwd, _ = name - let fieldRange = calculateFieldRange lidwd mEquals value - - match l with - | [] -> List.rev (SynExprRecordField(name, mEquals, value, fieldRange, lastSep) :: acc) - | (f, m) :: xs -> run f xs (SynExprRecordField(name, mEquals, value, fieldRange, m) :: acc) + let rec run fieldOrSpread l acc = + match fieldOrSpread with + | RecordBinding.Field((lidwd, _ as name), mEquals, value) -> + let fieldRange = calculateFieldRange lidwd mEquals value + + match l with + | [] -> + let field = + SynExprRecordFieldOrSpread.Field(SynExprRecordField(name, mEquals, value, fieldRange), lastSep) + + List.rev (field :: acc) + | (f, m) :: xs -> + let field = + SynExprRecordFieldOrSpread.Field(SynExprRecordField(name, mEquals, value, fieldRange), m) + + run f xs (field :: acc) + + | RecordBinding.Spread spread -> + match l with + | [] -> List.rev (SynExprRecordFieldOrSpread.Spread(spread, lastSep) :: acc) + | (f, _) :: xs -> run f xs (SynExprRecordFieldOrSpread.Spread(spread, lastSep) :: acc) run first fields [] diff --git a/src/Compiler/SyntaxTree/ParseHelpers.fsi b/src/Compiler/SyntaxTree/ParseHelpers.fsi index bc0dc9f36fe..f8c1660f2ad 100644 --- a/src/Compiler/SyntaxTree/ParseHelpers.fsi +++ b/src/Compiler/SyntaxTree/ParseHelpers.fsi @@ -165,10 +165,10 @@ val exprFromParseError: e: SynExpr -> SynExpr val patFromParseError: e: SynPat -> SynPat val rebindRanges: - first: (RecordFieldName * range option * SynExpr option) -> - fields: ((RecordFieldName * range option * SynExpr option) * BlockSeparator option) list -> + first: RecordBinding -> + fields: (RecordBinding * BlockSeparator option) list -> lastSep: BlockSeparator option -> - SynExprRecordField list + SynExprRecordFieldOrSpread list val mkUnderscoreRecdField: m: range -> SynLongIdent * bool diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fs b/src/Compiler/SyntaxTree/SyntaxTree.fs index 7c0030e4f3a..3da0ccb30e9 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fs +++ b/src/Compiler/SyntaxTree/SyntaxTree.fs @@ -317,6 +317,11 @@ type BlockSeparator = range * pos option type RecordFieldName = SynLongIdent * bool +[] +type RecordBinding = + | Field of name: RecordFieldName * equalsRange: range option * declExpr: SynExpr option + | Spread of spread: SynExprSpread + type ExprAtomicFlag = | Atomic = 0 | NonAtomic = 1 @@ -541,7 +546,7 @@ type SynExpr = | AnonRecd of isStruct: bool * copyInfo: (SynExpr * BlockSeparator) option * - recordFields: (SynLongIdent * range option * SynExpr) list * + recordFields: SynExprAnonRecordFieldOrSpread list * range: range * trivia: SynExprAnonRecdTrivia @@ -550,7 +555,7 @@ type SynExpr = | Record of baseInfo: (SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo: (SynExpr * BlockSeparator) option * - recordFields: SynExprRecordField list * + recordFields: SynExprRecordFieldOrSpread list * range: range | New of isProtected: bool * targetType: SynType * expr: SynExpr * range: range @@ -864,13 +869,31 @@ type SynExpr = | _ -> false [] -type SynExprRecordField = - | SynExprRecordField of - fieldName: RecordFieldName * - equalsRange: range option * - expr: SynExpr option * - range: range * - blockSeparator: BlockSeparator option +type SynTypeSpread = SynTypeSpread of spreadRange: range * ty: SynType * range: range + +[] +type SynExprSpread = SynExprSpread of spreadRange: range * expr: SynExpr * range: range + +[] +type SynExprRecordField = SynExprRecordField of fieldName: RecordFieldName * equalsRange: range option * expr: SynExpr option * range: range + +[] +type SynExprRecordFieldOrSpread = + | Field of field: SynExprRecordField * blockSeparator: BlockSeparator option + | Spread of spread: SynExprSpread * blockSeparator: BlockSeparator option + +[] +type SynExprAnonRecordField = SynExprAnonRecordField of fieldName: SynLongIdent * equalsRange: range option * expr: SynExpr * range: range + +[] +type SynExprAnonRecordFieldOrSpread = + | Field of field: SynExprAnonRecordField * blockSeparator: BlockSeparator option + | Spread of spread: SynExprSpread * blockSeparator: BlockSeparator option + + member this.Range = + match this with + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, _, _, m), _) + | SynExprAnonRecordFieldOrSpread.Spread(SynExprSpread(_, _, m), _) -> m [] type SynInterpolatedStringPart = @@ -1263,7 +1286,7 @@ type SynTypeDefnSimpleRepr = | Enum of cases: SynEnumCase list * range: range - | Record of accessibility: SynAccess option * recordFields: SynField list * range: range + | Record of accessibility: SynAccess option * recordFieldsAndSpreads: SynFieldOrSpread list * range: range | General of kind: SynTypeDefnKind * @@ -1296,6 +1319,11 @@ type SynTypeDefnSimpleRepr = | None(range = m) -> m | Exception t -> t.Range +[] +type SynFieldOrSpread = + | Field of field: SynField + | Spread of spread: SynTypeSpread + [] type SynEnumCase = diff --git a/src/Compiler/SyntaxTree/SyntaxTree.fsi b/src/Compiler/SyntaxTree/SyntaxTree.fsi index 2206d199c39..b302be94885 100644 --- a/src/Compiler/SyntaxTree/SyntaxTree.fsi +++ b/src/Compiler/SyntaxTree/SyntaxTree.fsi @@ -363,6 +363,12 @@ type BlockSeparator = range * pos option /// correct and can be used in name resolution. type RecordFieldName = SynLongIdent * bool +/// Represents either a record field name or a spread expression. +[] +type RecordBinding = + | Field of name: RecordFieldName * equalsRange: range option * declExpr: SynExpr option + | Spread of spread: SynExprSpread + /// Indicates if an expression is an atomic expression. /// /// An atomic expression has no whitespace unless enclosed in parentheses, e.g. @@ -620,7 +626,7 @@ type SynExpr = | AnonRecd of isStruct: bool * copyInfo: (SynExpr * BlockSeparator) option * - recordFields: (SynLongIdent * range option * SynExpr) list * + recordFields: SynExprAnonRecordFieldOrSpread list * range: range * trivia: SynExprAnonRecdTrivia @@ -634,7 +640,7 @@ type SynExpr = | Record of baseInfo: (SynType * SynExpr * range * BlockSeparator option * range) option * copyInfo: (SynExpr * BlockSeparator) option * - recordFields: SynExprRecordField list * + recordFields: SynExprRecordFieldOrSpread list * range: range /// F# syntax: new C(...) @@ -987,14 +993,43 @@ type SynExpr = /// Indicates if this expression arises from error recovery member IsArbExprAndThusAlreadyReportedError: bool +/// Represents a type spread in a type definition. +/// +/// type Ty2 = { ...Ty1 } +[] +type SynTypeSpread = SynTypeSpread of spreadRange: range * ty: SynType * range: range + +/// Represents a spread expression. +/// +/// ...expr +[] +type SynExprSpread = SynExprSpread of spreadRange: range * expr: SynExpr * range: range + [] type SynExprRecordField = - | SynExprRecordField of - fieldName: RecordFieldName * - equalsRange: range option * - expr: SynExpr option * - range: range * - blockSeparator: BlockSeparator option + | SynExprRecordField of fieldName: RecordFieldName * equalsRange: range option * expr: SynExpr option * range: range + +/// Represents either a field declaration or a spread expression in a nominal record construction expression. +/// +/// let r = { A = 3; ...b; C = true } +[] +type SynExprRecordFieldOrSpread = + | Field of field: SynExprRecordField * blockSeparator: BlockSeparator option + | Spread of spread: SynExprSpread * blockSeparator: BlockSeparator option + +[] +type SynExprAnonRecordField = + | SynExprAnonRecordField of fieldName: SynLongIdent * equalsRange: range option * expr: SynExpr * range: range + +/// Represents either a field declaration or a spread expression in an anonymous record construction expression. +/// +/// let r = {| A = 3; ...b; C = true |} +[] +type SynExprAnonRecordFieldOrSpread = + | Field of field: SynExprAnonRecordField * blockSeparator: BlockSeparator option + | Spread of spread: SynExprSpread * blockSeparator: BlockSeparator option + + member Range: range [] type SynInterpolatedStringPart = @@ -1379,7 +1414,7 @@ type SynTypeDefnSimpleRepr = | Enum of cases: SynEnumCase list * range: range /// A record type definition, type X = { A: int; B: int } - | Record of accessibility: SynAccess option * recordFields: SynField list * range: range + | Record of accessibility: SynAccess option * recordFieldsAndSpreads: SynFieldOrSpread list * range: range /// An object oriented type definition. This is not a parse-tree form, but represents the core /// type representation which the type checker splits out from the "ObjectModel" cases of type definitions. @@ -1412,6 +1447,12 @@ type SynTypeDefnSimpleRepr = /// Gets the syntax range of this construct member Range: range +/// Represents either a field declaration or a type spread. +[] +type SynFieldOrSpread = + | Field of field: SynField + | Spread of spread: SynTypeSpread + /// Represents the syntax tree for one case in an enum definition. [] type SynEnumCase = diff --git a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs index da070557119..be454b27a08 100644 --- a/src/Compiler/SyntaxTree/SyntaxTreeOps.fs +++ b/src/Compiler/SyntaxTree/SyntaxTreeOps.fs @@ -962,13 +962,24 @@ let rec synExprContainsError inpExpr = (match origExpr with | Some(e, _) -> walkExpr e | None -> false) - || walkExprs (List.map (fun (_, _, e) -> e) flds) + || walkExprs ( + List.map + (function + | SynExprAnonRecordFieldOrSpread.Field(SynExprAnonRecordField(_, _, e, _), _) + | SynExprAnonRecordFieldOrSpread.Spread(spread = SynExprSpread(expr = e)) -> e) + flds + ) | SynExpr.Record(_, origExpr, fs, _) -> (match origExpr with | Some(e, _) -> walkExpr e | None -> false) - || (let flds = fs |> List.choose (fun (SynExprRecordField(expr = v)) -> v) + || (let flds = + fs + |> List.choose (function + | SynExprRecordFieldOrSpread.Field(SynExprRecordField(expr = v), _) -> v + | SynExprRecordFieldOrSpread.Spread(SynExprSpread(expr = e), _) -> Some e) + walkExprs flds) | SynExpr.ObjExpr(bindings = bs; members = ms; extraImpls = is) -> diff --git a/src/Compiler/lex.fsl b/src/Compiler/lex.fsl index 2e72a9ab201..eaa5c6466f3 100644 --- a/src/Compiler/lex.fsl +++ b/src/Compiler/lex.fsl @@ -850,6 +850,8 @@ rule token (args: LexArgs) (skip: bool) = parse | "..^" { DOT_DOT_HAT } + | "..." { DOT_DOT_DOT } + | "." { DOT } | ":" { COLON } diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index bfeb413d3ca..37a93690803 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -80,7 +80,7 @@ let parse_error_rich = Some(fun (ctxt: ParseErrorContext<_>) -> %token PERCENT_OP BINDER %token LQUOTE RQUOTE RQUOTE_DOT RQUOTE_BAR_RBRACE %token BAR_BAR UPCAST DOWNCAST NULL RESERVED MODULE NAMESPACE DELEGATE CONSTRAINT BASE -%token AND AS ASSERT OASSERT ASR BEGIN DO DONE DOWNTO ELSE ELIF END DOT_DOT DOT_DOT_HAT +%token AND AS ASSERT OASSERT ASR BEGIN DO DONE DOWNTO ELSE ELIF END DOT_DOT_DOT DOT_DOT DOT_DOT_HAT %token EXCEPTION FALSE FOR FUN FUNCTION IF IN JOIN_IN FINALLY DO_BANG %token LAZY OLAZY MATCH MATCH_BANG MUTABLE NEW OF %token OPEN OR REC THEN TO TRUE TRY TYPE VAL INLINE INTERFACE INSTANCE CONST @@ -2163,7 +2163,6 @@ classDefnMember: let leadingKeyword = SynTypeDefnLeadingKeyword.StaticType(rhs parseState 3, rhs parseState 4) [ SynMemberDefn.NestedType($5 leadingKeyword, None, rhs2 parseState 1 5) ] } - /* A 'val' definition in an object type definition */ valDefnDecl: | VAL opt_mutable opt_access ident COLON typ @@ -2951,7 +2950,8 @@ unionCaseReprElement: unionCaseRepr: | braceFieldDeclList { errorR(Deprecated(FSComp.SR.parsConsiderUsingSeparateRecordType(), lhs parseState)) - $1, rhs parseState 1 } + let fields = $1 |> List.choose (function SynFieldOrSpread.Field field -> Some field | _ -> None) + fields, rhs parseState 1 } | unionCaseReprElements { $1 } @@ -2972,7 +2972,16 @@ recdFieldDecl: let (SynField (a, b, c, d, e, xmlDoc, vis, mWhole, trivia)) = fld if Option.isSome vis then errorR (Error (FSComp.SR.parsRecordFieldsCannotHaveVisibilityDeclarations (), rhs parseState 2)) let mWhole = unionRangeWithXmlDoc xmlDoc mWhole - SynField (a, b, c, d, e, xmlDoc, None, mWhole, trivia) } + SynFieldOrSpread.Field (SynField (a, b, c, d, e, xmlDoc, None, mWhole, trivia)) } + + | DOT_DOT_DOT typ + { let m = rhs2 parseState 1 2 + SynFieldOrSpread.Spread (SynTypeSpread (rhs parseState 1, $2, m)) } + + | DOT_DOT_DOT + { let m = rhs parseState 1 + reportParseErrorAt m (FSComp.SR.parsMissingSpreadSrcTy ()) + SynFieldOrSpread.Spread (SynTypeSpread (m, SynType.FromParseError m, m)) } /* Part of a field or val declaration in a record type or object type */ fieldDecl: @@ -5779,8 +5788,11 @@ recdExpr: { let arg = match $4 with None -> mkSynUnit (lhs parseState) | Some e -> e let l = List.rev $5 let dummyField = mkRecdField (SynLongIdent([], [], [])) // dummy identifier, it will be discarded - let l = rebindRanges (dummyField, None, None) l $6 - let (SynExprRecordField(_, _, _, _, inheritsSep)) = List.head l + let l = rebindRanges (RecordBinding.Field (dummyField, None, None)) l $6 + let inheritsSep = + match List.head l with + | SynExprRecordFieldOrSpread.Field (SynExprRecordField(_, _, _, _), inheritsSep) -> inheritsSep + | _ -> None let bindings = List.tail l (Some($2, arg, rhs2 parseState 2 4, inheritsSep, rhs parseState 1), None, bindings) } @@ -5795,7 +5807,7 @@ recdExprCore: let f = mkRecdField f let mEquals = rhs parseState 2 let l = List.rev $4 - let l = rebindRanges (f, Some mEquals, Some $3) l $5 + let l = rebindRanges (RecordBinding.Field (f, Some mEquals, Some $3)) l $5 (None, l) | _ -> raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsFieldBinding()) } @@ -5804,7 +5816,7 @@ recdExprCore: | LongOrSingleIdent(false, (SynLongIdent _ as f), None, m) -> let f = mkRecdField f let mEquals = rhs parseState 2 - let l = rebindRanges (f, Some mEquals, None) [] None + let l = rebindRanges (RecordBinding.Field (f, Some mEquals, None)) [] None None, l | _ -> raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsFieldBinding ()) } @@ -5813,6 +5825,19 @@ recdExprCore: reportParseErrorAt mExpr (FSComp.SR.parsFieldBinding ()) Some($1, (mExpr.EndRange, None)), [] } + | DOT_DOT_DOT declExprBlock recdExprBindings opt_seps_block + { let mSpread = rhs parseState 1 + let m = rhs2 parseState 1 2 + let l = List.rev $3 + let l = rebindRanges (RecordBinding.Spread (SynExprSpread (mSpread, $2, m))) l $4 + None, l } + + | DOT_DOT_DOT + { let mSpread = rhs parseState 1 + let m = mSpread + reportParseErrorAt m (FSComp.SR.parsMissingSpreadSrcExpr ()) + None, rebindRanges (RecordBinding.Spread (SynExprSpread (mSpread, arbExpr ("spreadSrcExpr", m), m))) [] None } + /* handles cases when identifier can start from the underscore */ @@ -5822,7 +5847,7 @@ recdExprCore: reportParseErrorAt m (FSComp.SR.parsUnderscoreInvalidFieldName()) reportParseErrorAt m (FSComp.SR.parsFieldBinding()) let f = mkUnderscoreRecdField m - (None, [ SynExprRecordField(f, None, None, m, None) ]) } + (None, [ SynExprRecordFieldOrSpread.Field (SynExprRecordField(f, None, None, m), None) ]) } | UNDERSCORE EQUALS { let m = rhs parseState 1 @@ -5831,14 +5856,14 @@ recdExprCore: let mEquals = rhs parseState 2 reportParseErrorAt (rhs2 parseState 1 2) (FSComp.SR.parsFieldBinding()) - (None, [ SynExprRecordField(f, Some mEquals, None, (rhs2 parseState 1 2), None) ]) } + (None, [ SynExprRecordFieldOrSpread.Field (SynExprRecordField(f, Some mEquals, None, (rhs2 parseState 1 2)), None) ]) } | UNDERSCORE EQUALS declExprBlock recdExprBindings opt_seps_block { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnderscoreInvalidFieldName()) let f = mkUnderscoreRecdField (rhs parseState 1) let mEquals = rhs parseState 2 let l = List.rev $4 - let l = rebindRanges (f, Some mEquals, Some $3) l $5 + let l = rebindRanges (RecordBinding.Field (f, Some mEquals, Some $3)) l $5 (None, l) } /* handles case like {x with} */ @@ -5895,27 +5920,38 @@ recdExprBindings: { [] } recdBinding: + | DOT_DOT_DOT declExprBlock + { let mSpread = rhs parseState 1 + let m = rhs2 parseState 1 2 + RecordBinding.Spread (SynExprSpread (mSpread, $2, m)) } + | pathOrUnderscore EQUALS declExprBlock { let mEquals = rhs parseState 2 - ($1, Some mEquals, Some $3) } + RecordBinding.Field ($1, Some mEquals, Some $3) } | pathOrUnderscore EQUALS { let mEquals = rhs parseState 2 reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, Some mEquals, None) } + RecordBinding.Field ($1, Some mEquals, None) } | pathOrUnderscore EQUALS ends_coming_soon_or_recover { let mEquals = rhs parseState 2 reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, Some mEquals, None) } + RecordBinding.Field ($1, Some mEquals, None) } | pathOrUnderscore { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None, None) } + RecordBinding.Field ($1, None, None) } | pathOrUnderscore ends_coming_soon_or_recover { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsFieldBinding()) - ($1, None, None) } + RecordBinding.Field ($1, None, None) } + + | DOT_DOT_DOT + { reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsMissingSpreadSrcExpr ()) + let mSpread = rhs parseState 1 + let m = mSpread + RecordBinding.Spread (SynExprSpread (mSpread, arbExpr ("spreadSrcExpr", m), m)) } /* There is a minor conflict between seq { new ty() } // sequence expression with one very odd 'action' expression @@ -6016,9 +6052,14 @@ braceBarExprCore: { let orig, flds = $2 let flds = flds |> List.choose (function - | SynExprRecordField((synLongIdent, _), mEquals, Some e, _, _) when orig.IsSome -> Some(synLongIdent, mEquals, e) // copy-and-update, long identifier signifies nesting - | SynExprRecordField((SynLongIdent([ _id ], _, _) as synLongIdent, _), mEquals, Some e, _, _) -> Some(synLongIdent, mEquals, e) // record construction, long identifier not valid - | SynExprRecordField((synLongIdent, _), mEquals, None, _, _) -> Some(synLongIdent, mEquals, arbExpr ("anonField", synLongIdent.Range)) + | SynExprRecordFieldOrSpread.Field (SynExprRecordField((synLongIdent, _), mEquals, Some e, m), sep) when orig.IsSome -> + Some (SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (synLongIdent, mEquals, e, m), sep)) // copy-and-update, long identifier signifies nesting + | SynExprRecordFieldOrSpread.Field (SynExprRecordField((SynLongIdent([ _id ], _, _) as synLongIdent, _), mEquals, Some e, m), sep) -> + Some (SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (synLongIdent, mEquals, e, m), sep)) // record construction, long identifier not valid + | SynExprRecordFieldOrSpread.Field (SynExprRecordField((synLongIdent, _), mEquals, None, m), sep) -> + Some (SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (synLongIdent, mEquals, arbExpr ("anonField", synLongIdent.Range), m), sep)) + | SynExprRecordFieldOrSpread.Spread (spread, sep) -> + Some (SynExprAnonRecordFieldOrSpread.Spread (spread, sep)) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) let mLeftBrace = rhs parseState 1 let mRightBrace = rhs parseState 3 @@ -6031,8 +6072,12 @@ braceBarExprCore: let orig, flds = $2 let flds = flds |> List.map (function - | SynExprRecordField((synLongIdent, _), mEquals, Some e, _, _) -> (synLongIdent, mEquals, e) - | SynExprRecordField((synLongIdent, _), mEquals, None, _, _) -> (synLongIdent, mEquals, arbExpr ("anonField", synLongIdent.Range))) + | SynExprRecordFieldOrSpread.Field (SynExprRecordField((synLongIdent, _), mEquals, Some e, m), sep) -> + SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (synLongIdent, mEquals, e, m), sep) + | SynExprRecordFieldOrSpread.Field (SynExprRecordField((synLongIdent, _), mEquals, None, m), sep) -> + SynExprAnonRecordFieldOrSpread.Field (SynExprAnonRecordField (synLongIdent, mEquals, arbExpr ("anonField", synLongIdent.Range), m), sep) + | SynExprRecordFieldOrSpread.Spread (spread, sep) -> + SynExprAnonRecordFieldOrSpread.Spread (spread, sep)) let mLeftBrace = rhs parseState 1 let mExpr = rhs parseState 2 (fun (mStruct: range option) -> @@ -6623,7 +6668,7 @@ atomTypeOrAnonRecdType: { let flds, isStruct = $1 let flds2 = flds |> List.choose (function - | (SynField([], false, Some id, ty, false, _xmldoc, None, _m, _trivia)) -> Some(id, ty) + | SynFieldOrSpread.Field (SynField([], false, Some id, ty, false, _xmldoc, None, _m, _trivia)) -> Some(id, ty) | _ -> reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsInvalidAnonRecdType()); None) SynType.AnonRecd(isStruct, flds2, rhs parseState 1) } diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 10fe84e6ab1..d31167fe335 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -587,6 +587,11 @@ vypsat literály libovolné velikosti + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells informační zprávy související s referenčními buňkami @@ -1222,6 +1227,16 @@ Očekává se text člena + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Chybí název případu sjednocení @@ -1452,6 +1467,11 @@ Pole {0} se v tomto anonymním typu záznamu vyskytuje vícekrát. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods Konstrukt „let! ... and! ...“ se dá použít jen v případě, že tvůrce výpočetních výrazů definuje buď metodu „{0}“, nebo vhodné metody „MergeSource“ a „Bind“. @@ -1817,6 +1857,11 @@ Vlastnost nesmí určovat volitelné argumenty, in, out, ParamArray, CallerInfo nebo Quote. + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 17f93260936..7dde0c56f86 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -587,6 +587,11 @@ Literale beliebiger Größe auflisten + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells Informationsmeldungen im Zusammenhang mit Bezugszellen @@ -1222,6 +1227,16 @@ Membertext wird erwartet + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Fehlender Union-Fallname @@ -1452,6 +1467,11 @@ Das Feld "{0}" ist in diesem anonymen Datensatztyp mehrmals vorhanden. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods Das Konstrukt "let! ... and! ..." kann nur verwendet werden, wenn der Berechnungsausdrucks-Generator entweder eine {0}-Methode oder geeignete MergeSources- und Bind-Methoden definiert. @@ -1817,6 +1857,11 @@ Ein Merkmal darf keine Argumente für „optional“, „in“, „out“, „ParamArray“", „CallerInfo“ oder „Quote“ angeben. + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index ecc7e4a3f27..a77dac05043 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -587,6 +587,11 @@ enumerar literales de cualquier tamaño + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells mensajes informativos relacionados con las celdas de referencia @@ -1222,6 +1227,16 @@ Se espera el cuerpo del miembro + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Falta el nombre del caso de unión @@ -1452,6 +1467,11 @@ El campo "{0}" aparece varias veces en este tipo de registro anónimo. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods La construcción "let! ... and! ..." solo se puede usar si el generador de expresiones de cálculo define un método "{0}" o bien los métodos "MergeSources" y "Bind" adecuados. @@ -1817,6 +1857,11 @@ Un rasgo no puede especificar argumentos opcionales, in, out, ParamArray, CallerInfo o Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index 3e0ab156a68..5e0e8b6a403 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -587,6 +587,11 @@ répertorier les littéraux de n’importe quelle taille + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells messages d’information liés aux cellules de référence @@ -1222,6 +1227,16 @@ Comité membre attendu + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Nom du cas syndical manquant @@ -1452,6 +1467,11 @@ Le champ '{0}' apparaît plusieurs fois dans ce type d'enregistrement anonyme. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods Le « laissez ! » ... et! ...' ne peut être utilisée que si le générateur d'expression de calcul définit soit une méthode '{0}', soit des méthodes 'MergeSources' et 'Bind' appropriées. @@ -1817,6 +1857,11 @@ Une caractéristique ne peut pas spécifier d’arguments facultatifs, in, out, ParamArray, CallerInfo ou Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index 424a8e0310b..52aaa60bbd1 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -587,6 +587,11 @@ elenca valori letterali di qualsiasi dimensione + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells messaggi informativi relativi alle celle di riferimento @@ -1222,6 +1227,16 @@ Previsto corpo del membro + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Nome case di unione mancante @@ -1452,6 +1467,11 @@ Il campo '{0}' viene visualizzato più volte in questo tipo di record anonimo. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods È possibile usare il costrutto "let! ... and! ..." solo se il generatore di espressioni di calcolo definisce un metodo "{0}" o metodi "MergeSource" e "Bind" appropriati @@ -1817,6 +1857,11 @@ Un tratto non può specificare argomenti optional, in, out, ParamArray, CallerInfo o Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index d588b1908d7..2ea8b7f9546 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -587,6 +587,11 @@ 任意のサイズのリテラルを一覧表示する + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells 参照セルに関連する情報メッセージ @@ -1222,6 +1227,16 @@ メンバー本体が必要です + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name 共用体のケース名がありません @@ -1452,6 +1467,11 @@ この匿名レコードの種類に、フィールド '{0}' が複数回出現します。 + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods 'let! ... and! ...' コンストラクトは、コンピュテーション式ビルダーが '{0}' メソッドまたは適切な 'MergeSource' および 'Bind' メソッドのいずれかを定義している場合にのみ使用できます @@ -1817,6 +1857,11 @@ 特性では、オプションの、in 引数、out 引数、ParamArray 引数、CallerInfo 引数、または Quote 引数を指定することはできません + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index ec0d939e7b2..1d1c72cef58 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -587,6 +587,11 @@ 모든 크기의 목록 리터럴 + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells 참조 셀과 관련된 정보 메시지 @@ -1222,6 +1227,16 @@ 멤버 본문이 필요한 경우 + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name 공용 구조체 대/소문자 이름이 없습니다. @@ -1452,6 +1467,11 @@ '{0}' 필드가 이 익명 레코드 형식에서 여러 번 나타납니다. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods 'let! ... and! ...' 구문은 계산 식 작성기에서 '{0}' 메서드 또는 적절한 'MergeSources' 및 'Bind' 메서드를 정의한 경우에만 사용할 수 있습니다. @@ -1817,6 +1857,11 @@ 특성은 optional, in, out, ParamArray, CallerInfo, Quote 인수를 지정할 수 없습니다. + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index ae93051caa0..14a3b961603 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -587,6 +587,11 @@ wyświetlanie na liście literałów o dowolnym rozmiarze + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells komunikaty informacyjne związane z odwołaniami do komórek @@ -1222,6 +1227,16 @@ Oczekiwano treści elementu członkowskiego + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Brak nazwy przypadku unii @@ -1452,6 +1467,11 @@ Pole „{0}” występuje wielokrotnie w tym anonimowym typie rekordu. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods Konstrukcji „let! ... and! ...” można użyć tylko wtedy, gdy konstruktor wyrażeń obliczeniowych definiuje metodę „{0}” lub odpowiednie metody „MergeSource” i „Bind” @@ -1817,6 +1857,11 @@ Cecha nie może określać opcjonalnych argumentów in, out, ParamArray, CallerInfo lub Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 0e0c2367513..16d06fb17b0 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -587,6 +587,11 @@ literais de lista de qualquer tamanho + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells mensagens informativas relacionadas a células de referência @@ -1222,6 +1227,16 @@ Esperando corpo do membro + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Nome do caso de união ausente @@ -1452,6 +1467,11 @@ O campo '{0}' aparece várias vezes nesse tipo de registro anônimo. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods O “let! ... and! ...” só poderá ser usada se o construtor de expressão de cálculo definir um método “{0}” ou métodos “MergeSources” e “Bind” apropriados @@ -1817,6 +1857,11 @@ Uma característica não pode especificar os argumentos optional, in, out, ParamArray, CallerInfo ou Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index e25503d865e..7cbddf346a7 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -587,6 +587,11 @@ список литералов любого размера + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells информационные сообщения, связанные с ссылочными ячейками @@ -1222,6 +1227,16 @@ Требуется текст сообщения элемента + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Отсутствует имя случая объединения @@ -1452,6 +1467,11 @@ Поле "{0}" появляется несколько раз в этом типе анонимной записи. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods Конструкцию "let! ... and! ..." можно использовать только в том случае, если построитель выражений с вычислениями определяет либо метод "{0}", либо соответствующие методы "MergeSources" и "Bind" @@ -1817,6 +1857,11 @@ Признак не может указывать необязательные аргументы in, out, ParamArray, CallerInfo или Quote + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index a296c02e44c..a1335eec354 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -587,6 +587,11 @@ tüm boyutlardaki sabit değerleri listele + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells başvuru hücreleriyle ilgili bilgi mesajları @@ -1222,6 +1227,16 @@ Üye gövdesi bekleniyor + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name Birleşim durumu adı eksik @@ -1452,6 +1467,11 @@ '{0}' alanı bu anonim kayıt türünde birden fazla yerde görünüyor. + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods 'let! ... and! ...' yapısı, yalnızca hesaplama ifadesi oluşturucu bir '{0}' metodunu ya da uygun 'MergeSources' ve 'Bind' metotlarını tanımlarsa kullanılabilir @@ -1817,6 +1857,11 @@ Bir nitelik optional, in, out, ParamArray, CallerInfo veya Quote bağımsız değişkenlerini belirtemiyor + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index aa66fa326f6..b650dfc07c8 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -587,6 +587,11 @@ 列出任何大小的文本 + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells 与引用单元格相关的信息性消息 @@ -1222,6 +1227,16 @@ 预期成员正文 + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name 缺少联合用例名称 @@ -1452,6 +1467,11 @@ 字段“{0}”在此匿名记录类型中多次出现。 + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods 仅当计算表达式生成器定义了 "{0}" 方法或适当的 "MergeSources" 和 "Bind" 方法时,才可以使用 "let! ... and! ..." 构造 @@ -1817,6 +1857,11 @@ 特征不能指定 option、in、out、ParamArray、CallerInfo 或 Quote 参数 + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index d8517bff3ff..222995e9766 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -587,6 +587,11 @@ 列出任何大小的常值 + + record type and expression spreads + record type and expression spreads + + informational messages related to reference cells 與參考儲存格相關的資訊訊息 @@ -1222,6 +1227,16 @@ 必須是成員主體 + + Missing spread source expression after '...'. + Missing spread source expression after '...'. + + + + Missing spread source type after '...'. + Missing spread source type after '...'. + + Missing union case name 遺漏聯集案例名稱 @@ -1452,6 +1467,11 @@ 欄位 '{0}' 在這個匿名記錄類型中出現多次。 + + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type. + + This attribute is not valid for use on union cases with fields. This attribute is not valid for use on union cases with fields. @@ -1732,6 +1752,26 @@ You can remove this `nonNull` assertion. + + Spread field '{0}' shadows an explicitly declared field with the same name. + Spread field '{0}' shadows an explicitly declared field with the same name. + + + + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + The source expression of a spread into a nominal record expression must have a nominal or anonymous record type. + + + + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + Spread field '{0}' from type '{1}' shadows an explicitly declared field with the same name. + + + + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + The source type of a spread into a record type definition must itself be a nominal or anonymous record type. + + The 'let! ... and! ...' construct may only be used if the computation expression builder defines either a '{0}' method or appropriate 'MergeSources' and 'Bind' methods 只有在計算運算式產生器定義 '{0}' 方法或正確的 'MergeSource' 和 'Bind' 方法時,才可使用 'let! ... and! ...' 建構 @@ -1817,6 +1857,11 @@ 特徵不能指定選擇性、in、out、ParamArray、CallerInfo 或 Quote 引數 + + This type definition involves a cyclic reference through a spread. + This type definition involves a cyclic reference through a spread. + + The type '{0}' does not support a nullness qualification. The type '{0}' does not support a nullness qualification. diff --git a/src/Compiler/xlf/FSStrings.cs.xlf b/src/Compiler/xlf/FSStrings.cs.xlf index a28784716d6..d0eaabc7922 100644 --- a/src/Compiler/xlf/FSStrings.cs.xlf +++ b/src/Compiler/xlf/FSStrings.cs.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' symbol ..^ diff --git a/src/Compiler/xlf/FSStrings.de.xlf b/src/Compiler/xlf/FSStrings.de.xlf index 73299495a4b..401cc2d6f4e 100644 --- a/src/Compiler/xlf/FSStrings.de.xlf +++ b/src/Compiler/xlf/FSStrings.de.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' Symbol "..^" diff --git a/src/Compiler/xlf/FSStrings.es.xlf b/src/Compiler/xlf/FSStrings.es.xlf index e73ce8e4291..efe65dbdfe1 100644 --- a/src/Compiler/xlf/FSStrings.es.xlf +++ b/src/Compiler/xlf/FSStrings.es.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' símbolo "..^" diff --git a/src/Compiler/xlf/FSStrings.fr.xlf b/src/Compiler/xlf/FSStrings.fr.xlf index cb784fdab67..296f02a68fa 100644 --- a/src/Compiler/xlf/FSStrings.fr.xlf +++ b/src/Compiler/xlf/FSStrings.fr.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' symbole '..^' diff --git a/src/Compiler/xlf/FSStrings.it.xlf b/src/Compiler/xlf/FSStrings.it.xlf index de6c619667a..0cd791a7de4 100644 --- a/src/Compiler/xlf/FSStrings.it.xlf +++ b/src/Compiler/xlf/FSStrings.it.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' simbolo '..^' diff --git a/src/Compiler/xlf/FSStrings.ja.xlf b/src/Compiler/xlf/FSStrings.ja.xlf index 23154e99892..b0aa4259105 100644 --- a/src/Compiler/xlf/FSStrings.ja.xlf +++ b/src/Compiler/xlf/FSStrings.ja.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' シンボル '..^' diff --git a/src/Compiler/xlf/FSStrings.ko.xlf b/src/Compiler/xlf/FSStrings.ko.xlf index 8b2e15d5d5f..64134eccbeb 100644 --- a/src/Compiler/xlf/FSStrings.ko.xlf +++ b/src/Compiler/xlf/FSStrings.ko.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' 기호 '..^' diff --git a/src/Compiler/xlf/FSStrings.pl.xlf b/src/Compiler/xlf/FSStrings.pl.xlf index 7ab2fe2d494..73469420e6b 100644 --- a/src/Compiler/xlf/FSStrings.pl.xlf +++ b/src/Compiler/xlf/FSStrings.pl.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' symbol „..^” diff --git a/src/Compiler/xlf/FSStrings.pt-BR.xlf b/src/Compiler/xlf/FSStrings.pt-BR.xlf index f5e8bc53ca4..68e1bb825a0 100644 --- a/src/Compiler/xlf/FSStrings.pt-BR.xlf +++ b/src/Compiler/xlf/FSStrings.pt-BR.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' símbolo '..^' diff --git a/src/Compiler/xlf/FSStrings.ru.xlf b/src/Compiler/xlf/FSStrings.ru.xlf index 117c522a187..590865b4f48 100644 --- a/src/Compiler/xlf/FSStrings.ru.xlf +++ b/src/Compiler/xlf/FSStrings.ru.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' символ "..^" diff --git a/src/Compiler/xlf/FSStrings.tr.xlf b/src/Compiler/xlf/FSStrings.tr.xlf index 6483eba2da0..0bbbb5ce698 100644 --- a/src/Compiler/xlf/FSStrings.tr.xlf +++ b/src/Compiler/xlf/FSStrings.tr.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' '..^' sembolü diff --git a/src/Compiler/xlf/FSStrings.zh-Hans.xlf b/src/Compiler/xlf/FSStrings.zh-Hans.xlf index be48009ccde..b4306f6f7e6 100644 --- a/src/Compiler/xlf/FSStrings.zh-Hans.xlf +++ b/src/Compiler/xlf/FSStrings.zh-Hans.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' 符号 "..^" diff --git a/src/Compiler/xlf/FSStrings.zh-Hant.xlf b/src/Compiler/xlf/FSStrings.zh-Hant.xlf index 45cae27f445..28d285d4b0a 100644 --- a/src/Compiler/xlf/FSStrings.zh-Hant.xlf +++ b/src/Compiler/xlf/FSStrings.zh-Hant.xlf @@ -102,6 +102,11 @@ symbol '|' (directly before 'null') + + symbol '...' + symbol '...' + + symbol '..^' 符號 '..^' diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/Constraints/Unmanaged.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/Constraints/Unmanaged.fs index 173f18537a5..3ff158d510b 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/Constraints/Unmanaged.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/Constraints/Unmanaged.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace Conformance.Constraints diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs index 69c14a8d418..7b6962ea0a0 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/AnonymousRecords.fs @@ -446,7 +446,7 @@ let v = {| A = 1; A = 2 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 13, "The field 'A' appears multiple times in this record expression.") + (Error 3522, Line 2, Col 19, Line 2, Col 24, "The field 'A' appears multiple times in this record expression.") ] [] @@ -457,8 +457,8 @@ let v = {| A = 1; A = 2; A = 3 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 13, "The field 'A' appears multiple times in this record expression.") - (Error 3522, Line 2, Col 19, Line 2, Col 20, "The field 'A' appears multiple times in this record expression.") + Error 3522, Line 2, Col 19, Line 2, Col 24, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 2, Col 26, Line 2, Col 31, "The field 'A' appears multiple times in this record expression." ] [] @@ -469,8 +469,8 @@ let v = {| A = 0; B = 2; A = 5; B = 6 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 13, "The field 'A' appears multiple times in this record expression.") - (Error 3522, Line 2, Col 19, Line 2, Col 20, "The field 'B' appears multiple times in this record expression.") + Error 3522, Line 2, Col 26, Line 2, Col 31, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 2, Col 33, Line 2, Col 38, "The field 'B' appears multiple times in this record expression." ] [] @@ -481,7 +481,7 @@ let v = {| A = 2; C = "W"; A = 8; B = 6 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 13, "The field 'A' appears multiple times in this record expression.") + Error 3522, Line 2, Col 28, Line 2, Col 33, "The field 'A' appears multiple times in this record expression." ] [] @@ -492,8 +492,8 @@ let v = {| A = 0; C = ""; A = 1; B = 2; A = 5 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 13, "The field 'A' appears multiple times in this record expression.") - (Error 3522, Line 2, Col 27, Line 2, Col 28, "The field 'A' appears multiple times in this record expression.") + Error 3522, Line 2, Col 27, Line 2, Col 32, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 2, Col 41, Line 2, Col 46, "The field 'A' appears multiple times in this record expression." ] [] @@ -504,8 +504,8 @@ let v = {| ``A`` = 0; B = 5; A = ""; B = 0 |} |> compile |> shouldFail |> withDiagnostics [ - (Error 3522, Line 2, Col 12, Line 2, Col 17, "The field 'A' appears multiple times in this record expression.") - (Error 3522, Line 2, Col 23, Line 2, Col 24, "The field 'B' appears multiple times in this record expression.") + Error 3522, Line 2, Col 30, Line 2, Col 36, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 2, Col 38, Line 2, Col 43, "The field 'B' appears multiple times in this record expression." ] [] diff --git a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/RecordTypes.fs b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/RecordTypes.fs index e5fefa0b7c2..c94de89a094 100644 --- a/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/RecordTypes.fs +++ b/tests/FSharp.Compiler.ComponentTests/Conformance/Types/RecordTypes/RecordTypes.fs @@ -441,7 +441,7 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 17, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 25, Line 4, Col 32, "The field 'B' appears multiple times in this record expression or pattern" ] [] @@ -454,8 +454,8 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 17, "The field 'B' appears multiple times in this record expression or pattern") - (Error 668, Line 4, Col 25, Line 4, Col 26, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 25, Line 4, Col 32, "The field 'B' appears multiple times in this record expression or pattern" + Error 668, Line 4, Col 34, Line 4, Col 41, "The field 'B' appears multiple times in this record expression or pattern" ] [] @@ -468,8 +468,8 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 17, "The field 'A' appears multiple times in this record expression or pattern") - (Error 668, Line 4, Col 23, Line 4, Col 24, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 30, Line 4, Col 35, "The field 'A' appears multiple times in this record expression or pattern" + Error 668, Line 4, Col 37, Line 4, Col 42, "The field 'B' appears multiple times in this record expression or pattern" ] [] @@ -482,7 +482,7 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 17, "The field 'A' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 31, Line 4, Col 36, "The field 'A' appears multiple times in this record expression or pattern" ] [] @@ -495,8 +495,8 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 17, "The field 'A' appears multiple times in this record expression or pattern") - (Error 668, Line 4, Col 31, Line 4, Col 32, "The field 'A' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 31, Line 4, Col 36, "The field 'A' appears multiple times in this record expression or pattern" + Error 668, Line 4, Col 45, Line 4, Col 50, "The field 'A' appears multiple times in this record expression or pattern" ] [] @@ -509,8 +509,8 @@ module RecordTypes = |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 4, Col 16, Line 4, Col 21, "The field 'A' appears multiple times in this record expression or pattern") - (Error 668, Line 4, Col 27, Line 4, Col 28, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 4, Col 34, Line 4, Col 39, "The field 'A' appears multiple times in this record expression or pattern" + Error 668, Line 4, Col 41, Line 4, Col 46, "The field 'B' appears multiple times in this record expression or pattern" ] [] diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/AnonymousRecordExpressionSpreads.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/AnonymousRecordExpressionSpreads.fs new file mode 100644 index 00000000000..37c08afb92c --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/AnonymousRecordExpressionSpreads.fs @@ -0,0 +1,78 @@ +module EmittedIL.AnonymousRecordExpressionSpreads + +open FSharp.Test +open FSharp.Test.Compiler + +/// Various types in the System.Diagnostics.CodeAnalysis namespace will be generated by the compiler +/// for the Framework target but will be included in the runtime for the .NET (Core) target. +/// Since the only IL that is material here is the field names, types, and ordering, +/// and since the spread logic is entirely framework/runtime-agnostic, +/// it is simpler to run these tests only for the .NET (Core) target. +type TheoryAttribute = TheoryForNETCOREAPPAttribute + +let [] SupportedLangVersion = "preview" + +let verifyCompilation compilation = + compilation + |> withLangVersion SupportedLangVersion + |> asExe + |> withEmbeddedPdb + |> withEmbedAllSource + |> ignoreWarnings + |> compile + |> shouldSucceed + |> verifyILBaseline + +[] +let Expression_Anonymous_ExplicitShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_ExtraFieldsAreIgnored_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_NoOverlap_Explicit_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_NoOverlap_Spread_Explicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_NoOverlap_Spread_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_SpreadShadowsExplicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_SpreadShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_CoercionsApplied_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Anonymous_Structness_fs compilation = + compilation + |> getCompilation + |> verifyCompilation diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs new file mode 100644 index 00000000000..03bf5ae0704 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs @@ -0,0 +1,14 @@ +[] +type T = + | T of int + static member op_Implicit (T t) = U t + +and [] U = + | U of int + +#nowarn 3391 + +let r6 : {| A : T |} = {| A = T 3 |} +let r7 : {| A : U |} = {| A = T 3 |} +let r8 : {| A : U |} = {| ...r6 |} +let r9 : {| A : U |} = {| {||} with ...r6 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs.il.bsl new file mode 100644 index 00000000000..47ad825bca1 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_CoercionsApplied.fs.il.bsl @@ -0,0 +1,962 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto autochar serializable sealed nested public beforefieldinit T + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C + 61 79 28 29 2C 6E 71 7D 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) + .field assembly initonly int32 item + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(int32 item) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 27 45 78 70 72 65 73 73 69 6F + 6E 5F 41 6E 6F 6E 79 6D 6F 75 73 5F 43 6F 65 72 + 63 69 6F 6E 73 41 70 70 6C 69 65 64 2B 54 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/T::item + IL_000d: ret + } + + .method public hidebysig instance int32 get_Item() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/T::item + IL_0006: ret + } + + .method public hidebysig instance int32 get_Tag() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: pop + IL_0002: ldc.i4.0 + IL_0003: ret + } + + .method assembly hidebysig specialname instance object __DebugDisplay() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+0.8A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/T>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public specialname static class assembly/U op_Implicit(class assembly/T _arg1) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/T::item + IL_0006: newobj instance void assembly/U::.ctor(int32) + IL_000b: ret + } + + .property instance int32 Tag() + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .get instance int32 assembly/T::get_Tag() + } + .property instance int32 Item() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .get instance int32 assembly/T::get_Item() + } + } + + .class auto autochar serializable sealed nested public beforefieldinit U + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C + 61 79 28 29 2C 6E 71 7D 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) + .field assembly initonly int32 item + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(int32 item) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 27 45 78 70 72 65 73 73 69 6F + 6E 5F 41 6E 6F 6E 79 6D 6F 75 73 5F 43 6F 65 72 + 63 69 6F 6E 73 41 70 70 6C 69 65 64 2B 55 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/U::item + IL_000d: ret + } + + .method public hidebysig instance int32 get_Item() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/U::item + IL_0006: ret + } + + .method public hidebysig instance int32 get_Tag() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: pop + IL_0002: ldc.i4.0 + IL_0003: ret + } + + .method assembly hidebysig specialname instance object __DebugDisplay() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+0.8A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/U>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 Tag() + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .get instance int32 assembly/U::get_Tag() + } + .property instance int32 Item() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .get instance int32 assembly/U::get_Item() + } + } + + .field static assembly class '<>f__AnonymousType2396826819`1' r6@11 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2396826819`1' r7@12 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2396826819`1' r8@13 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/T _arg1@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2396826819`1' r9@14 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/T '_arg1@4-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType2396826819`1' get_r6() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2396826819`1' assembly::r6@11 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2396826819`1' get_r7() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2396826819`1' assembly::r7@12 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2396826819`1' get_r8() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2396826819`1' assembly::r8@13 + IL_0005: ret + } + + .method assembly specialname static class assembly/T get__arg1@4() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/T assembly::_arg1@4 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2396826819`1' get_r9() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2396826819`1' assembly::r9@14 + IL_0005: ret + } + + .method assembly specialname static class assembly/T 'get__arg1@4-1'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/T assembly::'_arg1@4-1' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 3 + IL_0000: ldc.i4.3 + IL_0001: newobj instance void assembly/T::.ctor(int32) + IL_0006: newobj instance void class '<>f__AnonymousType2396826819`1'::.ctor(!0) + IL_000b: stsfld class '<>f__AnonymousType2396826819`1' assembly::r6@11 + IL_0010: ldc.i4.3 + IL_0011: newobj instance void assembly/U::.ctor(int32) + IL_0016: newobj instance void class '<>f__AnonymousType2396826819`1'::.ctor(!0) + IL_001b: stsfld class '<>f__AnonymousType2396826819`1' assembly::r7@12 + IL_0020: call class '<>f__AnonymousType2396826819`1' assembly::get_r6() + IL_0025: call instance !0 class '<>f__AnonymousType2396826819`1'::get_A() + IL_002a: stsfld class assembly/T assembly::_arg1@4 + IL_002f: call class assembly/T assembly::get__arg1@4() + IL_0034: ldfld int32 assembly/T::item + IL_0039: newobj instance void assembly/U::.ctor(int32) + IL_003e: newobj instance void class '<>f__AnonymousType2396826819`1'::.ctor(!0) + IL_0043: stsfld class '<>f__AnonymousType2396826819`1' assembly::r8@13 + IL_0048: nop + IL_0049: call class '<>f__AnonymousType2396826819`1' assembly::get_r6() + IL_004e: call instance !0 class '<>f__AnonymousType2396826819`1'::get_A() + IL_0053: stsfld class assembly/T assembly::'_arg1@4-1' + IL_0058: call class assembly/T assembly::'get__arg1@4-1'() + IL_005d: ldfld int32 assembly/T::item + IL_0062: newobj instance void assembly/U::.ctor(int32) + IL_0067: newobj instance void class '<>f__AnonymousType2396826819`1'::.ctor(!0) + IL_006c: stsfld class '<>f__AnonymousType2396826819`1' assembly::r9@14 + IL_0071: ret + } + + .property class '<>f__AnonymousType2396826819`1' + r6() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2396826819`1' assembly::get_r6() + } + .property class '<>f__AnonymousType2396826819`1' + r7() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2396826819`1' assembly::get_r7() + } + .property class '<>f__AnonymousType2396826819`1' + r8() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2396826819`1' assembly::get_r8() + } + .property class assembly/T + _arg1@4() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/T assembly::get__arg1@4() + } + .property class '<>f__AnonymousType2396826819`1' + r9() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2396826819`1' assembly::get_r9() + } + .property class assembly/T + '_arg1@4-1'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/T assembly::'get__arg1@4-1'() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3670812594`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3670812594`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3670812594`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 36 37 30 38 31 32 + 35 39 34 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3670812594`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3670812594`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3670812594`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3670812594`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3670812594`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType3670812594`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType3670812594`0'::CompareTo(class '<>f__AnonymousType3670812594`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType3670812594`0' V_0, + class '<>f__AnonymousType3670812594`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType3670812594`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType3670812594`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType3670812594`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType3670812594`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3670812594`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3670812594`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3670812594`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType3670812594`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType3670812594`0'::Equals(class '<>f__AnonymousType3670812594`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3670812594`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3670812594`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType3670812594`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType3670812594`0'::Equals(class '<>f__AnonymousType3670812594`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType2396826819`1'<'j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType2396826819`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType2396826819`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 32 33 39 36 38 32 36 + 38 31 39 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_000d: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType2396826819`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType2396826819`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType2396826819`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType2396826819`1'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType2396826819`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0021 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001f + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + + IL_001f: ldc.i4.1 + IL_0020: ret + + IL_0021: ldarg.1 + IL_0022: brfalse.s IL_0026 + + IL_0024: ldc.i4.m1 + IL_0025: ret + + IL_0026: ldc.i4.0 + IL_0027: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType2396826819`1'j__TPar'>::CompareTo(class '<>f__AnonymousType2396826819`1') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2396826819`1'j__TPar'> V_0, + class '<>f__AnonymousType2396826819`1'j__TPar'> V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_002b + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0012: brfalse.s IL_0029 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0021: tail. + IL_0023: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType2396826819`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType2396826819`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2396826819`1'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0015: tail. + IL_0017: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2396826819`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType2396826819`1'j__TPar'>::Equals(class '<>f__AnonymousType2396826819`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType2396826819`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001a + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType2396826819`1'j__TPar'>::A@ + IL_0012: tail. + IL_0014: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + + IL_001c: ldarg.1 + IL_001d: ldnull + IL_001e: cgt.un + IL_0020: ldc.i4.0 + IL_0021: ceq + IL_0023: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType2396826819`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2396826819`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType2396826819`1'j__TPar'>::Equals(class '<>f__AnonymousType2396826819`1') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType2396826819`1'::get_A() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs new file mode 100644 index 00000000000..2dc53c30496 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs @@ -0,0 +1,4 @@ +let r1 = {| A = 1; B = 2 |} + +let r2 : {| A : string; B : int |} = {| ...r1; A = "A" |} +let r2' : {| A : string; B : int |} = {| {||} with ...r1; A = "A" |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..878cbb9fa5e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExplicitShadowsSpread.fs.il.bsl @@ -0,0 +1,810 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType986704712`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType986704712`2' r2@3 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType986704712`2' 'r2\'@4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType986704712`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType986704712`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType986704712`2' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType986704712`2' assembly::r2@3 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType986704712`2' 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType986704712`2' assembly::'r2\'@4' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType986704712`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType986704712`2' assembly::r1@1 + IL_000c: ldstr "A" + IL_0011: call class '<>f__AnonymousType986704712`2' assembly::get_r1() + IL_0016: call instance !1 class '<>f__AnonymousType986704712`2'::get_B() + IL_001b: newobj instance void class '<>f__AnonymousType986704712`2'::.ctor(!0, + !1) + IL_0020: stsfld class '<>f__AnonymousType986704712`2' assembly::r2@3 + IL_0025: nop + IL_0026: ldstr "A" + IL_002b: call class '<>f__AnonymousType986704712`2' assembly::get_r1() + IL_0030: call instance !1 class '<>f__AnonymousType986704712`2'::get_B() + IL_0035: newobj instance void class '<>f__AnonymousType986704712`2'::.ctor(!0, + !1) + IL_003a: stsfld class '<>f__AnonymousType986704712`2' assembly::'r2\'@4' + IL_003f: ret + } + + .property class '<>f__AnonymousType986704712`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType986704712`2' assembly::get_r1() + } + .property class '<>f__AnonymousType986704712`2' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType986704712`2' assembly::get_r2() + } + .property class '<>f__AnonymousType986704712`2' + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType986704712`2' assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType986704712`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType986704712`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType986704712`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 39 38 36 37 30 34 37 + 31 32 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType986704712`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType986704712`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType986704712`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType986704712`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType986704712`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType986704712`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType986704712`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType986704712`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType986704712`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType782303463`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType782303463`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType782303463`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 37 38 32 33 30 33 34 + 36 33 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType782303463`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType782303463`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType782303463`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType782303463`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType782303463`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType782303463`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType782303463`0'::CompareTo(class '<>f__AnonymousType782303463`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType782303463`0' V_0, + class '<>f__AnonymousType782303463`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType782303463`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType782303463`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType782303463`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType782303463`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType782303463`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType782303463`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType782303463`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType782303463`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType782303463`0'::Equals(class '<>f__AnonymousType782303463`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType782303463`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType782303463`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType782303463`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType782303463`0'::Equals(class '<>f__AnonymousType782303463`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs new file mode 100644 index 00000000000..013f35276b6 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs @@ -0,0 +1,4 @@ +let src = {| A = 1; B = "B"; C = 3m |} + +let typedTarget : {| B : string |} = {| ...src |} +let typedTarget' : {| B : string |} = {| {||} with ...src |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs.il.bsl new file mode 100644 index 00000000000..c176bf49022 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_ExtraFieldsAreIgnored.fs.il.bsl @@ -0,0 +1,1248 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly extern netstandard +{ + .publickeytoken = (CC 7B 13 FF CD 2D DD 51 ) + .ver 2:1:0:0 +} +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3580924027`3' src@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2283186596`1' typedTarget@3 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2283186596`1' 'typedTarget\'@4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3580924027`3' get_src() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3580924027`3' assembly::src@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2283186596`1' get_typedTarget() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2283186596`1' assembly::typedTarget@3 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2283186596`1' 'get_typedTarget\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2283186596`1' assembly::'typedTarget\'@4' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 9 + IL_0000: ldc.i4.1 + IL_0001: ldstr "B" + IL_0006: ldc.i4.3 + IL_0007: ldc.i4.0 + IL_0008: ldc.i4.0 + IL_0009: ldc.i4.0 + IL_000a: ldc.i4.0 + IL_000b: newobj instance void [netstandard]System.Decimal::.ctor(int32, + int32, + int32, + bool, + uint8) + IL_0010: newobj instance void class '<>f__AnonymousType3580924027`3'::.ctor(!0, + !1, + !2) + IL_0015: stsfld class '<>f__AnonymousType3580924027`3' assembly::src@1 + IL_001a: call class '<>f__AnonymousType3580924027`3' assembly::get_src() + IL_001f: call instance !1 class '<>f__AnonymousType3580924027`3'::get_B() + IL_0024: newobj instance void class '<>f__AnonymousType2283186596`1'::.ctor(!0) + IL_0029: stsfld class '<>f__AnonymousType2283186596`1' assembly::typedTarget@3 + IL_002e: nop + IL_002f: call class '<>f__AnonymousType3580924027`3' assembly::get_src() + IL_0034: call instance !1 class '<>f__AnonymousType3580924027`3'::get_B() + IL_0039: newobj instance void class '<>f__AnonymousType2283186596`1'::.ctor(!0) + IL_003e: stsfld class '<>f__AnonymousType2283186596`1' assembly::'typedTarget\'@4' + IL_0043: ret + } + + .property class '<>f__AnonymousType3580924027`3' + src() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3580924027`3' assembly::get_src() + } + .property class '<>f__AnonymousType2283186596`1' + typedTarget() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2283186596`1' assembly::get_typedTarget() + } + .property class '<>f__AnonymousType2283186596`1' + 'typedTarget\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2283186596`1' assembly::'get_typedTarget\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType2283186596`1'<'j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType2283186596`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType2283186596`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 32 32 38 33 31 38 36 + 35 39 36 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_000d: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType2283186596`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType2283186596`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType2283186596`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType2283186596`1'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType2283186596`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0021 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001f + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + + IL_001f: ldc.i4.1 + IL_0020: ret + + IL_0021: ldarg.1 + IL_0022: brfalse.s IL_0026 + + IL_0024: ldc.i4.m1 + IL_0025: ret + + IL_0026: ldc.i4.0 + IL_0027: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType2283186596`1'j__TPar'>::CompareTo(class '<>f__AnonymousType2283186596`1') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2283186596`1'j__TPar'> V_0, + class '<>f__AnonymousType2283186596`1'j__TPar'> V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_002b + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0012: brfalse.s IL_0029 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0021: tail. + IL_0023: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType2283186596`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType2283186596`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2283186596`1'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0015: tail. + IL_0017: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2283186596`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType2283186596`1'j__TPar'>::Equals(class '<>f__AnonymousType2283186596`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType2283186596`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001a + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType2283186596`1'j__TPar'>::B@ + IL_0012: tail. + IL_0014: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + + IL_001c: ldarg.1 + IL_001d: ldnull + IL_001e: cgt.un + IL_0020: ldc.i4.0 + IL_0021: ceq + IL_0023: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType2283186596`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2283186596`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType2283186596`1'j__TPar'>::Equals(class '<>f__AnonymousType2283186596`1') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType2283186596`1'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3580924027`3'<'j__TPar','j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname + instance void .ctor(!'j__TPar' A, + !'j__TPar' B, + !'j__TPar' C) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 35 38 30 39 32 34 + 30 32 37 60 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_001b: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + int32 V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0067 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0065 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003f: stloc.1 + IL_0040: ldloc.1 + IL_0041: ldc.i4.0 + IL_0042: bge.s IL_0046 + + IL_0044: ldloc.1 + IL_0045: ret + + IL_0046: ldloc.1 + IL_0047: ldc.i4.0 + IL_0048: ble.s IL_004c + + IL_004a: ldloc.1 + IL_004b: ret + + IL_004c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0051: ldarg.0 + IL_0052: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0057: ldarg.1 + IL_0058: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005d: tail. + IL_005f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0064: ret + + IL_0065: ldc.i4.1 + IL_0066: ret + + IL_0067: ldarg.1 + IL_0068: brfalse.s IL_006c + + IL_006a: ldc.i4.m1 + IL_006b: ret + + IL_006c: ldc.i4.0 + IL_006d: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3580924027`3') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0069 + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0067 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0040: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0045: stloc.3 + IL_0046: ldloc.3 + IL_0047: ldc.i4.0 + IL_0048: bge.s IL_004c + + IL_004a: ldloc.3 + IL_004b: ret + + IL_004c: ldloc.3 + IL_004d: ldc.i4.0 + IL_004e: ble.s IL_0052 + + IL_0050: ldloc.3 + IL_0051: ret + + IL_0052: ldarg.2 + IL_0053: ldarg.0 + IL_0054: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0059: ldloc.1 + IL_005a: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005f: tail. + IL_0061: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0066: ret + + IL_0067: ldc.i4.1 + IL_0068: ret + + IL_0069: ldarg.1 + IL_006a: unbox.any class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_006f: brfalse.s IL_0073 + + IL_0071: ldc.i4.m1 + IL_0072: ret + + IL_0073: ldc.i4.0 + IL_0074: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0058 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldc.i4 0x9e3779b9 + IL_0040: ldarg.1 + IL_0041: ldarg.0 + IL_0042: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0047: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_004c: ldloc.0 + IL_004d: ldc.i4.6 + IL_004e: shl + IL_004f: ldloc.0 + IL_0050: ldc.i4.2 + IL_0051: shr + IL_0052: add + IL_0053: add + IL_0054: add + IL_0055: stloc.0 + IL_0056: ldloc.0 + IL_0057: ret + + IL_0058: ldc.i4.0 + IL_0059: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_004b + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0049 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0047 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0029: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002e: brfalse.s IL_0045 + + IL_0030: ldarg.2 + IL_0031: ldarg.0 + IL_0032: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0037: ldloc.0 + IL_0038: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_003d: tail. + IL_003f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0044: ret + + IL_0045: ldc.i4.0 + IL_0046: ret + + IL_0047: ldc.i4.0 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + + IL_004b: ldarg.1 + IL_004c: ldnull + IL_004d: cgt.un + IL_004f: ldc.i4.0 + IL_0050: ceq + IL_0052: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3580924027`3', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0046 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0044 + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_0042 + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0025: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002a: brfalse.s IL_0040 + + IL_002c: ldarg.0 + IL_002d: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0032: ldarg.1 + IL_0033: ldfld !2 class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0038: tail. + IL_003a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_003f: ret + + IL_0040: ldc.i4.0 + IL_0041: ret + + IL_0042: ldc.i4.0 + IL_0043: ret + + IL_0044: ldc.i4.0 + IL_0045: ret + + IL_0046: ldarg.1 + IL_0047: ldnull + IL_0048: cgt.un + IL_004a: ldc.i4.0 + IL_004b: ceq + IL_004d: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3580924027`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3580924027`3') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3580924027`3'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3580924027`3'::get_B() + } + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3580924027`3'::get_C() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType156874234`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType156874234`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType156874234`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 35 36 38 37 34 32 + 33 34 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType156874234`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType156874234`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType156874234`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType156874234`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType156874234`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType156874234`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType156874234`0'::CompareTo(class '<>f__AnonymousType156874234`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType156874234`0' V_0, + class '<>f__AnonymousType156874234`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType156874234`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType156874234`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType156874234`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType156874234`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType156874234`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType156874234`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType156874234`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType156874234`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType156874234`0'::Equals(class '<>f__AnonymousType156874234`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType156874234`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType156874234`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType156874234`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType156874234`0'::Equals(class '<>f__AnonymousType156874234`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs new file mode 100644 index 00000000000..11da3619de6 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs @@ -0,0 +1,4 @@ +let r1 = {| A = 1; B = 2 |} + +let r2 : {| A : int ; B : int; C : int |} = {| C = 3; ...r1 |} +let r2' : {| A : int ; B : int; C : int |} = {| {||} with C = 3; ...r1 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs.il.bsl new file mode 100644 index 00000000000..6908e2b7e1b --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Explicit_Spread.fs.il.bsl @@ -0,0 +1,1353 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3037170192`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType4283677192`3' r2@3 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType4283677192`3' 'r2\'@4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3037170192`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3037170192`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType4283677192`3' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType4283677192`3' assembly::r2@3 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType4283677192`3' 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType4283677192`3' assembly::'r2\'@4' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 5 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType3037170192`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType3037170192`2' assembly::r1@1 + IL_000c: call class '<>f__AnonymousType3037170192`2' assembly::get_r1() + IL_0011: call instance !0 class '<>f__AnonymousType3037170192`2'::get_A() + IL_0016: call class '<>f__AnonymousType3037170192`2' assembly::get_r1() + IL_001b: call instance !1 class '<>f__AnonymousType3037170192`2'::get_B() + IL_0020: ldc.i4.3 + IL_0021: newobj instance void class '<>f__AnonymousType4283677192`3'::.ctor(!0, + !1, + !2) + IL_0026: stsfld class '<>f__AnonymousType4283677192`3' assembly::r2@3 + IL_002b: nop + IL_002c: call class '<>f__AnonymousType3037170192`2' assembly::get_r1() + IL_0031: call instance !0 class '<>f__AnonymousType3037170192`2'::get_A() + IL_0036: call class '<>f__AnonymousType3037170192`2' assembly::get_r1() + IL_003b: call instance !1 class '<>f__AnonymousType3037170192`2'::get_B() + IL_0040: ldc.i4.3 + IL_0041: newobj instance void class '<>f__AnonymousType4283677192`3'::.ctor(!0, + !1, + !2) + IL_0046: stsfld class '<>f__AnonymousType4283677192`3' assembly::'r2\'@4' + IL_004b: ret + } + + .property class '<>f__AnonymousType3037170192`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3037170192`2' assembly::get_r1() + } + .property class '<>f__AnonymousType4283677192`3' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType4283677192`3' assembly::get_r2() + } + .property class '<>f__AnonymousType4283677192`3' + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType4283677192`3' assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1607296883`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1607296883`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1607296883`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 36 30 37 32 39 36 + 38 38 33 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1607296883`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1607296883`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1607296883`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1607296883`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1607296883`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType1607296883`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType1607296883`0'::CompareTo(class '<>f__AnonymousType1607296883`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType1607296883`0' V_0, + class '<>f__AnonymousType1607296883`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType1607296883`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType1607296883`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType1607296883`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType1607296883`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1607296883`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1607296883`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1607296883`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType1607296883`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType1607296883`0'::Equals(class '<>f__AnonymousType1607296883`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1607296883`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1607296883`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType1607296883`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType1607296883`0'::Equals(class '<>f__AnonymousType1607296883`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3037170192`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 30 33 37 31 37 30 + 31 39 32 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3037170192`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3037170192`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3037170192`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3037170192`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3037170192`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3037170192`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3037170192`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType4283677192`3'<'j__TPar','j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname + instance void .ctor(!'j__TPar' A, + !'j__TPar' B, + !'j__TPar' C) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 34 32 38 33 36 37 37 + 31 39 32 60 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_001b: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + int32 V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0067 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0065 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003f: stloc.1 + IL_0040: ldloc.1 + IL_0041: ldc.i4.0 + IL_0042: bge.s IL_0046 + + IL_0044: ldloc.1 + IL_0045: ret + + IL_0046: ldloc.1 + IL_0047: ldc.i4.0 + IL_0048: ble.s IL_004c + + IL_004a: ldloc.1 + IL_004b: ret + + IL_004c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0051: ldarg.0 + IL_0052: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0057: ldarg.1 + IL_0058: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005d: tail. + IL_005f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0064: ret + + IL_0065: ldc.i4.1 + IL_0066: ret + + IL_0067: ldarg.1 + IL_0068: brfalse.s IL_006c + + IL_006a: ldc.i4.m1 + IL_006b: ret + + IL_006c: ldc.i4.0 + IL_006d: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType4283677192`3') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0069 + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0067 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0040: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0045: stloc.3 + IL_0046: ldloc.3 + IL_0047: ldc.i4.0 + IL_0048: bge.s IL_004c + + IL_004a: ldloc.3 + IL_004b: ret + + IL_004c: ldloc.3 + IL_004d: ldc.i4.0 + IL_004e: ble.s IL_0052 + + IL_0050: ldloc.3 + IL_0051: ret + + IL_0052: ldarg.2 + IL_0053: ldarg.0 + IL_0054: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0059: ldloc.1 + IL_005a: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005f: tail. + IL_0061: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0066: ret + + IL_0067: ldc.i4.1 + IL_0068: ret + + IL_0069: ldarg.1 + IL_006a: unbox.any class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_006f: brfalse.s IL_0073 + + IL_0071: ldc.i4.m1 + IL_0072: ret + + IL_0073: ldc.i4.0 + IL_0074: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0058 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldc.i4 0x9e3779b9 + IL_0040: ldarg.1 + IL_0041: ldarg.0 + IL_0042: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0047: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_004c: ldloc.0 + IL_004d: ldc.i4.6 + IL_004e: shl + IL_004f: ldloc.0 + IL_0050: ldc.i4.2 + IL_0051: shr + IL_0052: add + IL_0053: add + IL_0054: add + IL_0055: stloc.0 + IL_0056: ldloc.0 + IL_0057: ret + + IL_0058: ldc.i4.0 + IL_0059: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_004b + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0049 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0047 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0029: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002e: brfalse.s IL_0045 + + IL_0030: ldarg.2 + IL_0031: ldarg.0 + IL_0032: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0037: ldloc.0 + IL_0038: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_003d: tail. + IL_003f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0044: ret + + IL_0045: ldc.i4.0 + IL_0046: ret + + IL_0047: ldc.i4.0 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + + IL_004b: ldarg.1 + IL_004c: ldnull + IL_004d: cgt.un + IL_004f: ldc.i4.0 + IL_0050: ceq + IL_0052: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType4283677192`3', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0046 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0044 + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_0042 + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0025: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002a: brfalse.s IL_0040 + + IL_002c: ldarg.0 + IL_002d: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0032: ldarg.1 + IL_0033: ldfld !2 class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0038: tail. + IL_003a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_003f: ret + + IL_0040: ldc.i4.0 + IL_0041: ret + + IL_0042: ldc.i4.0 + IL_0043: ret + + IL_0044: ldc.i4.0 + IL_0045: ret + + IL_0046: ldarg.1 + IL_0047: ldnull + IL_0048: cgt.un + IL_004a: ldc.i4.0 + IL_004b: ceq + IL_004d: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType4283677192`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType4283677192`3') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType4283677192`3'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType4283677192`3'::get_B() + } + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType4283677192`3'::get_C() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs new file mode 100644 index 00000000000..4d655240010 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs @@ -0,0 +1,4 @@ +let r1 = {| A = 1; B = 2 |} + +let r2 : {| A : int ; B : int; C : int |} = {| ...r1; C = 3 |} +let r2' : {| A : int ; B : int; C : int |} = {| {||} with ...r1; C = 3 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs.il.bsl new file mode 100644 index 00000000000..4981f6e16d3 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Explicit.fs.il.bsl @@ -0,0 +1,1353 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType998605617`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1772839104`3' r2@3 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1772839104`3' 'r2\'@4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType998605617`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType998605617`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1772839104`3' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1772839104`3' assembly::r2@3 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1772839104`3' 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1772839104`3' assembly::'r2\'@4' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 5 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType998605617`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType998605617`2' assembly::r1@1 + IL_000c: call class '<>f__AnonymousType998605617`2' assembly::get_r1() + IL_0011: call instance !0 class '<>f__AnonymousType998605617`2'::get_A() + IL_0016: call class '<>f__AnonymousType998605617`2' assembly::get_r1() + IL_001b: call instance !1 class '<>f__AnonymousType998605617`2'::get_B() + IL_0020: ldc.i4.3 + IL_0021: newobj instance void class '<>f__AnonymousType1772839104`3'::.ctor(!0, + !1, + !2) + IL_0026: stsfld class '<>f__AnonymousType1772839104`3' assembly::r2@3 + IL_002b: nop + IL_002c: call class '<>f__AnonymousType998605617`2' assembly::get_r1() + IL_0031: call instance !0 class '<>f__AnonymousType998605617`2'::get_A() + IL_0036: call class '<>f__AnonymousType998605617`2' assembly::get_r1() + IL_003b: call instance !1 class '<>f__AnonymousType998605617`2'::get_B() + IL_0040: ldc.i4.3 + IL_0041: newobj instance void class '<>f__AnonymousType1772839104`3'::.ctor(!0, + !1, + !2) + IL_0046: stsfld class '<>f__AnonymousType1772839104`3' assembly::'r2\'@4' + IL_004b: ret + } + + .property class '<>f__AnonymousType998605617`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType998605617`2' assembly::get_r1() + } + .property class '<>f__AnonymousType1772839104`3' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1772839104`3' assembly::get_r2() + } + .property class '<>f__AnonymousType1772839104`3' + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1772839104`3' assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3808110725`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3808110725`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3808110725`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 38 30 38 31 31 30 + 37 32 35 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3808110725`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3808110725`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3808110725`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3808110725`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3808110725`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType3808110725`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType3808110725`0'::CompareTo(class '<>f__AnonymousType3808110725`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType3808110725`0' V_0, + class '<>f__AnonymousType3808110725`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType3808110725`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType3808110725`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType3808110725`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType3808110725`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3808110725`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3808110725`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3808110725`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType3808110725`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType3808110725`0'::Equals(class '<>f__AnonymousType3808110725`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3808110725`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3808110725`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType3808110725`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType3808110725`0'::Equals(class '<>f__AnonymousType3808110725`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType998605617`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType998605617`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType998605617`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 39 39 38 36 30 35 36 + 31 37 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType998605617`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType998605617`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType998605617`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType998605617`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType998605617`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType998605617`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType998605617`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType998605617`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType998605617`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1772839104`3'<'j__TPar','j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname + instance void .ctor(!'j__TPar' A, + !'j__TPar' B, + !'j__TPar' C) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 37 37 32 38 33 39 + 31 30 34 60 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_001b: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + int32 V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0067 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0065 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003f: stloc.1 + IL_0040: ldloc.1 + IL_0041: ldc.i4.0 + IL_0042: bge.s IL_0046 + + IL_0044: ldloc.1 + IL_0045: ret + + IL_0046: ldloc.1 + IL_0047: ldc.i4.0 + IL_0048: ble.s IL_004c + + IL_004a: ldloc.1 + IL_004b: ret + + IL_004c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0051: ldarg.0 + IL_0052: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0057: ldarg.1 + IL_0058: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005d: tail. + IL_005f: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0064: ret + + IL_0065: ldc.i4.1 + IL_0066: ret + + IL_0067: ldarg.1 + IL_0068: brfalse.s IL_006c + + IL_006a: ldc.i4.m1 + IL_006b: ret + + IL_006c: ldc.i4.0 + IL_006d: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1772839104`3') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0069 + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0067 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0040: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0045: stloc.3 + IL_0046: ldloc.3 + IL_0047: ldc.i4.0 + IL_0048: bge.s IL_004c + + IL_004a: ldloc.3 + IL_004b: ret + + IL_004c: ldloc.3 + IL_004d: ldc.i4.0 + IL_004e: ble.s IL_0052 + + IL_0050: ldloc.3 + IL_0051: ret + + IL_0052: ldarg.2 + IL_0053: ldarg.0 + IL_0054: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0059: ldloc.1 + IL_005a: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005f: tail. + IL_0061: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0066: ret + + IL_0067: ldc.i4.1 + IL_0068: ret + + IL_0069: ldarg.1 + IL_006a: unbox.any class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_006f: brfalse.s IL_0073 + + IL_0071: ldc.i4.m1 + IL_0072: ret + + IL_0073: ldc.i4.0 + IL_0074: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0058 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldc.i4 0x9e3779b9 + IL_0040: ldarg.1 + IL_0041: ldarg.0 + IL_0042: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0047: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_004c: ldloc.0 + IL_004d: ldc.i4.6 + IL_004e: shl + IL_004f: ldloc.0 + IL_0050: ldc.i4.2 + IL_0051: shr + IL_0052: add + IL_0053: add + IL_0054: add + IL_0055: stloc.0 + IL_0056: ldloc.0 + IL_0057: ret + + IL_0058: ldc.i4.0 + IL_0059: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_004b + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0049 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0047 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0029: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002e: brfalse.s IL_0045 + + IL_0030: ldarg.2 + IL_0031: ldarg.0 + IL_0032: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0037: ldloc.0 + IL_0038: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_003d: tail. + IL_003f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0044: ret + + IL_0045: ldc.i4.0 + IL_0046: ret + + IL_0047: ldc.i4.0 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + + IL_004b: ldarg.1 + IL_004c: ldnull + IL_004d: cgt.un + IL_004f: ldc.i4.0 + IL_0050: ceq + IL_0052: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1772839104`3', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0046 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0044 + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_0042 + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0025: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002a: brfalse.s IL_0040 + + IL_002c: ldarg.0 + IL_002d: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0032: ldarg.1 + IL_0033: ldfld !2 class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0038: tail. + IL_003a: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_003f: ret + + IL_0040: ldc.i4.0 + IL_0041: ret + + IL_0042: ldc.i4.0 + IL_0043: ret + + IL_0044: ldc.i4.0 + IL_0045: ret + + IL_0046: ldarg.1 + IL_0047: ldnull + IL_0048: cgt.un + IL_004a: ldc.i4.0 + IL_004b: ceq + IL_004d: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1772839104`3'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1772839104`3') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1772839104`3'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1772839104`3'::get_B() + } + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1772839104`3'::get_C() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs new file mode 100644 index 00000000000..89412152572 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs @@ -0,0 +1,7 @@ +let r1 = {| A = 1 ; B = 2 |} +let r2 = {| C = 3; D = 4 |} + +let r3 : {| A : int ; B : int; C : int; D : int |} = {| ...r1; ...r2 |} +let r4 : {| A : int ; B : int; C : int; D : int |} = {| ...r2; ...r3 |} +let r3' : {| A : int ; B : int; C : int; D : int |} = {| {||} with ...r1; ...r2 |} +let r4' : {| A : int ; B : int; C : int; D : int |} = {| {||} with ...r2; ...r3 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs.il.bsl new file mode 100644 index 00000000000..d2148cc2fa6 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_NoOverlap_Spread_Spread.fs.il.bsl @@ -0,0 +1,1976 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1261546922`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType2413989789`2' r2@2 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1583142996`4' r3@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1583142996`4' r4@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1583142996`4' 'r3\'@6' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1583142996`4' 'r4\'@7' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType1261546922`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1261546922`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType2413989789`2' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType2413989789`2' assembly::r2@2 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1583142996`4' get_r3() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1583142996`4' assembly::r3@4 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1583142996`4' get_r4() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1583142996`4' assembly::r4@5 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1583142996`4' 'get_r3\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1583142996`4' assembly::'r3\'@6' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1583142996`4' 'get_r4\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1583142996`4' assembly::'r4\'@7' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 6 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType1261546922`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType1261546922`2' assembly::r1@1 + IL_000c: ldc.i4.3 + IL_000d: ldc.i4.4 + IL_000e: newobj instance void class '<>f__AnonymousType2413989789`2'::.ctor(!0, + !1) + IL_0013: stsfld class '<>f__AnonymousType2413989789`2' assembly::r2@2 + IL_0018: call class '<>f__AnonymousType1261546922`2' assembly::get_r1() + IL_001d: call instance !0 class '<>f__AnonymousType1261546922`2'::get_A() + IL_0022: call class '<>f__AnonymousType1261546922`2' assembly::get_r1() + IL_0027: call instance !1 class '<>f__AnonymousType1261546922`2'::get_B() + IL_002c: call class '<>f__AnonymousType2413989789`2' assembly::get_r2() + IL_0031: call instance !0 class '<>f__AnonymousType2413989789`2'::get_C() + IL_0036: call class '<>f__AnonymousType2413989789`2' assembly::get_r2() + IL_003b: call instance !1 class '<>f__AnonymousType2413989789`2'::get_D() + IL_0040: newobj instance void class '<>f__AnonymousType1583142996`4'::.ctor(!0, + !1, + !2, + !3) + IL_0045: stsfld class '<>f__AnonymousType1583142996`4' assembly::r3@4 + IL_004a: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_004f: call instance !0 class '<>f__AnonymousType1583142996`4'::get_A() + IL_0054: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_0059: call instance !1 class '<>f__AnonymousType1583142996`4'::get_B() + IL_005e: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_0063: call instance !2 class '<>f__AnonymousType1583142996`4'::get_C() + IL_0068: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_006d: call instance !3 class '<>f__AnonymousType1583142996`4'::get_D() + IL_0072: newobj instance void class '<>f__AnonymousType1583142996`4'::.ctor(!0, + !1, + !2, + !3) + IL_0077: stsfld class '<>f__AnonymousType1583142996`4' assembly::r4@5 + IL_007c: nop + IL_007d: call class '<>f__AnonymousType1261546922`2' assembly::get_r1() + IL_0082: call instance !0 class '<>f__AnonymousType1261546922`2'::get_A() + IL_0087: call class '<>f__AnonymousType1261546922`2' assembly::get_r1() + IL_008c: call instance !1 class '<>f__AnonymousType1261546922`2'::get_B() + IL_0091: call class '<>f__AnonymousType2413989789`2' assembly::get_r2() + IL_0096: call instance !0 class '<>f__AnonymousType2413989789`2'::get_C() + IL_009b: call class '<>f__AnonymousType2413989789`2' assembly::get_r2() + IL_00a0: call instance !1 class '<>f__AnonymousType2413989789`2'::get_D() + IL_00a5: newobj instance void class '<>f__AnonymousType1583142996`4'::.ctor(!0, + !1, + !2, + !3) + IL_00aa: stsfld class '<>f__AnonymousType1583142996`4' assembly::'r3\'@6' + IL_00af: nop + IL_00b0: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_00b5: call instance !0 class '<>f__AnonymousType1583142996`4'::get_A() + IL_00ba: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_00bf: call instance !1 class '<>f__AnonymousType1583142996`4'::get_B() + IL_00c4: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_00c9: call instance !2 class '<>f__AnonymousType1583142996`4'::get_C() + IL_00ce: call class '<>f__AnonymousType1583142996`4' assembly::get_r3() + IL_00d3: call instance !3 class '<>f__AnonymousType1583142996`4'::get_D() + IL_00d8: newobj instance void class '<>f__AnonymousType1583142996`4'::.ctor(!0, + !1, + !2, + !3) + IL_00dd: stsfld class '<>f__AnonymousType1583142996`4' assembly::'r4\'@7' + IL_00e2: ret + } + + .property class '<>f__AnonymousType1261546922`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1261546922`2' assembly::get_r1() + } + .property class '<>f__AnonymousType2413989789`2' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType2413989789`2' assembly::get_r2() + } + .property class '<>f__AnonymousType1583142996`4' + r3() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1583142996`4' assembly::get_r3() + } + .property class '<>f__AnonymousType1583142996`4' + r4() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1583142996`4' assembly::get_r4() + } + .property class '<>f__AnonymousType1583142996`4' + 'r3\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1583142996`4' assembly::'get_r3\''() + } + .property class '<>f__AnonymousType1583142996`4' + 'r4\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1583142996`4' assembly::'get_r4\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType2413989789`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' C, !'j__TPar' D) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 32 34 31 33 39 38 39 + 37 38 39 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType2413989789`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType2413989789`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType2413989789`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::C@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::D@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType2413989789`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType2413989789`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType2413989789`2'::get_C() + } + .property instance !'j__TPar' D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType2413989789`2'::get_D() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1583142996`4'<'j__TPar','j__TPar','j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname + instance void .ctor(!'j__TPar' A, + !'j__TPar' B, + !'j__TPar' C, + !'j__TPar' D) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 35 38 33 31 34 32 + 39 39 36 60 34 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_001b: ldarg.0 + IL_001c: ldarg.s D + IL_001e: stfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0023: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + int32 V_1, + int32 V_2) + IL_0000: ldarg.0 + IL_0001: brfalse IL_0090 + + IL_0006: ldarg.1 + IL_0007: brfalse IL_008e + + IL_000c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: ldarg.0 + IL_0012: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0017: ldarg.1 + IL_0018: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_001d: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0022: stloc.0 + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: bge.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: ldloc.0 + IL_002a: ldc.i4.0 + IL_002b: ble.s IL_002f + + IL_002d: ldloc.0 + IL_002e: ret + + IL_002f: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_003a: ldarg.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0040: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0045: stloc.1 + IL_0046: ldloc.1 + IL_0047: ldc.i4.0 + IL_0048: bge.s IL_004c + + IL_004a: ldloc.1 + IL_004b: ret + + IL_004c: ldloc.1 + IL_004d: ldc.i4.0 + IL_004e: ble.s IL_0052 + + IL_0050: ldloc.1 + IL_0051: ret + + IL_0052: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0057: ldarg.0 + IL_0058: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005d: ldarg.1 + IL_005e: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0063: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0068: stloc.2 + IL_0069: ldloc.2 + IL_006a: ldc.i4.0 + IL_006b: bge.s IL_006f + + IL_006d: ldloc.2 + IL_006e: ret + + IL_006f: ldloc.2 + IL_0070: ldc.i4.0 + IL_0071: ble.s IL_0075 + + IL_0073: ldloc.2 + IL_0074: ret + + IL_0075: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_007a: ldarg.0 + IL_007b: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0080: ldarg.1 + IL_0081: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0086: tail. + IL_0088: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_008d: ret + + IL_008e: ldc.i4.1 + IL_008f: ret + + IL_0090: ldarg.1 + IL_0091: brfalse.s IL_0095 + + IL_0093: ldc.i4.m1 + IL_0094: ret + + IL_0095: ldc.i4.0 + IL_0096: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1583142996`4') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> V_1, + int32 V_2, + int32 V_3, + int32 V_4) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse IL_0093 + + IL_000f: ldarg.1 + IL_0010: unbox.any class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0015: brfalse IL_0091 + + IL_001a: ldarg.2 + IL_001b: ldarg.0 + IL_001c: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0021: ldloc.1 + IL_0022: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0027: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_002c: stloc.2 + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: bge.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldloc.2 + IL_0034: ldc.i4.0 + IL_0035: ble.s IL_0039 + + IL_0037: ldloc.2 + IL_0038: ret + + IL_0039: ldarg.2 + IL_003a: ldarg.0 + IL_003b: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0040: ldloc.1 + IL_0041: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0046: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_004b: stloc.3 + IL_004c: ldloc.3 + IL_004d: ldc.i4.0 + IL_004e: bge.s IL_0052 + + IL_0050: ldloc.3 + IL_0051: ret + + IL_0052: ldloc.3 + IL_0053: ldc.i4.0 + IL_0054: ble.s IL_0058 + + IL_0056: ldloc.3 + IL_0057: ret + + IL_0058: ldarg.2 + IL_0059: ldarg.0 + IL_005a: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_005f: ldloc.1 + IL_0060: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0065: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_006a: stloc.s V_4 + IL_006c: ldloc.s V_4 + IL_006e: ldc.i4.0 + IL_006f: bge.s IL_0074 + + IL_0071: ldloc.s V_4 + IL_0073: ret + + IL_0074: ldloc.s V_4 + IL_0076: ldc.i4.0 + IL_0077: ble.s IL_007c + + IL_0079: ldloc.s V_4 + IL_007b: ret + + IL_007c: ldarg.2 + IL_007d: ldarg.0 + IL_007e: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0083: ldloc.1 + IL_0084: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0089: tail. + IL_008b: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0090: ret + + IL_0091: ldc.i4.1 + IL_0092: ret + + IL_0093: ldarg.1 + IL_0094: unbox.any class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0099: brfalse.s IL_009d + + IL_009b: ldc.i4.m1 + IL_009c: ret + + IL_009d: ldc.i4.0 + IL_009e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0073 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldc.i4 0x9e3779b9 + IL_0040: ldarg.1 + IL_0041: ldarg.0 + IL_0042: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0047: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_004c: ldloc.0 + IL_004d: ldc.i4.6 + IL_004e: shl + IL_004f: ldloc.0 + IL_0050: ldc.i4.2 + IL_0051: shr + IL_0052: add + IL_0053: add + IL_0054: add + IL_0055: stloc.0 + IL_0056: ldc.i4 0x9e3779b9 + IL_005b: ldarg.1 + IL_005c: ldarg.0 + IL_005d: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0062: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0067: ldloc.0 + IL_0068: ldc.i4.6 + IL_0069: shl + IL_006a: ldloc.0 + IL_006b: ldc.i4.2 + IL_006c: shr + IL_006d: add + IL_006e: add + IL_006f: add + IL_0070: stloc.0 + IL_0071: ldloc.0 + IL_0072: ret + + IL_0073: ldc.i4.0 + IL_0074: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0061 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_005f + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_005d + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0029: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002e: brfalse.s IL_005b + + IL_0030: ldarg.2 + IL_0031: ldarg.0 + IL_0032: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0037: ldloc.0 + IL_0038: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_003d: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0042: brfalse.s IL_0059 + + IL_0044: ldarg.2 + IL_0045: ldarg.0 + IL_0046: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_004b: ldloc.0 + IL_004c: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0051: tail. + IL_0053: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0058: ret + + IL_0059: ldc.i4.0 + IL_005a: ret + + IL_005b: ldc.i4.0 + IL_005c: ret + + IL_005d: ldc.i4.0 + IL_005e: ret + + IL_005f: ldc.i4.0 + IL_0060: ret + + IL_0061: ldarg.1 + IL_0062: ldnull + IL_0063: cgt.un + IL_0065: ldc.i4.0 + IL_0066: ceq + IL_0068: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1583142996`4', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_005b + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0059 + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_0057 + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::B@ + IL_0025: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002a: brfalse.s IL_0055 + + IL_002c: ldarg.0 + IL_002d: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0032: ldarg.1 + IL_0033: ldfld !2 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::C@ + IL_0038: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_003d: brfalse.s IL_0053 + + IL_003f: ldarg.0 + IL_0040: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_0045: ldarg.1 + IL_0046: ldfld !3 class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::D@ + IL_004b: tail. + IL_004d: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0052: ret + + IL_0053: ldc.i4.0 + IL_0054: ret + + IL_0055: ldc.i4.0 + IL_0056: ret + + IL_0057: ldc.i4.0 + IL_0058: ret + + IL_0059: ldc.i4.0 + IL_005a: ret + + IL_005b: ldarg.1 + IL_005c: ldnull + IL_005d: cgt.un + IL_005f: ldc.i4.0 + IL_0060: ceq + IL_0062: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1583142996`4'j__TPar',!'j__TPar',!'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1583142996`4') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1583142996`4'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1583142996`4'::get_B() + } + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1583142996`4'::get_C() + } + .property instance !'j__TPar' D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 03 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1583142996`4'::get_D() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1261546922`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 32 36 31 35 34 36 + 39 32 32 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1261546922`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1261546922`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1261546922`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1261546922`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1261546922`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1261546922`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1261546922`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType471328817`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType471328817`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType471328817`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 34 37 31 33 32 38 38 + 31 37 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType471328817`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType471328817`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType471328817`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType471328817`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType471328817`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType471328817`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType471328817`0'::CompareTo(class '<>f__AnonymousType471328817`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType471328817`0' V_0, + class '<>f__AnonymousType471328817`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType471328817`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType471328817`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType471328817`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType471328817`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType471328817`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType471328817`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType471328817`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType471328817`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType471328817`0'::Equals(class '<>f__AnonymousType471328817`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType471328817`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType471328817`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType471328817`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType471328817`0'::Equals(class '<>f__AnonymousType471328817`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs new file mode 100644 index 00000000000..3234945a235 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs @@ -0,0 +1,4 @@ +let r1 = {| A = 1; B = 2 |} + +let r2 : {| A : int; B : int |} = {| A = "A"; ...r1 |} +let r2' : {| A : int; B : int |} = {| {||} with A = "A"; ...r1 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs.il.bsl new file mode 100644 index 00000000000..2087a155790 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsExplicit.fs.il.bsl @@ -0,0 +1,812 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1861640520`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1861640520`2' r2@3 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1861640520`2' 'r2\'@4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType1861640520`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1861640520`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1861640520`2' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1861640520`2' assembly::r2@3 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1861640520`2' 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1861640520`2' assembly::'r2\'@4' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType1861640520`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType1861640520`2' assembly::r1@1 + IL_000c: call class '<>f__AnonymousType1861640520`2' assembly::get_r1() + IL_0011: call instance !0 class '<>f__AnonymousType1861640520`2'::get_A() + IL_0016: call class '<>f__AnonymousType1861640520`2' assembly::get_r1() + IL_001b: call instance !1 class '<>f__AnonymousType1861640520`2'::get_B() + IL_0020: newobj instance void class '<>f__AnonymousType1861640520`2'::.ctor(!0, + !1) + IL_0025: stsfld class '<>f__AnonymousType1861640520`2' assembly::r2@3 + IL_002a: nop + IL_002b: call class '<>f__AnonymousType1861640520`2' assembly::get_r1() + IL_0030: call instance !0 class '<>f__AnonymousType1861640520`2'::get_A() + IL_0035: call class '<>f__AnonymousType1861640520`2' assembly::get_r1() + IL_003a: call instance !1 class '<>f__AnonymousType1861640520`2'::get_B() + IL_003f: newobj instance void class '<>f__AnonymousType1861640520`2'::.ctor(!0, + !1) + IL_0044: stsfld class '<>f__AnonymousType1861640520`2' assembly::'r2\'@4' + IL_0049: ret + } + + .property class '<>f__AnonymousType1861640520`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1861640520`2' assembly::get_r1() + } + .property class '<>f__AnonymousType1861640520`2' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1861640520`2' assembly::get_r2() + } + .property class '<>f__AnonymousType1861640520`2' + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1861640520`2' assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1861640520`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 38 36 31 36 34 30 + 35 32 30 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1861640520`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1861640520`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1861640520`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1861640520`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1861640520`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1861640520`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1861640520`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1294727723`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1294727723`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1294727723`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 32 39 34 37 32 37 + 37 32 33 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1294727723`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1294727723`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1294727723`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1294727723`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1294727723`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType1294727723`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType1294727723`0'::CompareTo(class '<>f__AnonymousType1294727723`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType1294727723`0' V_0, + class '<>f__AnonymousType1294727723`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType1294727723`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType1294727723`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType1294727723`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType1294727723`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1294727723`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1294727723`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1294727723`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType1294727723`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType1294727723`0'::Equals(class '<>f__AnonymousType1294727723`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1294727723`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1294727723`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType1294727723`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType1294727723`0'::Equals(class '<>f__AnonymousType1294727723`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs new file mode 100644 index 00000000000..c79771f8d7f --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs @@ -0,0 +1,8 @@ +let r1 = {| A = 1; B = 2 |} +let r2 = {| A = "A" |} + +let r3 : {| A : string; B : int |} = {| ...r1; ...r2 |} +let r4 : {| A : int; B : int |} = {| ...r2; ...r1 |} + +let r3' : {| A : string; B : int |} = {| {||} with ...r1; ...r2 |} +let r4' : {| A : int; B : int |} = {| {||} with ...r2; ...r1 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..e90a07efdfb --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_SpreadShadowsSpread.fs.il.bsl @@ -0,0 +1,1224 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3872473412`2' r1@1 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3065250744`1' r2@2 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3872473412`2' r3@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly int32 B@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3872473412`2' r4@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3872473412`2' 'r3\'@7' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly int32 'B@7-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3872473412`2' 'r4\'@8' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3872473412`2' get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3872473412`2' assembly::r1@1 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3065250744`1' get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3065250744`1' assembly::r2@2 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3872473412`2' get_r3() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3872473412`2' assembly::r3@4 + IL_0005: ret + } + + .method assembly specialname static int32 get_B@4() cil managed + { + + .maxstack 8 + IL_0000: ldsfld int32 assembly::B@4 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3872473412`2' get_r4() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3872473412`2' assembly::r4@5 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3872473412`2' 'get_r3\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3872473412`2' assembly::'r3\'@7' + IL_0005: ret + } + + .method assembly specialname static int32 'get_B@7-1'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld int32 assembly::'B@7-1' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3872473412`2' 'get_r4\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3872473412`2' assembly::'r4\'@8' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType3872473412`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType3872473412`2' assembly::r1@1 + IL_000c: ldstr "A" + IL_0011: newobj instance void class '<>f__AnonymousType3065250744`1'::.ctor(!0) + IL_0016: stsfld class '<>f__AnonymousType3065250744`1' assembly::r2@2 + IL_001b: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_0020: call instance !1 class '<>f__AnonymousType3872473412`2'::get_B() + IL_0025: stsfld int32 assembly::B@4 + IL_002a: call class '<>f__AnonymousType3065250744`1' assembly::get_r2() + IL_002f: call instance !0 class '<>f__AnonymousType3065250744`1'::get_A() + IL_0034: call int32 assembly::get_B@4() + IL_0039: newobj instance void class '<>f__AnonymousType3872473412`2'::.ctor(!0, + !1) + IL_003e: stsfld class '<>f__AnonymousType3872473412`2' assembly::r3@4 + IL_0043: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_0048: call instance !0 class '<>f__AnonymousType3872473412`2'::get_A() + IL_004d: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_0052: call instance !1 class '<>f__AnonymousType3872473412`2'::get_B() + IL_0057: newobj instance void class '<>f__AnonymousType3872473412`2'::.ctor(!0, + !1) + IL_005c: stsfld class '<>f__AnonymousType3872473412`2' assembly::r4@5 + IL_0061: nop + IL_0062: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_0067: call instance !1 class '<>f__AnonymousType3872473412`2'::get_B() + IL_006c: stsfld int32 assembly::'B@7-1' + IL_0071: call class '<>f__AnonymousType3065250744`1' assembly::get_r2() + IL_0076: call instance !0 class '<>f__AnonymousType3065250744`1'::get_A() + IL_007b: call int32 assembly::'get_B@7-1'() + IL_0080: newobj instance void class '<>f__AnonymousType3872473412`2'::.ctor(!0, + !1) + IL_0085: stsfld class '<>f__AnonymousType3872473412`2' assembly::'r3\'@7' + IL_008a: nop + IL_008b: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_0090: call instance !0 class '<>f__AnonymousType3872473412`2'::get_A() + IL_0095: call class '<>f__AnonymousType3872473412`2' assembly::get_r1() + IL_009a: call instance !1 class '<>f__AnonymousType3872473412`2'::get_B() + IL_009f: newobj instance void class '<>f__AnonymousType3872473412`2'::.ctor(!0, + !1) + IL_00a4: stsfld class '<>f__AnonymousType3872473412`2' assembly::'r4\'@8' + IL_00a9: ret + } + + .property class '<>f__AnonymousType3872473412`2' + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3872473412`2' assembly::get_r1() + } + .property class '<>f__AnonymousType3065250744`1' + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3065250744`1' assembly::get_r2() + } + .property class '<>f__AnonymousType3872473412`2' + r3() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3872473412`2' assembly::get_r3() + } + .property int32 B@4() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get int32 assembly::get_B@4() + } + .property class '<>f__AnonymousType3872473412`2' + r4() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3872473412`2' assembly::get_r4() + } + .property class '<>f__AnonymousType3872473412`2' + 'r3\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3872473412`2' assembly::'get_r3\''() + } + .property int32 'B@7-1'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get int32 assembly::'get_B@7-1'() + } + .property class '<>f__AnonymousType3872473412`2' + 'r4\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3872473412`2' assembly::'get_r4\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3872473412`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 38 37 32 34 37 33 + 34 31 32 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3872473412`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3872473412`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3872473412`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3872473412`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3872473412`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3872473412`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3872473412`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType4214685905`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType4214685905`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType4214685905`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 34 32 31 34 36 38 35 + 39 30 35 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType4214685905`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType4214685905`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType4214685905`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType4214685905`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType4214685905`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType4214685905`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType4214685905`0'::CompareTo(class '<>f__AnonymousType4214685905`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType4214685905`0' V_0, + class '<>f__AnonymousType4214685905`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType4214685905`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType4214685905`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType4214685905`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType4214685905`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType4214685905`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType4214685905`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4214685905`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType4214685905`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType4214685905`0'::Equals(class '<>f__AnonymousType4214685905`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType4214685905`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType4214685905`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType4214685905`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType4214685905`0'::Equals(class '<>f__AnonymousType4214685905`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3065250744`1'<'j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3065250744`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3065250744`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 30 36 35 32 35 30 + 37 34 34 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_000d: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3065250744`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3065250744`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3065250744`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3065250744`1'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3065250744`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0021 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001f + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + + IL_001f: ldc.i4.1 + IL_0020: ret + + IL_0021: ldarg.1 + IL_0022: brfalse.s IL_0026 + + IL_0024: ldc.i4.m1 + IL_0025: ret + + IL_0026: ldc.i4.0 + IL_0027: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3065250744`1'j__TPar'>::CompareTo(class '<>f__AnonymousType3065250744`1') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3065250744`1'j__TPar'> V_0, + class '<>f__AnonymousType3065250744`1'j__TPar'> V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_002b + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0012: brfalse.s IL_0029 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0021: tail. + IL_0023: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3065250744`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3065250744`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3065250744`1'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0015: tail. + IL_0017: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3065250744`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3065250744`1'j__TPar'>::Equals(class '<>f__AnonymousType3065250744`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3065250744`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001a + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3065250744`1'j__TPar'>::A@ + IL_0012: tail. + IL_0014: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + + IL_001c: ldarg.1 + IL_001d: ldnull + IL_001e: cgt.un + IL_0020: ldc.i4.0 + IL_0021: ceq + IL_0023: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3065250744`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3065250744`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3065250744`1'j__TPar'>::Equals(class '<>f__AnonymousType3065250744`1') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3065250744`1'::get_A() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs new file mode 100644 index 00000000000..a54a7b6b89e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs @@ -0,0 +1,37 @@ +type RefNominalRecd = { A : int } +type [] StructNominalRecd = { A : int } + +let refAnonRecd = {| A = 1 |} +let structAnonRecd = struct {| A = 1 |} +let refNominalRecd : RefNominalRecd = { A = 1 } +let structNominalRecd : StructNominalRecd = { A = 1 } + +module NewAnonRecd = + let ``ref anon src, no explicit target, stays ref`` = {| ...refAnonRecd; B = 2 |} + let ``ref anon src, explicit struct target, becomes struct`` = struct {| ...refAnonRecd; B = 2 |} + let ``ref anon src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| ...refAnonRecd; B = 2 |} + let ``struct anon src, no explicit target, stays struct`` = {| ...structAnonRecd; B = 2 |} + let ``struct anon src, explicit struct target, stays struct`` = struct {| ...structAnonRecd; B = 2 |} + let ``struct anon src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| ...structAnonRecd; B = 2 |} + + let ``ref nominal src, no explicit target, stays ref`` = {| ...refAnonRecd; B = 2 |} + let ``ref nominal src, explicit struct target, becomes struct`` = struct {| ...refAnonRecd; B = 2 |} + let ``ref nominal src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| ...refAnonRecd; B = 2 |} + let ``struct nominal src, no explicit target, stays struct`` = {| ...structAnonRecd; B = 2 |} + let ``struct nominal src, explicit struct target, stays struct`` = struct {| ...structAnonRecd; B = 2 |} + let ``struct nominal src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| ...structAnonRecd; B = 2 |} + +module CopyAndUpdateAnonRecd = + let ``ref anon src, no explicit target, stays ref`` = {| {||} with ...refAnonRecd; B = 2 |} + let ``ref anon src, explicit struct target, becomes struct`` = struct {| {||} with ...refAnonRecd; B = 2 |} + let ``ref anon src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| {||} with ...refAnonRecd; B = 2 |} + let ``struct anon src, no explicit target, stays struct`` = {| {||} with ...structAnonRecd; B = 2 |} + let ``struct anon src, explicit struct target, stays struct`` = struct {| {||} with ...structAnonRecd; B = 2 |} + let ``struct anon src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| {||} with ...structAnonRecd; B = 2 |} + + let ``ref nominal src, no explicit target, stays ref`` = {| {||} with ...refAnonRecd; B = 2 |} + let ``ref nominal src, explicit struct target, becomes struct`` = struct {| {||} with ...refAnonRecd; B = 2 |} + let ``ref nominal src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| {||} with ...refAnonRecd; B = 2 |} + let ``struct nominal src, no explicit target, stays struct`` = {| {||} with ...structAnonRecd; B = 2 |} + let ``struct nominal src, explicit struct target, stays struct`` = struct {| {||} with ...structAnonRecd; B = 2 |} + let ``struct nominal src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| {||} with ...structAnonRecd; B = 2 |} diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs.il.bsl new file mode 100644 index 00000000000..45eae7d4d41 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Anonymous_Structness.fs.il.bsl @@ -0,0 +1,3302 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public RefNominalRecd + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/RefNominalRecd::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2E 45 78 70 72 65 73 73 69 6F + 6E 5F 41 6E 6F 6E 79 6D 6F 75 73 5F 53 74 72 75 + 63 74 6E 65 73 73 2B 52 65 66 4E 6F 6D 69 6E 61 + 6C 52 65 63 64 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/RefNominalRecd::A@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/RefNominalRecd>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/RefNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class [runtime]System.Collections.IComparer V_0, + int32 V_1, + int32 V_2) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0026 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0024 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: stloc.1 + IL_0013: ldarg.1 + IL_0014: ldfld int32 assembly/RefNominalRecd::A@ + IL_0019: stloc.2 + IL_001a: ldloc.1 + IL_001b: ldloc.2 + IL_001c: cgt + IL_001e: ldloc.1 + IL_001f: ldloc.2 + IL_0020: clt + IL_0022: sub + IL_0023: ret + + IL_0024: ldc.i4.1 + IL_0025: ret + + IL_0026: ldarg.1 + IL_0027: brfalse.s IL_002b + + IL_0029: ldc.i4.m1 + IL_002a: ret + + IL_002b: ldc.i4.0 + IL_002c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/RefNominalRecd + IL_0007: callvirt instance int32 assembly/RefNominalRecd::CompareTo(class assembly/RefNominalRecd) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/RefNominalRecd V_0, + int32 V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_002c + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/RefNominalRecd + IL_0010: brfalse.s IL_002a + + IL_0012: ldarg.0 + IL_0013: ldfld int32 assembly/RefNominalRecd::A@ + IL_0018: stloc.1 + IL_0019: ldloc.0 + IL_001a: ldfld int32 assembly/RefNominalRecd::A@ + IL_001f: stloc.2 + IL_0020: ldloc.1 + IL_0021: ldloc.2 + IL_0022: cgt + IL_0024: ldloc.1 + IL_0025: ldloc.2 + IL_0026: clt + IL_0028: sub + IL_0029: ret + + IL_002a: ldc.i4.1 + IL_002b: ret + + IL_002c: ldarg.1 + IL_002d: unbox.any assembly/RefNominalRecd + IL_0032: brfalse.s IL_0036 + + IL_0034: ldc.i4.m1 + IL_0035: ret + + IL_0036: ldc.i4.0 + IL_0037: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.0 + IL_000b: ldfld int32 assembly/RefNominalRecd::A@ + IL_0010: ldloc.0 + IL_0011: ldc.i4.6 + IL_0012: shl + IL_0013: ldloc.0 + IL_0014: ldc.i4.2 + IL_0015: shr + IL_0016: add + IL_0017: add + IL_0018: add + IL_0019: stloc.0 + IL_001a: ldloc.0 + IL_001b: ret + + IL_001c: ldc.i4.0 + IL_001d: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/RefNominalRecd::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/RefNominalRecd obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0017 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0015 + + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/RefNominalRecd::A@ + IL_000c: ldarg.1 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: ceq + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + + IL_0017: ldarg.1 + IL_0018: ldnull + IL_0019: cgt.un + IL_001b: ldc.i4.0 + IL_001c: ceq + IL_001e: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/RefNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/RefNominalRecd::Equals(class assembly/RefNominalRecd, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/RefNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0017 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0015 + + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/RefNominalRecd::A@ + IL_000c: ldarg.1 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: ceq + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + + IL_0017: ldarg.1 + IL_0018: ldnull + IL_0019: cgt.un + IL_001b: ldc.i4.0 + IL_001c: ceq + IL_001e: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/RefNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/RefNominalRecd::Equals(class assembly/RefNominalRecd) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/RefNominalRecd::get_A() + } + } + + .class sequential ansi serializable sealed nested public StructNominalRecd + extends [runtime]System.ValueType + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.StructAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 31 45 78 70 72 65 73 73 69 6F + 6E 5F 41 6E 6F 6E 79 6D 6F 75 73 5F 53 74 72 75 + 63 74 6E 65 73 73 2B 53 74 72 75 63 74 4E 6F 6D + 69 6E 61 6C 52 65 63 64 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld int32 assembly/StructNominalRecd::A@ + IL_0007: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,valuetype assembly/StructNominalRecd>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: ldobj assembly/StructNominalRecd + IL_0015: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_001a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(valuetype assembly/StructNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class [runtime]System.Collections.IComparer V_0, + int32 V_1, + int32 V_2) + IL_0000: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0005: stloc.0 + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/StructNominalRecd::A@ + IL_000c: stloc.1 + IL_000d: ldarga.s obj + IL_000f: ldfld int32 assembly/StructNominalRecd::A@ + IL_0014: stloc.2 + IL_0015: ldloc.1 + IL_0016: ldloc.2 + IL_0017: cgt + IL_0019: ldloc.1 + IL_001a: ldloc.2 + IL_001b: clt + IL_001d: sub + IL_001e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/StructNominalRecd + IL_0007: call instance int32 assembly/StructNominalRecd::CompareTo(valuetype assembly/StructNominalRecd) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype assembly/StructNominalRecd V_0, + int32 V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/StructNominalRecd + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: stloc.1 + IL_000e: ldloca.s V_0 + IL_0010: ldfld int32 assembly/StructNominalRecd::A@ + IL_0015: stloc.2 + IL_0016: ldloc.1 + IL_0017: ldloc.2 + IL_0018: cgt + IL_001a: ldloc.1 + IL_001b: ldloc.2 + IL_001c: clt + IL_001e: sub + IL_001f: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4 0x9e3779b9 + IL_0007: ldarg.0 + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: ldloc.0 + IL_000e: ldc.i4.6 + IL_000f: shl + IL_0010: ldloc.0 + IL_0011: ldc.i4.2 + IL_0012: shr + IL_0013: add + IL_0014: add + IL_0015: add + IL_0016: stloc.0 + IL_0017: ldloc.0 + IL_0018: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: call instance int32 assembly/StructNominalRecd::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(valuetype assembly/StructNominalRecd obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ldarga.s obj + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: ceq + IL_000f: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype assembly/StructNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/StructNominalRecd + IL_0006: brfalse.s IL_001f + + IL_0008: ldarg.1 + IL_0009: unbox.any assembly/StructNominalRecd + IL_000e: stloc.0 + IL_000f: ldarg.0 + IL_0010: ldfld int32 assembly/StructNominalRecd::A@ + IL_0015: ldloca.s V_0 + IL_0017: ldfld int32 assembly/StructNominalRecd::A@ + IL_001c: ceq + IL_001e: ret + + IL_001f: ldc.i4.0 + IL_0020: ret + } + + .method public hidebysig virtual final instance bool Equals(valuetype assembly/StructNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ldarga.s obj + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: ceq + IL_000f: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype assembly/StructNominalRecd V_0, + valuetype assembly/StructNominalRecd V_1) + IL_0000: ldarg.1 + IL_0001: isinst assembly/StructNominalRecd + IL_0006: brfalse.s IL_0021 + + IL_0008: ldarg.1 + IL_0009: unbox.any assembly/StructNominalRecd + IL_000e: stloc.0 + IL_000f: ldloc.0 + IL_0010: stloc.1 + IL_0011: ldarg.0 + IL_0012: ldfld int32 assembly/StructNominalRecd::A@ + IL_0017: ldloca.s V_1 + IL_0019: ldfld int32 assembly/StructNominalRecd::A@ + IL_001e: ceq + IL_0020: ret + + IL_0021: ldc.i4.0 + IL_0022: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/StructNominalRecd::get_A() + } + } + + .class abstract auto ansi sealed nested public CopyAndUpdateAnonRecd + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'ref anon src, no explicit target, stays ref@25-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref anon src, explicit struct target, becomes struct@26-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref anon src, inferred struct target, becomes struct@27-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'struct anon src, no explicit target, stays struct@28-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@28-12' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@28-13' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct anon src, explicit struct target, stays struct@29-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@29-14' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@29-15' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct anon src, inferred struct target, stays struct@30-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@30-16' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@30-17' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'ref nominal src, no explicit target, stays ref@32-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref nominal src, explicit struct target, becomes struct@33-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref nominal src, inferred struct target, becomes struct@34-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'struct nominal src, no explicit target, stays struct@35-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@35-18' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@35-19' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct nominal src, explicit struct target, stays struct@36-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@36-20' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@36-21' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct nominal src, inferred struct target, stays struct@37-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@37-22' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@37-23' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_ref anon src, no explicit target, stays ref'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, no explicit target, stays ref@25-1' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref anon src, explicit struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, explicit struct target, becomes struct@26-1' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref anon src, inferred struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, inferred struct target, becomes struct@27-1' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_struct anon src, no explicit target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, no explicit target, stays struct@28-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@28-12'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@28-12' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@28-13'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@28-13' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct anon src, explicit struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, explicit struct target, stays struct@29-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@29-14'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@29-14' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@29-15'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@29-15' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct anon src, inferred struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, inferred struct target, stays struct@30-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@30-16'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@30-16' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@30-17'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@30-17' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_ref nominal src, no explicit target, stays ref'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, no explicit target, stays ref@32-1' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref nominal src, explicit struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, explicit struct target, becomes struct@33-1' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref nominal src, inferred struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, inferred struct target, becomes struct@34-1' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_struct nominal src, no explicit target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, no explicit target, stays struct@35-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@35-18'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@35-18' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@35-19'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@35-19' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct nominal src, explicit struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, explicit struct target, stays struct@36-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@36-20'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@36-20' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@36-21'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@36-21' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct nominal src, inferred struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, inferred struct target, stays struct@37-1' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@37-22'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@37-22' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@37-23'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@37-23' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: nop + IL_0001: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_0006: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_000b: ldc.i4.2 + IL_000c: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_0011: stsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, no explicit target, stays ref@25-1' + IL_0016: nop + IL_0017: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_001c: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_0021: ldc.i4.2 + IL_0022: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_0027: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, explicit struct target, becomes struct@26-1' + IL_002c: nop + IL_002d: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_0032: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_0037: ldc.i4.2 + IL_0038: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_003d: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref anon src, inferred struct target, becomes struct@27-1' + IL_0042: nop + IL_0043: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0048: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@28-12' + IL_004d: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@28-12'() + IL_0052: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@28-13' + IL_0057: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@28-13' + IL_005c: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0061: ldc.i4.2 + IL_0062: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_0067: stsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, no explicit target, stays struct@28-1' + IL_006c: nop + IL_006d: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0072: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@29-14' + IL_0077: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@29-14'() + IL_007c: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@29-15' + IL_0081: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@29-15' + IL_0086: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_008b: ldc.i4.2 + IL_008c: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_0091: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, explicit struct target, stays struct@29-1' + IL_0096: nop + IL_0097: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_009c: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@30-16' + IL_00a1: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@30-16'() + IL_00a6: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@30-17' + IL_00ab: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@30-17' + IL_00b0: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_00b5: ldc.i4.2 + IL_00b6: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00bb: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct anon src, inferred struct target, stays struct@30-1' + IL_00c0: nop + IL_00c1: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00c6: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00cb: ldc.i4.2 + IL_00cc: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_00d1: stsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, no explicit target, stays ref@32-1' + IL_00d6: nop + IL_00d7: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00dc: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00e1: ldc.i4.2 + IL_00e2: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00e7: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, explicit struct target, becomes struct@33-1' + IL_00ec: nop + IL_00ed: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00f2: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00f7: ldc.i4.2 + IL_00f8: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00fd: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'ref nominal src, inferred struct target, becomes struct@34-1' + IL_0102: nop + IL_0103: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0108: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@35-18' + IL_010d: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@35-18'() + IL_0112: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@35-19' + IL_0117: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@35-19' + IL_011c: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0121: ldc.i4.2 + IL_0122: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_0127: stsfld class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, no explicit target, stays struct@35-1' + IL_012c: nop + IL_012d: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0132: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@36-20' + IL_0137: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@36-20'() + IL_013c: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@36-21' + IL_0141: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@36-21' + IL_0146: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_014b: ldc.i4.2 + IL_014c: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_0151: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, explicit struct target, stays struct@36-1' + IL_0156: nop + IL_0157: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_015c: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@37-22' + IL_0161: call valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@37-22'() + IL_0166: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@37-23' + IL_016b: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'copyOfStruct@37-23' + IL_0170: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0175: ldc.i4.2 + IL_0176: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_017b: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'struct nominal src, inferred struct target, stays struct@37-1' + IL_0180: ret + } + + .property class '<>f__AnonymousType3357665219`2' + 'ref anon src, no explicit target, stays ref'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'get_ref anon src, no explicit target, stays ref'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref anon src, explicit struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_ref anon src, explicit struct target, becomes struct'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref anon src, inferred struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_ref anon src, inferred struct target, becomes struct'() + } + .property class '<>f__AnonymousType3357665219`2' + 'struct anon src, no explicit target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'get_struct anon src, no explicit target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@28-12'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@28-12'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@28-13'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@28-13'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct anon src, explicit struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_struct anon src, explicit struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@29-14'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@29-14'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@29-15'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@29-15'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct anon src, inferred struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_struct anon src, inferred struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@30-16'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@30-16'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@30-17'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@30-17'() + } + .property class '<>f__AnonymousType3357665219`2' + 'ref nominal src, no explicit target, stays ref'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'get_ref nominal src, no explicit target, stays ref'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref nominal src, explicit struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_ref nominal src, explicit struct target, becomes struct'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref nominal src, inferred struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_ref nominal src, inferred struct target, becomes struct'() + } + .property class '<>f__AnonymousType3357665219`2' + 'struct nominal src, no explicit target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/CopyAndUpdateAnonRecd::'get_struct nominal src, no explicit target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@35-18'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@35-18'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@35-19'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@35-19'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct nominal src, explicit struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_struct nominal src, explicit struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@36-20'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@36-20'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@36-21'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@36-21'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct nominal src, inferred struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/CopyAndUpdateAnonRecd::'get_struct nominal src, inferred struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@37-22'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@37-22'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@37-23'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/CopyAndUpdateAnonRecd::'get_copyOfStruct@37-23'() + } + } + + .class abstract auto ansi sealed nested public NewAnonRecd + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'ref anon src, no explicit target, stays ref@10' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref anon src, explicit struct target, becomes struct@11' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref anon src, inferred struct target, becomes struct@12' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'struct anon src, no explicit target, stays struct@13' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' copyOfStruct@13 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@13-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct anon src, explicit struct target, stays struct@14' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@14-2' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@14-3' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct anon src, inferred struct target, stays struct@15' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@15-4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@15-5' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'ref nominal src, no explicit target, stays ref@17' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref nominal src, explicit struct target, becomes struct@18' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'ref nominal src, inferred struct target, becomes struct@19' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3357665219`2' 'struct nominal src, no explicit target, stays struct@20' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@20-6' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@20-7' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct nominal src, explicit struct target, stays struct@21' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@21-8' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@21-9' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10001789011089`2' 'struct nominal src, inferred struct target, stays struct@22' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@22-10' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' 'copyOfStruct@22-11' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_ref anon src, no explicit target, stays ref'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'ref anon src, no explicit target, stays ref@10' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref anon src, explicit struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref anon src, explicit struct target, becomes struct@11' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref anon src, inferred struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref anon src, inferred struct target, becomes struct@12' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_struct anon src, no explicit target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'struct anon src, no explicit target, stays struct@13' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' get_copyOfStruct@13() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::copyOfStruct@13 + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@13-1'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@13-1' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct anon src, explicit struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct anon src, explicit struct target, stays struct@14' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@14-2'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@14-2' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@14-3'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@14-3' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct anon src, inferred struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct anon src, inferred struct target, stays struct@15' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@15-4'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@15-4' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@15-5'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@15-5' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_ref nominal src, no explicit target, stays ref'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'ref nominal src, no explicit target, stays ref@17' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref nominal src, explicit struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref nominal src, explicit struct target, becomes struct@18' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_ref nominal src, inferred struct target, becomes struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref nominal src, inferred struct target, becomes struct@19' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3357665219`2' 'get_struct nominal src, no explicit target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'struct nominal src, no explicit target, stays struct@20' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@20-6'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@20-6' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@20-7'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@20-7' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct nominal src, explicit struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct nominal src, explicit struct target, stays struct@21' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@21-8'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@21-8' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@21-9'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@21-9' + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10001789011089`2' 'get_struct nominal src, inferred struct target, stays struct'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct nominal src, inferred struct target, stays struct@22' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@22-10'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@22-10' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType10002306269156`1' 'get_copyOfStruct@22-11'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@22-11' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_0005: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_000a: ldc.i4.2 + IL_000b: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_0010: stsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'ref anon src, no explicit target, stays ref@10' + IL_0015: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_001a: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_001f: ldc.i4.2 + IL_0020: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_0025: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref anon src, explicit struct target, becomes struct@11' + IL_002a: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_002f: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_0034: ldc.i4.2 + IL_0035: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_003a: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref anon src, inferred struct target, becomes struct@12' + IL_003f: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0044: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::copyOfStruct@13 + IL_0049: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::get_copyOfStruct@13() + IL_004e: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@13-1' + IL_0053: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@13-1' + IL_0058: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_005d: ldc.i4.2 + IL_005e: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_0063: stsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'struct anon src, no explicit target, stays struct@13' + IL_0068: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_006d: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@14-2' + IL_0072: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@14-2'() + IL_0077: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@14-3' + IL_007c: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@14-3' + IL_0081: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0086: ldc.i4.2 + IL_0087: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_008c: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct anon src, explicit struct target, stays struct@14' + IL_0091: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0096: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@15-4' + IL_009b: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@15-4'() + IL_00a0: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@15-5' + IL_00a5: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@15-5' + IL_00aa: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_00af: ldc.i4.2 + IL_00b0: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00b5: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct anon src, inferred struct target, stays struct@15' + IL_00ba: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00bf: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00c4: ldc.i4.2 + IL_00c5: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_00ca: stsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'ref nominal src, no explicit target, stays ref@17' + IL_00cf: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00d4: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00d9: ldc.i4.2 + IL_00da: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00df: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref nominal src, explicit struct target, becomes struct@18' + IL_00e4: call class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + IL_00e9: call instance !0 class '<>f__AnonymousType3348076434`1'::get_A() + IL_00ee: ldc.i4.2 + IL_00ef: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_00f4: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'ref nominal src, inferred struct target, becomes struct@19' + IL_00f9: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_00fe: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@20-6' + IL_0103: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@20-6'() + IL_0108: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@20-7' + IL_010d: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@20-7' + IL_0112: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0117: ldc.i4.2 + IL_0118: newobj instance void class '<>f__AnonymousType3357665219`2'::.ctor(!0, + !1) + IL_011d: stsfld class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'struct nominal src, no explicit target, stays struct@20' + IL_0122: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0127: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@21-8' + IL_012c: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@21-8'() + IL_0131: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@21-9' + IL_0136: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@21-9' + IL_013b: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0140: ldc.i4.2 + IL_0141: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_0146: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct nominal src, explicit struct target, stays struct@21' + IL_014b: call valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + IL_0150: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@22-10' + IL_0155: call valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@22-10'() + IL_015a: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@22-11' + IL_015f: ldsflda valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'copyOfStruct@22-11' + IL_0164: call instance !0 valuetype '<>f__AnonymousType10002306269156`1'::get_A() + IL_0169: ldc.i4.2 + IL_016a: newobj instance void valuetype '<>f__AnonymousType10001789011089`2'::.ctor(!0, + !1) + IL_016f: stsfld valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'struct nominal src, inferred struct target, stays struct@22' + IL_0174: ret + } + + .property class '<>f__AnonymousType3357665219`2' + 'ref anon src, no explicit target, stays ref'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'get_ref anon src, no explicit target, stays ref'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref anon src, explicit struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_ref anon src, explicit struct target, becomes struct'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref anon src, inferred struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_ref anon src, inferred struct target, becomes struct'() + } + .property class '<>f__AnonymousType3357665219`2' + 'struct anon src, no explicit target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'get_struct anon src, no explicit target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + copyOfStruct@13() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::get_copyOfStruct@13() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@13-1'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@13-1'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct anon src, explicit struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_struct anon src, explicit struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@14-2'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@14-2'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@14-3'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@14-3'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct anon src, inferred struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_struct anon src, inferred struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@15-4'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@15-4'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@15-5'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@15-5'() + } + .property class '<>f__AnonymousType3357665219`2' + 'ref nominal src, no explicit target, stays ref'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'get_ref nominal src, no explicit target, stays ref'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref nominal src, explicit struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_ref nominal src, explicit struct target, becomes struct'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'ref nominal src, inferred struct target, becomes struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_ref nominal src, inferred struct target, becomes struct'() + } + .property class '<>f__AnonymousType3357665219`2' + 'struct nominal src, no explicit target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3357665219`2' assembly/NewAnonRecd::'get_struct nominal src, no explicit target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@20-6'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@20-6'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@20-7'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@20-7'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct nominal src, explicit struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_struct nominal src, explicit struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@21-8'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@21-8'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@21-9'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@21-9'() + } + .property valuetype '<>f__AnonymousType10001789011089`2' + 'struct nominal src, inferred struct target, stays struct'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10001789011089`2' assembly/NewAnonRecd::'get_struct nominal src, inferred struct target, stays struct'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@22-10'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@22-10'() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + 'copyOfStruct@22-11'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly/NewAnonRecd::'get_copyOfStruct@22-11'() + } + } + + .field static assembly class '<>f__AnonymousType3348076434`1' refAnonRecd@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType10002306269156`1' structAnonRecd@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd refNominalRecd@6 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd structNominalRecd@7 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3348076434`1' get_refAnonRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3348076434`1' assembly::refAnonRecd@4 + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType10002306269156`1' get_structAnonRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType10002306269156`1' assembly::structAnonRecd@5 + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd get_refNominalRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::refNominalRecd@6 + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd get_structNominalRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::structNominalRecd@7 + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.1 + IL_0001: newobj instance void class '<>f__AnonymousType3348076434`1'::.ctor(!0) + IL_0006: stsfld class '<>f__AnonymousType3348076434`1' assembly::refAnonRecd@4 + IL_000b: ldc.i4.1 + IL_000c: newobj instance void valuetype '<>f__AnonymousType10002306269156`1'::.ctor(!0) + IL_0011: stsfld valuetype '<>f__AnonymousType10002306269156`1' assembly::structAnonRecd@5 + IL_0016: ldc.i4.1 + IL_0017: newobj instance void assembly/RefNominalRecd::.ctor(int32) + IL_001c: stsfld class assembly/RefNominalRecd assembly::refNominalRecd@6 + IL_0021: ldc.i4.1 + IL_0022: newobj instance void assembly/StructNominalRecd::.ctor(int32) + IL_0027: stsfld valuetype assembly/StructNominalRecd assembly::structNominalRecd@7 + IL_002c: call void assembly/NewAnonRecd::staticInitialization@() + IL_0031: call void assembly/CopyAndUpdateAnonRecd::staticInitialization@() + IL_0036: ret + } + + .property class '<>f__AnonymousType3348076434`1' + refAnonRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3348076434`1' assembly::get_refAnonRecd() + } + .property valuetype '<>f__AnonymousType10002306269156`1' + structAnonRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType10002306269156`1' assembly::get_structAnonRecd() + } + .property class assembly/RefNominalRecd + refNominalRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::get_refNominalRecd() + } + .property valuetype assembly/StructNominalRecd + structNominalRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::get_structNominalRecd() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3348076434`1'<'j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3348076434`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3348076434`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 33 34 38 30 37 36 + 34 33 34 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_000d: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3348076434`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3348076434`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3348076434`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3348076434`1'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3348076434`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0021 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001f + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + + IL_001f: ldc.i4.1 + IL_0020: ret + + IL_0021: ldarg.1 + IL_0022: brfalse.s IL_0026 + + IL_0024: ldc.i4.m1 + IL_0025: ret + + IL_0026: ldc.i4.0 + IL_0027: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3348076434`1'j__TPar'>::CompareTo(class '<>f__AnonymousType3348076434`1') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3348076434`1'j__TPar'> V_0, + class '<>f__AnonymousType3348076434`1'j__TPar'> V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_002b + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0012: brfalse.s IL_0029 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0021: tail. + IL_0023: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3348076434`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3348076434`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3348076434`1'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0015: tail. + IL_0017: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3348076434`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3348076434`1'j__TPar'>::Equals(class '<>f__AnonymousType3348076434`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3348076434`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001a + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3348076434`1'j__TPar'>::A@ + IL_0012: tail. + IL_0014: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + + IL_001c: ldarg.1 + IL_001d: ldnull + IL_001e: cgt.un + IL_0020: ldc.i4.0 + IL_0021: ceq + IL_0023: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3348076434`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3348076434`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3348076434`1'j__TPar'>::Equals(class '<>f__AnonymousType3348076434`1') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3348076434`1'::get_A() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3357665219`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 33 35 37 36 36 35 + 32 31 39 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3357665219`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3357665219`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3357665219`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3357665219`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3357665219`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3357665219`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3357665219`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType10002306269156`1'<'j__TPar'> + extends [runtime]System.ValueType + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType10002306269156`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType10002306269156`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 22 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 30 30 30 32 33 30 + 36 32 36 39 31 35 36 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0007: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType10002306269156`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType10002306269156`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: ldobj valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> + IL_0015: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType10002306269156`1'j__TPar'>,string>::Invoke(!0) + IL_001a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0008: ldarg.0 + IL_0009: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_000e: ldloc.0 + IL_000f: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0014: tail. + IL_0016: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001b: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> + IL_0007: call instance int32 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::CompareTo(valuetype '<>f__AnonymousType10002306269156`1') + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> V_0, + valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>& V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloca.s V_0 + IL_0009: stloc.1 + IL_000a: ldarg.2 + IL_000b: ldarg.0 + IL_000c: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0011: ldloc.1 + IL_0012: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4 0x9e3779b9 + IL_0007: ldarg.1 + IL_0008: ldarg.0 + IL_0009: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_000e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0013: ldloc.0 + IL_0014: ldc.i4.6 + IL_0015: shl + IL_0016: ldloc.0 + IL_0017: ldc.i4.2 + IL_0018: shr + IL_0019: add + IL_001a: add + IL_001b: add + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: call instance int32 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.2 + IL_0004: ldarg.0 + IL_0005: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_000a: ldloc.0 + IL_000b: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0010: tail. + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0017: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType10002306269156`1'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_001a + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType10002306269156`1'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: ldarg.2 + IL_0014: call instance bool valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::Equals(valuetype '<>f__AnonymousType10002306269156`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + } + + .method public hidebysig virtual final instance bool Equals(valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.0 + IL_0004: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_0009: ldloc.0 + IL_000a: ldfld !0 valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::A@ + IL_000f: tail. + IL_0011: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType10002306269156`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType10002306269156`1'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_0019 + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType10002306269156`1'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: call instance bool valuetype '<>f__AnonymousType10002306269156`1'j__TPar'>::Equals(valuetype '<>f__AnonymousType10002306269156`1') + IL_0018: ret + + IL_0019: ldc.i4.0 + IL_001a: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType10002306269156`1'::get_A() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType10001789011089`2'<'j__TPar','j__TPar'> + extends [runtime]System.ValueType + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 22 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 30 30 30 31 37 38 + 39 30 31 31 30 38 39 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_000e: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: ldobj valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> + IL_0015: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_001a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>& V_0, + int32 V_1) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0008: ldarg.0 + IL_0009: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_000e: ldloc.0 + IL_000f: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0014: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0019: stloc.1 + IL_001a: ldloc.1 + IL_001b: ldc.i4.0 + IL_001c: bge.s IL_0020 + + IL_001e: ldloc.1 + IL_001f: ret + + IL_0020: ldloc.1 + IL_0021: ldc.i4.0 + IL_0022: ble.s IL_0026 + + IL_0024: ldloc.1 + IL_0025: ret + + IL_0026: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002b: ldarg.0 + IL_002c: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0031: ldloc.0 + IL_0032: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0037: tail. + IL_0039: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> + IL_0007: call instance int32 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::CompareTo(valuetype '<>f__AnonymousType10001789011089`2') + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> V_0, + valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>& V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloca.s V_0 + IL_0009: stloc.1 + IL_000a: ldarg.2 + IL_000b: ldarg.0 + IL_000c: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldloc.1 + IL_0012: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.2 + IL_001d: ldloc.2 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.2 + IL_0022: ret + + IL_0023: ldloc.2 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.2 + IL_0028: ret + + IL_0029: ldarg.2 + IL_002a: ldarg.0 + IL_002b: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0030: ldloc.1 + IL_0031: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0036: tail. + IL_0038: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003d: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4 0x9e3779b9 + IL_0007: ldarg.1 + IL_0008: ldarg.0 + IL_0009: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_000e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0013: ldloc.0 + IL_0014: ldc.i4.6 + IL_0015: shl + IL_0016: ldloc.0 + IL_0017: ldc.i4.2 + IL_0018: shr + IL_0019: add + IL_001a: add + IL_001b: add + IL_001c: stloc.0 + IL_001d: ldc.i4 0x9e3779b9 + IL_0022: ldarg.1 + IL_0023: ldarg.0 + IL_0024: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0029: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_002e: ldloc.0 + IL_002f: ldc.i4.6 + IL_0030: shl + IL_0031: ldloc.0 + IL_0032: ldc.i4.2 + IL_0033: shr + IL_0034: add + IL_0035: add + IL_0036: add + IL_0037: stloc.0 + IL_0038: ldloc.0 + IL_0039: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: call instance int32 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.2 + IL_0004: ldarg.0 + IL_0005: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_000a: ldloc.0 + IL_000b: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0010: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0015: brfalse.s IL_002c + + IL_0017: ldarg.2 + IL_0018: ldarg.0 + IL_0019: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_001e: ldloc.0 + IL_001f: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0024: tail. + IL_0026: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002b: ret + + IL_002c: ldc.i4.0 + IL_002d: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_001a + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: ldarg.2 + IL_0014: call instance bool valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::Equals(valuetype '<>f__AnonymousType10001789011089`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + } + + .method public hidebysig virtual final instance bool Equals(valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.0 + IL_0004: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_0009: ldloc.0 + IL_000a: ldfld !0 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::A@ + IL_000f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0014: brfalse.s IL_002a + + IL_0016: ldarg.0 + IL_0017: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_001c: ldloc.0 + IL_001d: ldfld !1 valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::B@ + IL_0022: tail. + IL_0024: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0029: ret + + IL_002a: ldc.i4.0 + IL_002b: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_0019 + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: call instance bool valuetype '<>f__AnonymousType10001789011089`2'j__TPar',!'j__TPar'>::Equals(valuetype '<>f__AnonymousType10001789011089`2') + IL_0018: ret + + IL_0019: ldc.i4.0 + IL_001a: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType10001789011089`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType10001789011089`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType97009502`0' + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType97009502`0'>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType97009502`0'> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1C 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 39 37 30 30 39 35 30 + 32 60 30 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType97009502`0',string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType97009502`0'>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType97009502`0',string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType97009502`0',string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType97009502`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.0 + IL_0007: ret + + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: brfalse.s IL_000f + + IL_000d: ldc.i4.m1 + IL_000e: ret + + IL_000f: ldc.i4.0 + IL_0010: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any '<>f__AnonymousType97009502`0' + IL_0007: tail. + IL_0009: callvirt instance int32 '<>f__AnonymousType97009502`0'::CompareTo(class '<>f__AnonymousType97009502`0') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (class '<>f__AnonymousType97009502`0' V_0, + class '<>f__AnonymousType97009502`0' V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any '<>f__AnonymousType97009502`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_0018 + + IL_000c: ldarg.1 + IL_000d: unbox.any '<>f__AnonymousType97009502`0' + IL_0012: brfalse.s IL_0016 + + IL_0014: ldc.i4.0 + IL_0015: ret + + IL_0016: ldc.i4.1 + IL_0017: ret + + IL_0018: ldarg.1 + IL_0019: unbox.any '<>f__AnonymousType97009502`0' + IL_001e: brfalse.s IL_0022 + + IL_0020: ldc.i4.m1 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 3 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0007 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldloc.0 + IL_0006: ret + + IL_0007: ldc.i4.0 + IL_0008: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 '<>f__AnonymousType97009502`0'::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType97009502`0' obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType97009502`0' V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_000a + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldc.i4.1 + IL_0009: ret + + IL_000a: ldc.i4.0 + IL_000b: ret + + IL_000c: ldarg.1 + IL_000d: ldnull + IL_000e: cgt.un + IL_0010: ldc.i4.0 + IL_0011: ceq + IL_0013: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType97009502`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType97009502`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool '<>f__AnonymousType97009502`0'::Equals(class '<>f__AnonymousType97009502`0', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType97009502`0' obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_000a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0008 + + IL_0006: ldc.i4.1 + IL_0007: ret + + IL_0008: ldc.i4.0 + IL_0009: ret + + IL_000a: ldarg.1 + IL_000b: ldnull + IL_000c: cgt.un + IL_000e: ldc.i4.0 + IL_000f: ceq + IL_0011: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType97009502`0' V_0) + IL_0000: ldarg.1 + IL_0001: isinst '<>f__AnonymousType97009502`0' + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool '<>f__AnonymousType97009502`0'::Equals(class '<>f__AnonymousType97009502`0') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs new file mode 100644 index 00000000000..894c4b0a063 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs @@ -0,0 +1,14 @@ +type T = + | T of int + static member op_Implicit (T t) = U t + +and U = + | U of int + +type R1 = { A : T } +type R2 = { A : U } + +#nowarn 3391 + +let r1 : R1 = { A = T 3 } +let r2 : R2 = { ...r1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs.il.bsl new file mode 100644 index 00000000000..70cc83ce351 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_CoercionsApplied.fs.il.bsl @@ -0,0 +1,1558 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto autochar serializable sealed nested public beforefieldinit T + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [runtime]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C + 61 79 28 29 2C 6E 71 7D 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) + .field assembly initonly int32 item + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static class assembly/T NewT(int32 item) cil managed + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: newobj instance void assembly/T::.ctor(int32) + IL_0006: ret + } + + .method assembly specialname rtspecialname instance void .ctor(int32 item) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 25 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 43 6F 65 72 63 69 + 6F 6E 73 41 70 70 6C 69 65 64 2B 54 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/T::item + IL_000d: ret + } + + .method public hidebysig instance int32 get_Item() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/T::item + IL_0006: ret + } + + .method public hidebysig instance int32 get_Tag() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: pop + IL_0002: ldc.i4.0 + IL_0003: ret + } + + .method assembly hidebysig specialname instance object __DebugDisplay() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+0.8A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/T>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/T obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/T V_0, + class assembly/T V_1, + class [runtime]System.Collections.IComparer V_2, + int32 V_3, + int32 V_4) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_002f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002d + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: stloc.2 + IL_0012: ldloc.0 + IL_0013: ldfld int32 assembly/T::item + IL_0018: stloc.3 + IL_0019: ldloc.1 + IL_001a: ldfld int32 assembly/T::item + IL_001f: stloc.s V_4 + IL_0021: ldloc.3 + IL_0022: ldloc.s V_4 + IL_0024: cgt + IL_0026: ldloc.3 + IL_0027: ldloc.s V_4 + IL_0029: clt + IL_002b: sub + IL_002c: ret + + IL_002d: ldc.i4.1 + IL_002e: ret + + IL_002f: ldarg.1 + IL_0030: brfalse.s IL_0034 + + IL_0032: ldc.i4.m1 + IL_0033: ret + + IL_0034: ldc.i4.0 + IL_0035: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/T + IL_0007: callvirt instance int32 assembly/T::CompareTo(class assembly/T) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/T V_0, + class assembly/T V_1, + class assembly/T V_2, + int32 V_3, + int32 V_4) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/T + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_0035 + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/T + IL_0010: brfalse.s IL_0033 + + IL_0012: ldarg.0 + IL_0013: pop + IL_0014: ldarg.0 + IL_0015: stloc.1 + IL_0016: ldloc.0 + IL_0017: stloc.2 + IL_0018: ldloc.1 + IL_0019: ldfld int32 assembly/T::item + IL_001e: stloc.3 + IL_001f: ldloc.2 + IL_0020: ldfld int32 assembly/T::item + IL_0025: stloc.s V_4 + IL_0027: ldloc.3 + IL_0028: ldloc.s V_4 + IL_002a: cgt + IL_002c: ldloc.3 + IL_002d: ldloc.s V_4 + IL_002f: clt + IL_0031: sub + IL_0032: ret + + IL_0033: ldc.i4.1 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: unbox.any assembly/T + IL_003b: brfalse.s IL_003f + + IL_003d: ldc.i4.m1 + IL_003e: ret + + IL_003f: ldc.i4.0 + IL_0040: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0, + class assembly/T V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldarg.0 + IL_0006: pop + IL_0007: ldarg.0 + IL_0008: stloc.1 + IL_0009: ldc.i4.0 + IL_000a: stloc.0 + IL_000b: ldc.i4 0x9e3779b9 + IL_0010: ldloc.1 + IL_0011: ldfld int32 assembly/T::item + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/T::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/T obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/T V_0, + class assembly/T V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001d + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001b + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: ldloc.0 + IL_000d: ldfld int32 assembly/T::item + IL_0012: ldloc.1 + IL_0013: ldfld int32 assembly/T::item + IL_0018: ceq + IL_001a: ret + + IL_001b: ldc.i4.0 + IL_001c: ret + + IL_001d: ldarg.1 + IL_001e: ldnull + IL_001f: cgt.un + IL_0021: ldc.i4.0 + IL_0022: ceq + IL_0024: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/T V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/T + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/T::Equals(class assembly/T, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public specialname static class assembly/U op_Implicit(class assembly/T _arg1) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/T::item + IL_0006: call class assembly/U assembly/U::NewU(int32) + IL_000b: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/T obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/T V_0, + class assembly/T V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001d + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001b + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: ldloc.0 + IL_000d: ldfld int32 assembly/T::item + IL_0012: ldloc.1 + IL_0013: ldfld int32 assembly/T::item + IL_0018: ceq + IL_001a: ret + + IL_001b: ldc.i4.0 + IL_001c: ret + + IL_001d: ldarg.1 + IL_001e: ldnull + IL_001f: cgt.un + IL_0021: ldc.i4.0 + IL_0022: ceq + IL_0024: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/T V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/T + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/T::Equals(class assembly/T) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance int32 Tag() + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .get instance int32 assembly/T::get_Tag() + } + .property instance int32 Item() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .get instance int32 assembly/T::get_Item() + } + } + + .class auto autochar serializable sealed nested public beforefieldinit U + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [runtime]System.Diagnostics.DebuggerDisplayAttribute::.ctor(string) = ( 01 00 15 7B 5F 5F 44 65 62 75 67 44 69 73 70 6C + 61 79 28 29 2C 6E 71 7D 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 01 00 00 00 00 00 ) + .field assembly initonly int32 item + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static class assembly/U NewU(int32 item) cil managed + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 08 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: newobj instance void assembly/U::.ctor(int32) + IL_0006: ret + } + + .method assembly specialname rtspecialname instance void .ctor(int32 item) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 25 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 43 6F 65 72 63 69 + 6F 6E 73 41 70 70 6C 69 65 64 2B 55 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/U::item + IL_000d: ret + } + + .method public hidebysig instance int32 get_Item() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/U::item + IL_0006: ret + } + + .method public hidebysig instance int32 get_Tag() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: pop + IL_0002: ldc.i4.0 + IL_0003: ret + } + + .method assembly hidebysig specialname instance object __DebugDisplay() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+0.8A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,string>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/U>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/U obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/U V_0, + class assembly/U V_1, + class [runtime]System.Collections.IComparer V_2, + int32 V_3, + int32 V_4) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_002f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002d + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0011: stloc.2 + IL_0012: ldloc.0 + IL_0013: ldfld int32 assembly/U::item + IL_0018: stloc.3 + IL_0019: ldloc.1 + IL_001a: ldfld int32 assembly/U::item + IL_001f: stloc.s V_4 + IL_0021: ldloc.3 + IL_0022: ldloc.s V_4 + IL_0024: cgt + IL_0026: ldloc.3 + IL_0027: ldloc.s V_4 + IL_0029: clt + IL_002b: sub + IL_002c: ret + + IL_002d: ldc.i4.1 + IL_002e: ret + + IL_002f: ldarg.1 + IL_0030: brfalse.s IL_0034 + + IL_0032: ldc.i4.m1 + IL_0033: ret + + IL_0034: ldc.i4.0 + IL_0035: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/U + IL_0007: callvirt instance int32 assembly/U::CompareTo(class assembly/U) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/U V_0, + class assembly/U V_1, + class assembly/U V_2, + int32 V_3, + int32 V_4) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/U + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_0035 + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/U + IL_0010: brfalse.s IL_0033 + + IL_0012: ldarg.0 + IL_0013: pop + IL_0014: ldarg.0 + IL_0015: stloc.1 + IL_0016: ldloc.0 + IL_0017: stloc.2 + IL_0018: ldloc.1 + IL_0019: ldfld int32 assembly/U::item + IL_001e: stloc.3 + IL_001f: ldloc.2 + IL_0020: ldfld int32 assembly/U::item + IL_0025: stloc.s V_4 + IL_0027: ldloc.3 + IL_0028: ldloc.s V_4 + IL_002a: cgt + IL_002c: ldloc.3 + IL_002d: ldloc.s V_4 + IL_002f: clt + IL_0031: sub + IL_0032: ret + + IL_0033: ldc.i4.1 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: unbox.any assembly/U + IL_003b: brfalse.s IL_003f + + IL_003d: ldc.i4.m1 + IL_003e: ret + + IL_003f: ldc.i4.0 + IL_0040: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0, + class assembly/U V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldarg.0 + IL_0006: pop + IL_0007: ldarg.0 + IL_0008: stloc.1 + IL_0009: ldc.i4.0 + IL_000a: stloc.0 + IL_000b: ldc.i4 0x9e3779b9 + IL_0010: ldloc.1 + IL_0011: ldfld int32 assembly/U::item + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/U::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/U obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/U V_0, + class assembly/U V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001d + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001b + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: ldloc.0 + IL_000d: ldfld int32 assembly/U::item + IL_0012: ldloc.1 + IL_0013: ldfld int32 assembly/U::item + IL_0018: ceq + IL_001a: ret + + IL_001b: ldc.i4.0 + IL_001c: ret + + IL_001d: ldarg.1 + IL_001e: ldnull + IL_001f: cgt.un + IL_0021: ldc.i4.0 + IL_0022: ceq + IL_0024: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/U V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/U + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/U::Equals(class assembly/U, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/U obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/U V_0, + class assembly/U V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001d + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001b + + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: stloc.0 + IL_000a: ldarg.1 + IL_000b: stloc.1 + IL_000c: ldloc.0 + IL_000d: ldfld int32 assembly/U::item + IL_0012: ldloc.1 + IL_0013: ldfld int32 assembly/U::item + IL_0018: ceq + IL_001a: ret + + IL_001b: ldc.i4.0 + IL_001c: ret + + IL_001d: ldarg.1 + IL_001e: ldnull + IL_001f: cgt.un + IL_0021: ldc.i4.0 + IL_0022: ceq + IL_0024: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/U V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/U + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/U::Equals(class assembly/U) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance int32 Tag() + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .get instance int32 assembly/U::get_Tag() + } + .property instance int32 Item() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .get instance int32 assembly/U::get_Item() + } + } + + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly class assembly/T A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance class assembly/T get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld class assembly/T assembly/R1::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(class assembly/T a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 26 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 43 6F 65 72 63 69 + 6F 6E 73 41 70 70 6C 69 65 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld class assembly/T assembly/R1::A@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/R1 obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class [runtime]System.Collections.IComparer V_0, + class assembly/T V_1, + class assembly/T V_2) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0025 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0023 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld class assembly/T assembly/R1::A@ + IL_0012: stloc.1 + IL_0013: ldarg.1 + IL_0014: ldfld class assembly/T assembly/R1::A@ + IL_0019: stloc.2 + IL_001a: ldloc.1 + IL_001b: ldloc.2 + IL_001c: ldloc.0 + IL_001d: callvirt instance int32 assembly/T::CompareTo(object, + class [runtime]System.Collections.IComparer) + IL_0022: ret + + IL_0023: ldc.i4.1 + IL_0024: ret + + IL_0025: ldarg.1 + IL_0026: brfalse.s IL_002a + + IL_0028: ldc.i4.m1 + IL_0029: ret + + IL_002a: ldc.i4.0 + IL_002b: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/R1 + IL_0007: callvirt instance int32 assembly/R1::CompareTo(class assembly/R1) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/R1 V_0, + class assembly/T V_1, + class assembly/T V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/R1 + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_002b + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/R1 + IL_0010: brfalse.s IL_0029 + + IL_0012: ldarg.0 + IL_0013: ldfld class assembly/T assembly/R1::A@ + IL_0018: stloc.1 + IL_0019: ldloc.0 + IL_001a: ldfld class assembly/T assembly/R1::A@ + IL_001f: stloc.2 + IL_0020: ldloc.1 + IL_0021: ldloc.2 + IL_0022: ldarg.2 + IL_0023: callvirt instance int32 assembly/T::CompareTo(object, + class [runtime]System.Collections.IComparer) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any assembly/R1 + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.0 + IL_000b: ldfld class assembly/T assembly/R1::A@ + IL_0010: ldarg.1 + IL_0011: callvirt instance int32 assembly/T::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/R1::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/R1 obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/T V_0, + class assembly/T V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.0 + IL_0007: ldfld class assembly/T assembly/R1::A@ + IL_000c: stloc.0 + IL_000d: ldarg.1 + IL_000e: ldfld class assembly/T assembly/R1::A@ + IL_0013: stloc.1 + IL_0014: ldloc.0 + IL_0015: ldloc.1 + IL_0016: ldarg.2 + IL_0017: callvirt instance bool assembly/T::Equals(class assembly/T, + class [runtime]System.Collections.IEqualityComparer) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/R1 V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/R1 + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/R1::Equals(class assembly/R1, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/R1 obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0018 + + IL_0006: ldarg.0 + IL_0007: ldfld class assembly/T assembly/R1::A@ + IL_000c: ldarg.1 + IL_000d: ldfld class assembly/T assembly/R1::A@ + IL_0012: callvirt instance bool assembly/T::Equals(class assembly/T) + IL_0017: ret + + IL_0018: ldc.i4.0 + IL_0019: ret + + IL_001a: ldarg.1 + IL_001b: ldnull + IL_001c: cgt.un + IL_001e: ldc.i4.0 + IL_001f: ceq + IL_0021: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/R1 V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/R1 + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/R1::Equals(class assembly/R1) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance class assembly/T + A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance class assembly/T assembly/R1::get_A() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly class assembly/U A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance class assembly/U get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld class assembly/U assembly/R2::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(class assembly/U a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 26 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 43 6F 65 72 63 69 + 6F 6E 73 41 70 70 6C 69 65 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld class assembly/U assembly/R2::A@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/R2 obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class [runtime]System.Collections.IComparer V_0, + class assembly/U V_1, + class assembly/U V_2) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0025 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0023 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: stloc.0 + IL_000c: ldarg.0 + IL_000d: ldfld class assembly/U assembly/R2::A@ + IL_0012: stloc.1 + IL_0013: ldarg.1 + IL_0014: ldfld class assembly/U assembly/R2::A@ + IL_0019: stloc.2 + IL_001a: ldloc.1 + IL_001b: ldloc.2 + IL_001c: ldloc.0 + IL_001d: callvirt instance int32 assembly/U::CompareTo(object, + class [runtime]System.Collections.IComparer) + IL_0022: ret + + IL_0023: ldc.i4.1 + IL_0024: ret + + IL_0025: ldarg.1 + IL_0026: brfalse.s IL_002a + + IL_0028: ldc.i4.m1 + IL_0029: ret + + IL_002a: ldc.i4.0 + IL_002b: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/R2 + IL_0007: callvirt instance int32 assembly/R2::CompareTo(class assembly/R2) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/R2 V_0, + class assembly/U V_1, + class assembly/U V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/R2 + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_002b + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/R2 + IL_0010: brfalse.s IL_0029 + + IL_0012: ldarg.0 + IL_0013: ldfld class assembly/U assembly/R2::A@ + IL_0018: stloc.1 + IL_0019: ldloc.0 + IL_001a: ldfld class assembly/U assembly/R2::A@ + IL_001f: stloc.2 + IL_0020: ldloc.1 + IL_0021: ldloc.2 + IL_0022: ldarg.2 + IL_0023: callvirt instance int32 assembly/U::CompareTo(object, + class [runtime]System.Collections.IComparer) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any assembly/R2 + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.0 + IL_000b: ldfld class assembly/U assembly/R2::A@ + IL_0010: ldarg.1 + IL_0011: callvirt instance int32 assembly/U::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/R2::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/R2 obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/U V_0, + class assembly/U V_1) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.0 + IL_0007: ldfld class assembly/U assembly/R2::A@ + IL_000c: stloc.0 + IL_000d: ldarg.1 + IL_000e: ldfld class assembly/U assembly/R2::A@ + IL_0013: stloc.1 + IL_0014: ldloc.0 + IL_0015: ldloc.1 + IL_0016: ldarg.2 + IL_0017: callvirt instance bool assembly/U::Equals(class assembly/U, + class [runtime]System.Collections.IEqualityComparer) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/R2 V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/R2 + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/R2::Equals(class assembly/R2, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/R2 obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001a + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0018 + + IL_0006: ldarg.0 + IL_0007: ldfld class assembly/U assembly/R2::A@ + IL_000c: ldarg.1 + IL_000d: ldfld class assembly/U assembly/R2::A@ + IL_0012: callvirt instance bool assembly/U::Equals(class assembly/U) + IL_0017: ret + + IL_0018: ldc.i4.0 + IL_0019: ret + + IL_001a: ldarg.1 + IL_001b: ldnull + IL_001c: cgt.un + IL_001e: ldc.i4.0 + IL_001f: ceq + IL_0021: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/R2 V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/R2 + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/R2::Equals(class assembly/R2) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance class assembly/U + A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance class assembly/U assembly/R2::get_A() + } + } + + .field static assembly class assembly/R1 r1@13 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 r2@14 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@13 + IL_0005: ret + } + + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@14 + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.3 + IL_0001: call class assembly/T assembly/T::NewT(int32) + IL_0006: newobj instance void assembly/R1::.ctor(class assembly/T) + IL_000b: stsfld class assembly/R1 assembly::r1@13 + IL_0010: call class assembly/R1 assembly::get_r1() + IL_0015: ldfld class assembly/T assembly/R1::A@ + IL_001a: box assembly/T + IL_001f: unbox.any assembly/U + IL_0024: newobj instance void assembly/R2::.ctor(class assembly/U) + IL_0029: stsfld class assembly/R2 assembly::r2@14 + IL_002e: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs new file mode 100644 index 00000000000..de6714a5f49 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs @@ -0,0 +1,5 @@ +[] +type R1 = { A : int; B : int } + +let r1 = { A = 1; B = 2 } +let r1' = { ...r1; A = 99 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..ac6df7557b9 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExplicitShadowsSpread.fs.il.bsl @@ -0,0 +1,203 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2B 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 45 78 70 6C 69 63 + 69 74 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B + 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .field static assembly class assembly/R1 r1@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R1 'r1\'@5' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@4 + IL_0005: ret + } + + .method public specialname static class assembly/R1 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::'r1\'@5' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@4 + IL_000c: ldc.i4.s 99 + IL_000e: call class assembly/R1 assembly::get_r1() + IL_0013: ldfld int32 assembly/R1::B@ + IL_0018: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_001d: stsfld class assembly/R1 assembly::'r1\'@5' + IL_0022: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R1 + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::'get_r1\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs new file mode 100644 index 00000000000..1aa3c943d0f --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs @@ -0,0 +1,7 @@ +[] +type R1 = { A : int; B : int; C : int } +[] +type R2 = { B : int } + +let r1 = { A = 1; B = 2; C = 3 } +let r2 : R2 = { ...r1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs.il.bsl new file mode 100644 index 00000000000..f7e9699db75 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_ExtraFieldsAreIgnored.fs.il.bsl @@ -0,0 +1,288 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2B 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 45 78 74 72 61 46 + 69 65 6C 64 73 41 72 65 49 67 6E 6F 72 65 64 2B + 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R1::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_C() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2B 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 45 78 74 72 61 46 + 69 65 6C 64 73 41 72 65 49 67 6E 6F 72 65 64 2B + 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::B@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + } + + .field static assembly class assembly/R1 r1@6 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 r2@7 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@6 + IL_0005: ret + } + + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@7 + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: ldc.i4.3 + IL_0003: newobj instance void assembly/R1::.ctor(int32, + int32, + int32) + IL_0008: stsfld class assembly/R1 assembly::r1@6 + IL_000d: call class assembly/R1 assembly::get_r1() + IL_0012: ldfld int32 assembly/R1::B@ + IL_0017: newobj instance void assembly/R2::.ctor(int32) + IL_001c: stsfld class assembly/R2 assembly::r2@7 + IL_0021: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs new file mode 100644 index 00000000000..c92490f515c --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs @@ -0,0 +1,10 @@ +[] +type R1 = { B : int; C : int } +[] +type R2 = { A : int; B : int; C : int } + +let r1 = { B = 1; C = 2 } +let r2 = { A = 3; ...r1 } + +let r1' = {| B = 1; C = 2 |} +let r2' = { A = 3; ...r1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs.il.bsl new file mode 100644 index 00000000000..7d930d24486 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Explicit_Spread.fs.il.bsl @@ -0,0 +1,783 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::C@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b, int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2F 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 70 72 + 65 61 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::C@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_C() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2F 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 70 72 + 65 61 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + + .field static assembly class assembly/R1 r1@6 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 r2@7 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1887057234`2' 'r1\'@9' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 'r2\'@10' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@6 + IL_0005: ret + } + + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@7 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1887057234`2' 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1887057234`2' assembly::'r1\'@9' + IL_0005: ret + } + + .method public specialname static class assembly/R2 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::'r2\'@10' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 5 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@6 + IL_000c: ldc.i4.3 + IL_000d: call class assembly/R1 assembly::get_r1() + IL_0012: ldfld int32 assembly/R1::B@ + IL_0017: call class assembly/R1 assembly::get_r1() + IL_001c: ldfld int32 assembly/R1::C@ + IL_0021: newobj instance void assembly/R2::.ctor(int32, + int32, + int32) + IL_0026: stsfld class assembly/R2 assembly::r2@7 + IL_002b: ldc.i4.1 + IL_002c: ldc.i4.2 + IL_002d: newobj instance void class '<>f__AnonymousType1887057234`2'::.ctor(!0, + !1) + IL_0032: stsfld class '<>f__AnonymousType1887057234`2' assembly::'r1\'@9' + IL_0037: ldc.i4.3 + IL_0038: call class assembly/R1 assembly::get_r1() + IL_003d: ldfld int32 assembly/R1::B@ + IL_0042: call class assembly/R1 assembly::get_r1() + IL_0047: ldfld int32 assembly/R1::C@ + IL_004c: newobj instance void assembly/R2::.ctor(int32, + int32, + int32) + IL_0051: stsfld class assembly/R2 assembly::'r2\'@10' + IL_0056: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } + .property class '<>f__AnonymousType1887057234`2' + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1887057234`2' assembly::'get_r1\''() + } + .property class assembly/R2 + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1887057234`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' B, !'j__TPar' C) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 38 38 37 30 35 37 + 32 33 34 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1887057234`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1887057234`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1887057234`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::B@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::C@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1887057234`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1887057234`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1887057234`2'::get_B() + } + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1887057234`2'::get_C() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs new file mode 100644 index 00000000000..8da3238197f --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs @@ -0,0 +1,4 @@ +[] +type R2 = { A : int; B : int; C : int } + +let r2 = { ...{| A = 1; B = 2 |}; C = 3 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs.il.bsl new file mode 100644 index 00000000000..7b88e65d665 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_SpreadFromAnon.fs.il.bsl @@ -0,0 +1,655 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2E 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 46 72 6F 6D 41 6E + 6F 6E 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + + .field static assembly class assembly/R2 r2@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1960999945`2' spreadSrc@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@4 + IL_0005: ret + } + + .method assembly specialname static class '<>f__AnonymousType1960999945`2' get_spreadSrc@4() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1960999945`2' assembly::spreadSrc@4 + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType1960999945`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType1960999945`2' assembly::spreadSrc@4 + IL_000c: call class '<>f__AnonymousType1960999945`2' assembly::get_spreadSrc@4() + IL_0011: call instance !0 class '<>f__AnonymousType1960999945`2'::get_A() + IL_0016: call class '<>f__AnonymousType1960999945`2' assembly::get_spreadSrc@4() + IL_001b: call instance !1 class '<>f__AnonymousType1960999945`2'::get_B() + IL_0020: ldc.i4.3 + IL_0021: newobj instance void assembly/R2::.ctor(int32, + int32, + int32) + IL_0026: stsfld class assembly/R2 assembly::r2@4 + IL_002b: ret + } + + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } + .property class '<>f__AnonymousType1960999945`2' + spreadSrc@4() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1960999945`2' assembly::get_spreadSrc@4() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1960999945`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 39 36 30 39 39 39 + 39 34 35 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1960999945`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1960999945`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1960999945`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1960999945`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1960999945`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1960999945`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1960999945`2'::get_B() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs new file mode 100644 index 00000000000..b192db293b1 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs @@ -0,0 +1,10 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { A : int; B : int; C : int } + +let r1 = { A = 1; B = 2 } +let r2 = { ...r1; C = 3 } + +let r1' = {| A = 1; B = 2 |} +let r2' = { ...r1; C = 3 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs.il.bsl new file mode 100644 index 00000000000..b825833706e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Explicit.fs.il.bsl @@ -0,0 +1,783 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2F 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 5F 45 78 70 6C 69 + 63 69 74 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2F 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 5F 45 78 70 6C 69 + 63 69 74 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + + .field static assembly class assembly/R1 r1@6 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 r2@7 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1701169138`2' 'r1\'@9' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 'r2\'@10' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@6 + IL_0005: ret + } + + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@7 + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType1701169138`2' 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1701169138`2' assembly::'r1\'@9' + IL_0005: ret + } + + .method public specialname static class assembly/R2 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::'r2\'@10' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 5 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@6 + IL_000c: call class assembly/R1 assembly::get_r1() + IL_0011: ldfld int32 assembly/R1::A@ + IL_0016: call class assembly/R1 assembly::get_r1() + IL_001b: ldfld int32 assembly/R1::B@ + IL_0020: ldc.i4.3 + IL_0021: newobj instance void assembly/R2::.ctor(int32, + int32, + int32) + IL_0026: stsfld class assembly/R2 assembly::r2@7 + IL_002b: ldc.i4.1 + IL_002c: ldc.i4.2 + IL_002d: newobj instance void class '<>f__AnonymousType1701169138`2'::.ctor(!0, + !1) + IL_0032: stsfld class '<>f__AnonymousType1701169138`2' assembly::'r1\'@9' + IL_0037: call class assembly/R1 assembly::get_r1() + IL_003c: ldfld int32 assembly/R1::A@ + IL_0041: call class assembly/R1 assembly::get_r1() + IL_0046: ldfld int32 assembly/R1::B@ + IL_004b: ldc.i4.3 + IL_004c: newobj instance void assembly/R2::.ctor(int32, + int32, + int32) + IL_0051: stsfld class assembly/R2 assembly::'r2\'@10' + IL_0056: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } + .property class '<>f__AnonymousType1701169138`2' + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1701169138`2' assembly::'get_r1\''() + } + .property class assembly/R2 + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::'get_r2\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1701169138`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 37 30 31 31 36 39 + 31 33 38 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1701169138`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType1701169138`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1701169138`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1701169138`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType1701169138`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1701169138`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1701169138`2'::get_B() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs new file mode 100644 index 00000000000..b6930889352 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs @@ -0,0 +1,16 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { C : int; D : int } +[] +type R3 = { A : int; B : int; C : int; D : int } + +let r1 = { A = 1; B = 2 } +let r2 = { C = 3; D = 4 } +let r3 = { ...r1; ...r2 } +let r3' = { ...r2; ...r3 } + +let r1' = {| A = 1; B = 2 |} +let r2' = {| C = 3; D = 4 |} +let r3'' = { ...r1; ...r2 } +let r3''' = { ...r2; ...r3 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs.il.bsl new file mode 100644 index 00000000000..7e66522afcf --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_NoOverlap_Spread_Spread.fs.il.bsl @@ -0,0 +1,1420 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2D 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 65 61 + 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::D@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 c, int32 d) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2D 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 65 61 + 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::C@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::D@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + .property instance int32 D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_D() + } + } + + .class auto ansi serializable sealed nested public R3 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::D@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c, + int32 d) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2D 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 4E 6F 4F 76 65 72 + 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 65 61 + 64 2B 52 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R3::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R3::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R3::C@ + IL_001b: ldarg.0 + IL_001c: ldarg.s d + IL_001e: stfld int32 assembly/R3::D@ + IL_0023: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R3>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_C() + } + .property instance int32 D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 03 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_D() + } + } + + .field static assembly class assembly/R1 r1@8 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R2 r2@9 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R3 r3@10 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R3 'r3\'@11' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType3917092570`2' 'r1\'@13' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType4292577119`2' 'r2\'@14' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R3 'r3\'\'@15' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R3 'r3\'\'\'@16' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@8 + IL_0005: ret + } + + .method public specialname static class assembly/R2 get_r2() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R2 assembly::r2@9 + IL_0005: ret + } + + .method public specialname static class assembly/R3 get_r3() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R3 assembly::r3@10 + IL_0005: ret + } + + .method public specialname static class assembly/R3 'get_r3\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R3 assembly::'r3\'@11' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType3917092570`2' 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3917092570`2' assembly::'r1\'@13' + IL_0005: ret + } + + .method public specialname static class '<>f__AnonymousType4292577119`2' 'get_r2\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType4292577119`2' assembly::'r2\'@14' + IL_0005: ret + } + + .method public specialname static class assembly/R3 'get_r3\'\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R3 assembly::'r3\'\'@15' + IL_0005: ret + } + + .method public specialname static class assembly/R3 'get_r3\'\'\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R3 assembly::'r3\'\'\'@16' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 6 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@8 + IL_000c: ldc.i4.3 + IL_000d: ldc.i4.4 + IL_000e: newobj instance void assembly/R2::.ctor(int32, + int32) + IL_0013: stsfld class assembly/R2 assembly::r2@9 + IL_0018: call class assembly/R1 assembly::get_r1() + IL_001d: ldfld int32 assembly/R1::A@ + IL_0022: call class assembly/R1 assembly::get_r1() + IL_0027: ldfld int32 assembly/R1::B@ + IL_002c: call class assembly/R2 assembly::get_r2() + IL_0031: ldfld int32 assembly/R2::C@ + IL_0036: call class assembly/R2 assembly::get_r2() + IL_003b: ldfld int32 assembly/R2::D@ + IL_0040: newobj instance void assembly/R3::.ctor(int32, + int32, + int32, + int32) + IL_0045: stsfld class assembly/R3 assembly::r3@10 + IL_004a: call class assembly/R3 assembly::get_r3() + IL_004f: ldfld int32 assembly/R3::A@ + IL_0054: call class assembly/R3 assembly::get_r3() + IL_0059: ldfld int32 assembly/R3::B@ + IL_005e: call class assembly/R3 assembly::get_r3() + IL_0063: ldfld int32 assembly/R3::C@ + IL_0068: call class assembly/R3 assembly::get_r3() + IL_006d: ldfld int32 assembly/R3::D@ + IL_0072: newobj instance void assembly/R3::.ctor(int32, + int32, + int32, + int32) + IL_0077: stsfld class assembly/R3 assembly::'r3\'@11' + IL_007c: ldc.i4.1 + IL_007d: ldc.i4.2 + IL_007e: newobj instance void class '<>f__AnonymousType3917092570`2'::.ctor(!0, + !1) + IL_0083: stsfld class '<>f__AnonymousType3917092570`2' assembly::'r1\'@13' + IL_0088: ldc.i4.3 + IL_0089: ldc.i4.4 + IL_008a: newobj instance void class '<>f__AnonymousType4292577119`2'::.ctor(!0, + !1) + IL_008f: stsfld class '<>f__AnonymousType4292577119`2' assembly::'r2\'@14' + IL_0094: call class assembly/R1 assembly::get_r1() + IL_0099: ldfld int32 assembly/R1::A@ + IL_009e: call class assembly/R1 assembly::get_r1() + IL_00a3: ldfld int32 assembly/R1::B@ + IL_00a8: call class assembly/R2 assembly::get_r2() + IL_00ad: ldfld int32 assembly/R2::C@ + IL_00b2: call class assembly/R2 assembly::get_r2() + IL_00b7: ldfld int32 assembly/R2::D@ + IL_00bc: newobj instance void assembly/R3::.ctor(int32, + int32, + int32, + int32) + IL_00c1: stsfld class assembly/R3 assembly::'r3\'\'@15' + IL_00c6: call class assembly/R3 assembly::get_r3() + IL_00cb: ldfld int32 assembly/R3::A@ + IL_00d0: call class assembly/R3 assembly::get_r3() + IL_00d5: ldfld int32 assembly/R3::B@ + IL_00da: call class assembly/R3 assembly::get_r3() + IL_00df: ldfld int32 assembly/R3::C@ + IL_00e4: call class assembly/R3 assembly::get_r3() + IL_00e9: ldfld int32 assembly/R3::D@ + IL_00ee: newobj instance void assembly/R3::.ctor(int32, + int32, + int32, + int32) + IL_00f3: stsfld class assembly/R3 assembly::'r3\'\'\'@16' + IL_00f8: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R2 + r2() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R2 assembly::get_r2() + } + .property class assembly/R3 + r3() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R3 assembly::get_r3() + } + .property class assembly/R3 + 'r3\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R3 assembly::'get_r3\''() + } + .property class '<>f__AnonymousType3917092570`2' + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3917092570`2' assembly::'get_r1\''() + } + .property class '<>f__AnonymousType4292577119`2' + 'r2\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType4292577119`2' assembly::'get_r2\''() + } + .property class assembly/R3 + 'r3\'\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R3 assembly::'get_r3\'\''() + } + .property class assembly/R3 + 'r3\'\'\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R3 assembly::'get_r3\'\'\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType4292577119`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' C, !'j__TPar' D) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 34 32 39 32 35 37 37 + 31 31 39 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType4292577119`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType4292577119`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType4292577119`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::C@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::D@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType4292577119`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType4292577119`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType4292577119`2'::get_C() + } + .property instance !'j__TPar' D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType4292577119`2'::get_D() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3917092570`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 39 31 37 30 39 32 + 35 37 30 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3917092570`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3917092570`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3917092570`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3917092570`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3917092570`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3917092570`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3917092570`2'::get_B() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs new file mode 100644 index 00000000000..f4493a6b47b --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs @@ -0,0 +1,5 @@ +[] +type R1 = { A : int; B : int } + +let r1 = { A = 1; B = 2 } +let r1' = { A = 0; ...r1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs.il.bsl new file mode 100644 index 00000000000..b46a3fe4b21 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsExplicit.fs.il.bsl @@ -0,0 +1,204 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2B 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 53 70 72 65 61 64 + 53 68 61 64 6F 77 73 45 78 70 6C 69 63 69 74 2B + 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .field static assembly class assembly/R1 r1@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R1 'r1\'@5' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@4 + IL_0005: ret + } + + .method public specialname static class assembly/R1 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::'r1\'@5' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@4 + IL_000c: call class assembly/R1 assembly::get_r1() + IL_0011: ldfld int32 assembly/R1::A@ + IL_0016: call class assembly/R1 assembly::get_r1() + IL_001b: ldfld int32 assembly/R1::B@ + IL_0020: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0025: stsfld class assembly/R1 assembly::'r1\'@5' + IL_002a: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R1 + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::'get_r1\''() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs new file mode 100644 index 00000000000..08df2f63e02 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs @@ -0,0 +1,5 @@ +[] +type R1 = { A : int; B : int } + +let r1 = { A = 1; B = 2 } +let r1' = { ...r1; ...{| A = 99 |} } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..a00e60b1d70 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_SpreadShadowsSpread.fs.il.bsl @@ -0,0 +1,552 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 29 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 53 70 72 65 61 64 + 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B 52 31 + 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .field static assembly class assembly/R1 r1@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/R1 'r1\'@5' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class '<>f__AnonymousType1722350077`1' spreadSrc@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly int32 B@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class assembly/R1 get_r1() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::r1@4 + IL_0005: ret + } + + .method public specialname static class assembly/R1 'get_r1\''() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/R1 assembly::'r1\'@5' + IL_0005: ret + } + + .method assembly specialname static class '<>f__AnonymousType1722350077`1' get_spreadSrc@5() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType1722350077`1' assembly::spreadSrc@5 + IL_0005: ret + } + + .method assembly specialname static int32 get_B@5() cil managed + { + + .maxstack 8 + IL_0000: ldsfld int32 assembly::B@5 + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_0007: stsfld class assembly/R1 assembly::r1@4 + IL_000c: ldc.i4.s 99 + IL_000e: newobj instance void class '<>f__AnonymousType1722350077`1'::.ctor(!0) + IL_0013: stsfld class '<>f__AnonymousType1722350077`1' assembly::spreadSrc@5 + IL_0018: call class assembly/R1 assembly::get_r1() + IL_001d: ldfld int32 assembly/R1::B@ + IL_0022: stsfld int32 assembly::B@5 + IL_0027: call class '<>f__AnonymousType1722350077`1' assembly::get_spreadSrc@5() + IL_002c: call instance !0 class '<>f__AnonymousType1722350077`1'::get_A() + IL_0031: call int32 assembly::get_B@5() + IL_0036: newobj instance void assembly/R1::.ctor(int32, + int32) + IL_003b: stsfld class assembly/R1 assembly::'r1\'@5' + IL_0040: ret + } + + .property class assembly/R1 + r1() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::get_r1() + } + .property class assembly/R1 + 'r1\''() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/R1 assembly::'get_r1\''() + } + .property class '<>f__AnonymousType1722350077`1' + spreadSrc@5() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType1722350077`1' assembly::get_spreadSrc@5() + } + .property int32 B@5() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get int32 assembly::get_B@5() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1722350077`1'<'j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1722350077`1'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1722350077`1'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 37 32 32 33 35 30 + 30 37 37 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_000d: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1722350077`1'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType1722350077`1'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1722350077`1'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1722350077`1'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType1722350077`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0021 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001f + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0017: tail. + IL_0019: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001e: ret + + IL_001f: ldc.i4.1 + IL_0020: ret + + IL_0021: ldarg.1 + IL_0022: brfalse.s IL_0026 + + IL_0024: ldc.i4.m1 + IL_0025: ret + + IL_0026: ldc.i4.0 + IL_0027: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType1722350077`1'j__TPar'>::CompareTo(class '<>f__AnonymousType1722350077`1') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1722350077`1'j__TPar'> V_0, + class '<>f__AnonymousType1722350077`1'j__TPar'> V_1) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_002b + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0012: brfalse.s IL_0029 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0021: tail. + IL_0023: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0028: ret + + IL_0029: ldc.i4.1 + IL_002a: ret + + IL_002b: ldarg.1 + IL_002c: unbox.any class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0031: brfalse.s IL_0035 + + IL_0033: ldc.i4.m1 + IL_0034: ret + + IL_0035: ldc.i4.0 + IL_0036: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0022 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldloc.0 + IL_0021: ret + + IL_0022: ldc.i4.0 + IL_0023: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType1722350077`1'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType1722350077`1'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1722350077`1'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001f + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001d + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0015: tail. + IL_0017: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001c: ret + + IL_001d: ldc.i4.0 + IL_001e: ret + + IL_001f: ldarg.1 + IL_0020: ldnull + IL_0021: cgt.un + IL_0023: ldc.i4.0 + IL_0024: ceq + IL_0026: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType1722350077`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType1722350077`1'j__TPar'>::Equals(class '<>f__AnonymousType1722350077`1', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType1722350077`1'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_001c + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_001a + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType1722350077`1'j__TPar'>::A@ + IL_0012: tail. + IL_0014: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + + IL_001c: ldarg.1 + IL_001d: ldnull + IL_001e: cgt.un + IL_0020: ldc.i4.0 + IL_0021: ceq + IL_0023: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType1722350077`1'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType1722350077`1'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType1722350077`1'j__TPar'>::Equals(class '<>f__AnonymousType1722350077`1') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1722350077`1'::get_A() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs new file mode 100644 index 00000000000..73ff6f95bf8 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs @@ -0,0 +1,16 @@ +type RefNominalRecd = { A : int; B : int } +type [] StructNominalRecd = { A : int; B : int } + +let refAnonRecd = {| A = 1; B = 2 |} +let structAnonRecd = struct {| A = 1; B = 2 |} +let refNominalRecd : RefNominalRecd = { A = 1; B = 2 } +let structNominalRecd : StructNominalRecd = { A = 1; B = 2 } + +let ``ref nominal src, ref nominal dst`` : RefNominalRecd = { ...refNominalRecd; B = 3 } +let ``ref nominal src, struct nominal dst`` : StructNominalRecd = { ...refNominalRecd; B = 3 } +let ``struct nominal src, ref nominal dst`` : RefNominalRecd = { ...structNominalRecd; B = 3 } +let ``struct nominal src, struct nominal dst`` : StructNominalRecd = { ...structNominalRecd; B = 3 } +let ``ref anon src, ref nominal dst`` : RefNominalRecd = { ...refAnonRecd; B = 3 } +let ``ref anon src, struct nominal dst`` : StructNominalRecd = { ...refAnonRecd; B = 3 } +let ``struct anon src, ref nominal dst`` : RefNominalRecd = { ...structAnonRecd; B = 3 } +let ``struct anon src, struct nominal dst`` : StructNominalRecd = { ...structAnonRecd; B = 3 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs.il.bsl new file mode 100644 index 00000000000..4d5f232240e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Expression_Nominal_Structness.fs.il.bsl @@ -0,0 +1,2035 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public RefNominalRecd + extends [runtime]System.Object + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/RefNominalRecd::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/RefNominalRecd::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2C 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 53 74 72 75 63 74 + 6E 65 73 73 2B 52 65 66 4E 6F 6D 69 6E 61 6C 52 + 65 63 64 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/RefNominalRecd::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/RefNominalRecd::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/RefNominalRecd>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class assembly/RefNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + class [runtime]System.Collections.IComparer V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0050 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_004e + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: stloc.1 + IL_000c: ldarg.0 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: stloc.2 + IL_0013: ldarg.1 + IL_0014: ldfld int32 assembly/RefNominalRecd::A@ + IL_0019: stloc.3 + IL_001a: ldloc.2 + IL_001b: ldloc.3 + IL_001c: cgt + IL_001e: ldloc.2 + IL_001f: ldloc.3 + IL_0020: clt + IL_0022: sub + IL_0023: stloc.0 + IL_0024: ldloc.0 + IL_0025: ldc.i4.0 + IL_0026: bge.s IL_002a + + IL_0028: ldloc.0 + IL_0029: ret + + IL_002a: ldloc.0 + IL_002b: ldc.i4.0 + IL_002c: ble.s IL_0030 + + IL_002e: ldloc.0 + IL_002f: ret + + IL_0030: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0035: stloc.1 + IL_0036: ldarg.0 + IL_0037: ldfld int32 assembly/RefNominalRecd::B@ + IL_003c: stloc.2 + IL_003d: ldarg.1 + IL_003e: ldfld int32 assembly/RefNominalRecd::B@ + IL_0043: stloc.3 + IL_0044: ldloc.2 + IL_0045: ldloc.3 + IL_0046: cgt + IL_0048: ldloc.2 + IL_0049: ldloc.3 + IL_004a: clt + IL_004c: sub + IL_004d: ret + + IL_004e: ldc.i4.1 + IL_004f: ret + + IL_0050: ldarg.1 + IL_0051: brfalse.s IL_0055 + + IL_0053: ldc.i4.m1 + IL_0054: ret + + IL_0055: ldc.i4.0 + IL_0056: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/RefNominalRecd + IL_0007: callvirt instance int32 assembly/RefNominalRecd::CompareTo(class assembly/RefNominalRecd) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/RefNominalRecd V_0, + int32 V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: brfalse.s IL_0050 + + IL_000a: ldarg.1 + IL_000b: unbox.any assembly/RefNominalRecd + IL_0010: brfalse.s IL_004e + + IL_0012: ldarg.0 + IL_0013: ldfld int32 assembly/RefNominalRecd::A@ + IL_0018: stloc.2 + IL_0019: ldloc.0 + IL_001a: ldfld int32 assembly/RefNominalRecd::A@ + IL_001f: stloc.3 + IL_0020: ldloc.2 + IL_0021: ldloc.3 + IL_0022: cgt + IL_0024: ldloc.2 + IL_0025: ldloc.3 + IL_0026: clt + IL_0028: sub + IL_0029: stloc.1 + IL_002a: ldloc.1 + IL_002b: ldc.i4.0 + IL_002c: bge.s IL_0030 + + IL_002e: ldloc.1 + IL_002f: ret + + IL_0030: ldloc.1 + IL_0031: ldc.i4.0 + IL_0032: ble.s IL_0036 + + IL_0034: ldloc.1 + IL_0035: ret + + IL_0036: ldarg.0 + IL_0037: ldfld int32 assembly/RefNominalRecd::B@ + IL_003c: stloc.2 + IL_003d: ldloc.0 + IL_003e: ldfld int32 assembly/RefNominalRecd::B@ + IL_0043: stloc.3 + IL_0044: ldloc.2 + IL_0045: ldloc.3 + IL_0046: cgt + IL_0048: ldloc.2 + IL_0049: ldloc.3 + IL_004a: clt + IL_004c: sub + IL_004d: ret + + IL_004e: ldc.i4.1 + IL_004f: ret + + IL_0050: ldarg.1 + IL_0051: unbox.any assembly/RefNominalRecd + IL_0056: brfalse.s IL_005a + + IL_0058: ldc.i4.m1 + IL_0059: ret + + IL_005a: ldc.i4.0 + IL_005b: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.0 + IL_000b: ldfld int32 assembly/RefNominalRecd::B@ + IL_0010: ldloc.0 + IL_0011: ldc.i4.6 + IL_0012: shl + IL_0013: ldloc.0 + IL_0014: ldc.i4.2 + IL_0015: shr + IL_0016: add + IL_0017: add + IL_0018: add + IL_0019: stloc.0 + IL_001a: ldc.i4 0x9e3779b9 + IL_001f: ldarg.0 + IL_0020: ldfld int32 assembly/RefNominalRecd::A@ + IL_0025: ldloc.0 + IL_0026: ldc.i4.6 + IL_0027: shl + IL_0028: ldloc.0 + IL_0029: ldc.i4.2 + IL_002a: shr + IL_002b: add + IL_002c: add + IL_002d: add + IL_002e: stloc.0 + IL_002f: ldloc.0 + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: callvirt instance int32 assembly/RefNominalRecd::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(class assembly/RefNominalRecd obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0027 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0025 + + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/RefNominalRecd::A@ + IL_000c: ldarg.1 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: bne.un.s IL_0023 + + IL_0014: ldarg.0 + IL_0015: ldfld int32 assembly/RefNominalRecd::B@ + IL_001a: ldarg.1 + IL_001b: ldfld int32 assembly/RefNominalRecd::B@ + IL_0020: ceq + IL_0022: ret + + IL_0023: ldc.i4.0 + IL_0024: ret + + IL_0025: ldc.i4.0 + IL_0026: ret + + IL_0027: ldarg.1 + IL_0028: ldnull + IL_0029: cgt.un + IL_002b: ldc.i4.0 + IL_002c: ceq + IL_002e: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class assembly/RefNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0013 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: callvirt instance bool assembly/RefNominalRecd::Equals(class assembly/RefNominalRecd, + class [runtime]System.Collections.IEqualityComparer) + IL_0012: ret + + IL_0013: ldc.i4.0 + IL_0014: ret + } + + .method public hidebysig virtual final instance bool Equals(class assembly/RefNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0027 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0025 + + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/RefNominalRecd::A@ + IL_000c: ldarg.1 + IL_000d: ldfld int32 assembly/RefNominalRecd::A@ + IL_0012: bne.un.s IL_0023 + + IL_0014: ldarg.0 + IL_0015: ldfld int32 assembly/RefNominalRecd::B@ + IL_001a: ldarg.1 + IL_001b: ldfld int32 assembly/RefNominalRecd::B@ + IL_0020: ceq + IL_0022: ret + + IL_0023: ldc.i4.0 + IL_0024: ret + + IL_0025: ldc.i4.0 + IL_0026: ret + + IL_0027: ldarg.1 + IL_0028: ldnull + IL_0029: cgt.un + IL_002b: ldc.i4.0 + IL_002c: ceq + IL_002e: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class assembly/RefNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/RefNominalRecd + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0012 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: callvirt instance bool assembly/RefNominalRecd::Equals(class assembly/RefNominalRecd) + IL_0011: ret + + IL_0012: ldc.i4.0 + IL_0013: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/RefNominalRecd::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/RefNominalRecd::get_B() + } + } + + .class sequential ansi serializable sealed nested public StructNominalRecd + extends [runtime]System.ValueType + implements class [runtime]System.IEquatable`1, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IComparable`1, + [runtime]System.IComparable, + [runtime]System.Collections.IStructuralComparable + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.StructAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2F 45 78 70 72 65 73 73 69 6F + 6E 5F 4E 6F 6D 69 6E 61 6C 5F 53 74 72 75 63 74 + 6E 65 73 73 2B 53 74 72 75 63 74 4E 6F 6D 69 6E + 61 6C 52 65 63 64 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld int32 assembly/StructNominalRecd::A@ + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld int32 assembly/StructNominalRecd::B@ + IL_000e: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,valuetype assembly/StructNominalRecd>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: ldobj assembly/StructNominalRecd + IL_0015: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_001a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(valuetype assembly/StructNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0, + class [runtime]System.Collections.IComparer V_1, + int32 V_2, + int32 V_3) + IL_0000: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0005: stloc.1 + IL_0006: ldarg.0 + IL_0007: ldfld int32 assembly/StructNominalRecd::A@ + IL_000c: stloc.2 + IL_000d: ldarga.s obj + IL_000f: ldfld int32 assembly/StructNominalRecd::A@ + IL_0014: stloc.3 + IL_0015: ldloc.2 + IL_0016: ldloc.3 + IL_0017: cgt + IL_0019: ldloc.2 + IL_001a: ldloc.3 + IL_001b: clt + IL_001d: sub + IL_001e: stloc.0 + IL_001f: ldloc.0 + IL_0020: ldc.i4.0 + IL_0021: bge.s IL_0025 + + IL_0023: ldloc.0 + IL_0024: ret + + IL_0025: ldloc.0 + IL_0026: ldc.i4.0 + IL_0027: ble.s IL_002b + + IL_0029: ldloc.0 + IL_002a: ret + + IL_002b: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0030: stloc.1 + IL_0031: ldarg.0 + IL_0032: ldfld int32 assembly/StructNominalRecd::B@ + IL_0037: stloc.2 + IL_0038: ldarga.s obj + IL_003a: ldfld int32 assembly/StructNominalRecd::B@ + IL_003f: stloc.3 + IL_0040: ldloc.2 + IL_0041: ldloc.3 + IL_0042: cgt + IL_0044: ldloc.2 + IL_0045: ldloc.3 + IL_0046: clt + IL_0048: sub + IL_0049: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any assembly/StructNominalRecd + IL_0007: call instance int32 assembly/StructNominalRecd::CompareTo(valuetype assembly/StructNominalRecd) + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype assembly/StructNominalRecd V_0, + int32 V_1, + int32 V_2, + int32 V_3) + IL_0000: ldarg.1 + IL_0001: unbox.any assembly/StructNominalRecd + IL_0006: stloc.0 + IL_0007: ldarg.0 + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: stloc.2 + IL_000e: ldloca.s V_0 + IL_0010: ldfld int32 assembly/StructNominalRecd::A@ + IL_0015: stloc.3 + IL_0016: ldloc.2 + IL_0017: ldloc.3 + IL_0018: cgt + IL_001a: ldloc.2 + IL_001b: ldloc.3 + IL_001c: clt + IL_001e: sub + IL_001f: stloc.1 + IL_0020: ldloc.1 + IL_0021: ldc.i4.0 + IL_0022: bge.s IL_0026 + + IL_0024: ldloc.1 + IL_0025: ret + + IL_0026: ldloc.1 + IL_0027: ldc.i4.0 + IL_0028: ble.s IL_002c + + IL_002a: ldloc.1 + IL_002b: ret + + IL_002c: ldarg.0 + IL_002d: ldfld int32 assembly/StructNominalRecd::B@ + IL_0032: stloc.2 + IL_0033: ldloca.s V_0 + IL_0035: ldfld int32 assembly/StructNominalRecd::B@ + IL_003a: stloc.3 + IL_003b: ldloc.2 + IL_003c: ldloc.3 + IL_003d: cgt + IL_003f: ldloc.2 + IL_0040: ldloc.3 + IL_0041: clt + IL_0043: sub + IL_0044: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4 0x9e3779b9 + IL_0007: ldarg.0 + IL_0008: ldfld int32 assembly/StructNominalRecd::B@ + IL_000d: ldloc.0 + IL_000e: ldc.i4.6 + IL_000f: shl + IL_0010: ldloc.0 + IL_0011: ldc.i4.2 + IL_0012: shr + IL_0013: add + IL_0014: add + IL_0015: add + IL_0016: stloc.0 + IL_0017: ldc.i4 0x9e3779b9 + IL_001c: ldarg.0 + IL_001d: ldfld int32 assembly/StructNominalRecd::A@ + IL_0022: ldloc.0 + IL_0023: ldc.i4.6 + IL_0024: shl + IL_0025: ldloc.0 + IL_0026: ldc.i4.2 + IL_0027: shr + IL_0028: add + IL_0029: add + IL_002a: add + IL_002b: stloc.0 + IL_002c: ldloc.0 + IL_002d: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: call instance int32 assembly/StructNominalRecd::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(valuetype assembly/StructNominalRecd obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ldarga.s obj + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: bne.un.s IL_001f + + IL_000f: ldarg.0 + IL_0010: ldfld int32 assembly/StructNominalRecd::B@ + IL_0015: ldarga.s obj + IL_0017: ldfld int32 assembly/StructNominalRecd::B@ + IL_001c: ceq + IL_001e: ret + + IL_001f: ldc.i4.0 + IL_0020: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype assembly/StructNominalRecd V_0) + IL_0000: ldarg.1 + IL_0001: isinst assembly/StructNominalRecd + IL_0006: brfalse.s IL_0018 + + IL_0008: ldarg.1 + IL_0009: unbox.any assembly/StructNominalRecd + IL_000e: stloc.0 + IL_000f: ldarg.0 + IL_0010: ldloc.0 + IL_0011: ldarg.2 + IL_0012: call instance bool assembly/StructNominalRecd::Equals(valuetype assembly/StructNominalRecd, + class [runtime]System.Collections.IEqualityComparer) + IL_0017: ret + + IL_0018: ldc.i4.0 + IL_0019: ret + } + + .method public hidebysig virtual final instance bool Equals(valuetype assembly/StructNominalRecd obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/StructNominalRecd::A@ + IL_0006: ldarga.s obj + IL_0008: ldfld int32 assembly/StructNominalRecd::A@ + IL_000d: bne.un.s IL_001f + + IL_000f: ldarg.0 + IL_0010: ldfld int32 assembly/StructNominalRecd::B@ + IL_0015: ldarga.s obj + IL_0017: ldfld int32 assembly/StructNominalRecd::B@ + IL_001c: ceq + IL_001e: ret + + IL_001f: ldc.i4.0 + IL_0020: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.1 + IL_0001: isinst assembly/StructNominalRecd + IL_0006: brfalse.s IL_0015 + + IL_0008: ldarg.0 + IL_0009: ldarg.1 + IL_000a: unbox.any assembly/StructNominalRecd + IL_000f: call instance bool assembly/StructNominalRecd::Equals(valuetype assembly/StructNominalRecd) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/StructNominalRecd::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/StructNominalRecd::get_B() + } + } + + .field static assembly class '<>f__AnonymousType3545307392`2' refAnonRecd@4 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType1000930219981`2' structAnonRecd@5 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd refNominalRecd@6 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd structNominalRecd@7 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd 'ref nominal src, ref nominal dst@9' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'ref nominal src, struct nominal dst@10' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd 'struct nominal src, ref nominal dst@11' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd copyOfStruct@11 + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'copyOfStruct@11-1' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'struct nominal src, struct nominal dst@12' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'copyOfStruct@12-2' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'copyOfStruct@12-3' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd 'ref anon src, ref nominal dst@13' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'ref anon src, struct nominal dst@14' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly class assembly/RefNominalRecd 'struct anon src, ref nominal dst@15' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType1000930219981`2' 'copyOfStruct@15-4' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType1000930219981`2' 'copyOfStruct@15-5' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype assembly/StructNominalRecd 'struct anon src, struct nominal dst@16' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType1000930219981`2' 'copyOfStruct@16-6' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field static assembly valuetype '<>f__AnonymousType1000930219981`2' 'copyOfStruct@16-7' + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname static class '<>f__AnonymousType3545307392`2' get_refAnonRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class '<>f__AnonymousType3545307392`2' assembly::refAnonRecd@4 + IL_0005: ret + } + + .method public specialname static valuetype '<>f__AnonymousType1000930219981`2' get_structAnonRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::structAnonRecd@5 + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd get_refNominalRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::refNominalRecd@6 + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd get_structNominalRecd() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::structNominalRecd@7 + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd 'get_ref nominal src, ref nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::'ref nominal src, ref nominal dst@9' + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd 'get_ref nominal src, struct nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'ref nominal src, struct nominal dst@10' + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd 'get_struct nominal src, ref nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::'struct nominal src, ref nominal dst@11' + IL_0005: ret + } + + .method assembly specialname static valuetype assembly/StructNominalRecd get_copyOfStruct@11() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::copyOfStruct@11 + IL_0005: ret + } + + .method assembly specialname static valuetype assembly/StructNominalRecd 'get_copyOfStruct@11-1'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@11-1' + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd 'get_struct nominal src, struct nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'struct nominal src, struct nominal dst@12' + IL_0005: ret + } + + .method assembly specialname static valuetype assembly/StructNominalRecd 'get_copyOfStruct@12-2'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@12-2' + IL_0005: ret + } + + .method assembly specialname static valuetype assembly/StructNominalRecd 'get_copyOfStruct@12-3'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@12-3' + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd 'get_ref anon src, ref nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::'ref anon src, ref nominal dst@13' + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd 'get_ref anon src, struct nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'ref anon src, struct nominal dst@14' + IL_0005: ret + } + + .method public specialname static class assembly/RefNominalRecd 'get_struct anon src, ref nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld class assembly/RefNominalRecd assembly::'struct anon src, ref nominal dst@15' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType1000930219981`2' 'get_copyOfStruct@15-4'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@15-4' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType1000930219981`2' 'get_copyOfStruct@15-5'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@15-5' + IL_0005: ret + } + + .method public specialname static valuetype assembly/StructNominalRecd 'get_struct anon src, struct nominal dst'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype assembly/StructNominalRecd assembly::'struct anon src, struct nominal dst@16' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType1000930219981`2' 'get_copyOfStruct@16-6'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@16-6' + IL_0005: ret + } + + .method assembly specialname static valuetype '<>f__AnonymousType1000930219981`2' 'get_copyOfStruct@16-7'() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@16-7' + IL_0005: ret + } + + .method private specialname rtspecialname static void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$assembly::init@ + IL_0006: ldsfld int32 ''.$assembly::init@ + IL_000b: pop + IL_000c: ret + } + + .method assembly static void staticInitialization@() cil managed + { + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'& V_0) + IL_0000: ldc.i4.1 + IL_0001: ldc.i4.2 + IL_0002: newobj instance void class '<>f__AnonymousType3545307392`2'::.ctor(!0, + !1) + IL_0007: stsfld class '<>f__AnonymousType3545307392`2' assembly::refAnonRecd@4 + IL_000c: ldc.i4.1 + IL_000d: ldc.i4.2 + IL_000e: newobj instance void valuetype '<>f__AnonymousType1000930219981`2'::.ctor(!0, + !1) + IL_0013: stsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::structAnonRecd@5 + IL_0018: ldc.i4.1 + IL_0019: ldc.i4.2 + IL_001a: newobj instance void assembly/RefNominalRecd::.ctor(int32, + int32) + IL_001f: stsfld class assembly/RefNominalRecd assembly::refNominalRecd@6 + IL_0024: ldc.i4.1 + IL_0025: ldc.i4.2 + IL_0026: newobj instance void assembly/StructNominalRecd::.ctor(int32, + int32) + IL_002b: stsfld valuetype assembly/StructNominalRecd assembly::structNominalRecd@7 + IL_0030: call class assembly/RefNominalRecd assembly::get_refNominalRecd() + IL_0035: ldfld int32 assembly/RefNominalRecd::A@ + IL_003a: ldc.i4.3 + IL_003b: newobj instance void assembly/RefNominalRecd::.ctor(int32, + int32) + IL_0040: stsfld class assembly/RefNominalRecd assembly::'ref nominal src, ref nominal dst@9' + IL_0045: call class assembly/RefNominalRecd assembly::get_refNominalRecd() + IL_004a: ldfld int32 assembly/RefNominalRecd::A@ + IL_004f: ldc.i4.3 + IL_0050: newobj instance void assembly/StructNominalRecd::.ctor(int32, + int32) + IL_0055: stsfld valuetype assembly/StructNominalRecd assembly::'ref nominal src, struct nominal dst@10' + IL_005a: call valuetype assembly/StructNominalRecd assembly::get_structNominalRecd() + IL_005f: stsfld valuetype assembly/StructNominalRecd assembly::copyOfStruct@11 + IL_0064: call valuetype assembly/StructNominalRecd assembly::get_copyOfStruct@11() + IL_0069: stsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@11-1' + IL_006e: ldsflda valuetype assembly/StructNominalRecd assembly::'copyOfStruct@11-1' + IL_0073: ldfld int32 assembly/StructNominalRecd::A@ + IL_0078: ldc.i4.3 + IL_0079: newobj instance void assembly/RefNominalRecd::.ctor(int32, + int32) + IL_007e: stsfld class assembly/RefNominalRecd assembly::'struct nominal src, ref nominal dst@11' + IL_0083: call valuetype assembly/StructNominalRecd assembly::get_structNominalRecd() + IL_0088: stsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@12-2' + IL_008d: call valuetype assembly/StructNominalRecd assembly::'get_copyOfStruct@12-2'() + IL_0092: stsfld valuetype assembly/StructNominalRecd assembly::'copyOfStruct@12-3' + IL_0097: ldsflda valuetype assembly/StructNominalRecd assembly::'copyOfStruct@12-3' + IL_009c: ldfld int32 assembly/StructNominalRecd::A@ + IL_00a1: ldc.i4.3 + IL_00a2: newobj instance void assembly/StructNominalRecd::.ctor(int32, + int32) + IL_00a7: stsfld valuetype assembly/StructNominalRecd assembly::'struct nominal src, struct nominal dst@12' + IL_00ac: call class '<>f__AnonymousType3545307392`2' assembly::get_refAnonRecd() + IL_00b1: call instance !0 class '<>f__AnonymousType3545307392`2'::get_A() + IL_00b6: ldc.i4.3 + IL_00b7: newobj instance void assembly/RefNominalRecd::.ctor(int32, + int32) + IL_00bc: stsfld class assembly/RefNominalRecd assembly::'ref anon src, ref nominal dst@13' + IL_00c1: call class '<>f__AnonymousType3545307392`2' assembly::get_refAnonRecd() + IL_00c6: call instance !0 class '<>f__AnonymousType3545307392`2'::get_A() + IL_00cb: ldc.i4.3 + IL_00cc: newobj instance void assembly/StructNominalRecd::.ctor(int32, + int32) + IL_00d1: stsfld valuetype assembly/StructNominalRecd assembly::'ref anon src, struct nominal dst@14' + IL_00d6: call valuetype '<>f__AnonymousType1000930219981`2' assembly::get_structAnonRecd() + IL_00db: stsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@15-4' + IL_00e0: call valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@15-4'() + IL_00e5: stsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@15-5' + IL_00ea: ldsflda valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@15-5' + IL_00ef: stloc.0 + IL_00f0: ldloca.s V_0 + IL_00f2: call instance !0 valuetype '<>f__AnonymousType1000930219981`2'::get_A() + IL_00f7: ldc.i4.3 + IL_00f8: newobj instance void assembly/RefNominalRecd::.ctor(int32, + int32) + IL_00fd: stsfld class assembly/RefNominalRecd assembly::'struct anon src, ref nominal dst@15' + IL_0102: call valuetype '<>f__AnonymousType1000930219981`2' assembly::get_structAnonRecd() + IL_0107: stsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@16-6' + IL_010c: call valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@16-6'() + IL_0111: stsfld valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@16-7' + IL_0116: ldsflda valuetype '<>f__AnonymousType1000930219981`2' assembly::'copyOfStruct@16-7' + IL_011b: stloc.0 + IL_011c: ldloca.s V_0 + IL_011e: call instance !0 valuetype '<>f__AnonymousType1000930219981`2'::get_A() + IL_0123: ldc.i4.3 + IL_0124: newobj instance void assembly/StructNominalRecd::.ctor(int32, + int32) + IL_0129: stsfld valuetype assembly/StructNominalRecd assembly::'struct anon src, struct nominal dst@16' + IL_012e: ret + } + + .property class '<>f__AnonymousType3545307392`2' + refAnonRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class '<>f__AnonymousType3545307392`2' assembly::get_refAnonRecd() + } + .property valuetype '<>f__AnonymousType1000930219981`2' + structAnonRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType1000930219981`2' assembly::get_structAnonRecd() + } + .property class assembly/RefNominalRecd + refNominalRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::get_refNominalRecd() + } + .property valuetype assembly/StructNominalRecd + structNominalRecd() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::get_structNominalRecd() + } + .property class assembly/RefNominalRecd + 'ref nominal src, ref nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::'get_ref nominal src, ref nominal dst'() + } + .property valuetype assembly/StructNominalRecd + 'ref nominal src, struct nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_ref nominal src, struct nominal dst'() + } + .property class assembly/RefNominalRecd + 'struct nominal src, ref nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::'get_struct nominal src, ref nominal dst'() + } + .property valuetype assembly/StructNominalRecd + copyOfStruct@11() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::get_copyOfStruct@11() + } + .property valuetype assembly/StructNominalRecd + 'copyOfStruct@11-1'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_copyOfStruct@11-1'() + } + .property valuetype assembly/StructNominalRecd + 'struct nominal src, struct nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_struct nominal src, struct nominal dst'() + } + .property valuetype assembly/StructNominalRecd + 'copyOfStruct@12-2'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_copyOfStruct@12-2'() + } + .property valuetype assembly/StructNominalRecd + 'copyOfStruct@12-3'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_copyOfStruct@12-3'() + } + .property class assembly/RefNominalRecd + 'ref anon src, ref nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::'get_ref anon src, ref nominal dst'() + } + .property valuetype assembly/StructNominalRecd + 'ref anon src, struct nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_ref anon src, struct nominal dst'() + } + .property class assembly/RefNominalRecd + 'struct anon src, ref nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get class assembly/RefNominalRecd assembly::'get_struct anon src, ref nominal dst'() + } + .property valuetype '<>f__AnonymousType1000930219981`2' + 'copyOfStruct@15-4'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@15-4'() + } + .property valuetype '<>f__AnonymousType1000930219981`2' + 'copyOfStruct@15-5'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@15-5'() + } + .property valuetype assembly/StructNominalRecd + 'struct anon src, struct nominal dst'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype assembly/StructNominalRecd assembly::'get_struct anon src, struct nominal dst'() + } + .property valuetype '<>f__AnonymousType1000930219981`2' + 'copyOfStruct@16-6'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@16-6'() + } + .property valuetype '<>f__AnonymousType1000930219981`2' + 'copyOfStruct@16-7'() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype '<>f__AnonymousType1000930219981`2' assembly::'get_copyOfStruct@16-7'() + } +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .field static assembly int32 init@ + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: call void assembly::staticInitialization@() + IL_0005: ret + } + +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType3545307392`2'<'j__TPar','j__TPar'> + extends [runtime]System.Object + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1E 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 33 35 34 35 33 30 37 + 33 39 32 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0014: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType3545307392`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_0015: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0044 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0042 + + IL_0006: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_000b: ldarg.0 + IL_000c: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldarg.1 + IL_0012: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.0 + IL_001d: ldloc.0 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.0 + IL_0022: ret + + IL_0023: ldloc.0 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.0 + IL_0028: ret + + IL_0029: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002e: ldarg.0 + IL_002f: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0034: ldarg.1 + IL_0035: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_003a: tail. + IL_003c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0041: ret + + IL_0042: ldc.i4.1 + IL_0043: ret + + IL_0044: ldarg.1 + IL_0045: brfalse.s IL_0049 + + IL_0047: ldc.i4.m1 + IL_0048: ret + + IL_0049: ldc.i4.0 + IL_004a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0007: tail. + IL_0009: callvirt instance int32 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::CompareTo(class '<>f__AnonymousType3545307392`2') + IL_000e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> V_0, + class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: stloc.1 + IL_0009: ldarg.0 + IL_000a: brfalse.s IL_004a + + IL_000c: ldarg.1 + IL_000d: unbox.any class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0012: brfalse.s IL_0048 + + IL_0014: ldarg.2 + IL_0015: ldarg.0 + IL_0016: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_001b: ldloc.1 + IL_001c: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0021: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0026: stloc.2 + IL_0027: ldloc.2 + IL_0028: ldc.i4.0 + IL_0029: bge.s IL_002d + + IL_002b: ldloc.2 + IL_002c: ret + + IL_002d: ldloc.2 + IL_002e: ldc.i4.0 + IL_002f: ble.s IL_0033 + + IL_0031: ldloc.2 + IL_0032: ret + + IL_0033: ldarg.2 + IL_0034: ldarg.0 + IL_0035: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_003a: ldloc.1 + IL_003b: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0040: tail. + IL_0042: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0047: ret + + IL_0048: ldc.i4.1 + IL_0049: ret + + IL_004a: ldarg.1 + IL_004b: unbox.any class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0050: brfalse.s IL_0054 + + IL_0052: ldc.i4.m1 + IL_0053: ret + + IL_0054: ldc.i4.0 + IL_0055: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_003d + + IL_0003: ldc.i4.0 + IL_0004: stloc.0 + IL_0005: ldc.i4 0x9e3779b9 + IL_000a: ldarg.1 + IL_000b: ldarg.0 + IL_000c: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0011: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0016: ldloc.0 + IL_0017: ldc.i4.6 + IL_0018: shl + IL_0019: ldloc.0 + IL_001a: ldc.i4.2 + IL_001b: shr + IL_001c: add + IL_001d: add + IL_001e: add + IL_001f: stloc.0 + IL_0020: ldc.i4 0x9e3779b9 + IL_0025: ldarg.1 + IL_0026: ldarg.0 + IL_0027: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_002c: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0031: ldloc.0 + IL_0032: ldc.i4.6 + IL_0033: shl + IL_0034: ldloc.0 + IL_0035: ldc.i4.2 + IL_0036: shr + IL_0037: add + IL_0038: add + IL_0039: add + IL_003a: stloc.0 + IL_003b: ldloc.0 + IL_003c: ret + + IL_003d: ldc.i4.0 + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: tail. + IL_0008: callvirt instance int32 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000d: ret + } + + .method public hidebysig instance bool Equals(class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0035 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_0033 + + IL_0006: ldarg.1 + IL_0007: stloc.0 + IL_0008: ldarg.2 + IL_0009: ldarg.0 + IL_000a: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_000f: ldloc.0 + IL_0010: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0015: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_001a: brfalse.s IL_0031 + + IL_001c: ldarg.2 + IL_001d: ldarg.0 + IL_001e: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0023: ldloc.0 + IL_0024: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0029: tail. + IL_002b: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0030: ret + + IL_0031: ldc.i4.0 + IL_0032: ret + + IL_0033: ldc.i4.0 + IL_0034: ret + + IL_0035: ldarg.1 + IL_0036: ldnull + IL_0037: cgt.un + IL_0039: ldc.i4.0 + IL_003a: ceq + IL_003c: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0015 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: ldarg.2 + IL_000d: tail. + IL_000f: callvirt instance bool class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3545307392`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0014: ret + + IL_0015: ldc.i4.0 + IL_0016: ret + } + + .method public hidebysig virtual final instance bool Equals(class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: brfalse.s IL_0031 + + IL_0003: ldarg.1 + IL_0004: brfalse.s IL_002f + + IL_0006: ldarg.0 + IL_0007: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_000c: ldarg.1 + IL_000d: ldfld !0 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::A@ + IL_0012: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0017: brfalse.s IL_002d + + IL_0019: ldarg.0 + IL_001a: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_001f: ldarg.1 + IL_0020: ldfld !1 class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::B@ + IL_0025: tail. + IL_0027: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_002c: ret + + IL_002d: ldc.i4.0 + IL_002e: ret + + IL_002f: ldc.i4.0 + IL_0030: ret + + IL_0031: ldarg.1 + IL_0032: ldnull + IL_0033: cgt.un + IL_0035: ldc.i4.0 + IL_0036: ceq + IL_0038: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: isinst class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloc.0 + IL_0008: brfalse.s IL_0014 + + IL_000a: ldarg.0 + IL_000b: ldloc.0 + IL_000c: tail. + IL_000e: callvirt instance bool class '<>f__AnonymousType3545307392`2'j__TPar',!'j__TPar'>::Equals(class '<>f__AnonymousType3545307392`2') + IL_0013: ret + + IL_0014: ldc.i4.0 + IL_0015: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3545307392`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType3545307392`2'::get_B() + } +} + +.class public auto ansi serializable sealed beforefieldinit '<>f__AnonymousType1000930219981`2'<'j__TPar','j__TPar'> + extends [runtime]System.ValueType + implements [runtime]System.Collections.IStructuralComparable, + [runtime]System.IComparable, + class [runtime]System.IComparable`1f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>, + [runtime]System.Collections.IStructuralEquatable, + class [runtime]System.IEquatable`1f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>> +{ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field private !'j__TPar' A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field private !'j__TPar' B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor(!'j__TPar' A, !'j__TPar' B) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 21 3C 3E 66 5F 5F 41 6E 6F 6E + 79 6D 6F 75 73 54 79 70 65 31 30 30 30 39 33 30 + 32 31 39 39 38 31 60 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: stfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0007: ldarg.0 + IL_0008: ldarg.2 + IL_0009: stfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_000e: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !'j__TPar' get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.IsReadOnlyAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0006: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToStringf__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: ldobj valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> + IL_0015: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>,string>::Invoke(!0) + IL_001a: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>& V_0, + int32 V_1) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_0008: ldarg.0 + IL_0009: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_000e: ldloc.0 + IL_000f: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0014: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_0019: stloc.1 + IL_001a: ldloc.1 + IL_001b: ldc.i4.0 + IL_001c: bge.s IL_0020 + + IL_001e: ldloc.1 + IL_001f: ret + + IL_0020: ldloc.1 + IL_0021: ldc.i4.0 + IL_0022: ble.s IL_0026 + + IL_0024: ldloc.1 + IL_0025: ret + + IL_0026: call class [runtime]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() + IL_002b: ldarg.0 + IL_002c: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0031: ldloc.0 + IL_0032: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0037: tail. + IL_0039: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003e: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: unbox.any valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> + IL_0007: call instance int32 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::CompareTo(valuetype '<>f__AnonymousType1000930219981`2') + IL_000c: ret + } + + .method public hidebysig virtual final instance int32 CompareTo(object obj, class [runtime]System.Collections.IComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> V_0, + valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>& V_1, + int32 V_2) + IL_0000: ldarg.1 + IL_0001: unbox.any valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> + IL_0006: stloc.0 + IL_0007: ldloca.s V_0 + IL_0009: stloc.1 + IL_000a: ldarg.2 + IL_000b: ldarg.0 + IL_000c: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0011: ldloc.1 + IL_0012: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0017: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_001c: stloc.2 + IL_001d: ldloc.2 + IL_001e: ldc.i4.0 + IL_001f: bge.s IL_0023 + + IL_0021: ldloc.2 + IL_0022: ret + + IL_0023: ldloc.2 + IL_0024: ldc.i4.0 + IL_0025: ble.s IL_0029 + + IL_0027: ldloc.2 + IL_0028: ret + + IL_0029: ldarg.2 + IL_002a: ldarg.0 + IL_002b: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0030: ldloc.1 + IL_0031: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0036: tail. + IL_0038: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericComparisonWithComparerj__TPar'>(class [runtime]System.Collections.IComparer, + !!0, + !!0) + IL_003d: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode(class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 7 + .locals init (int32 V_0) + IL_0000: ldc.i4.0 + IL_0001: stloc.0 + IL_0002: ldc.i4 0x9e3779b9 + IL_0007: ldarg.1 + IL_0008: ldarg.0 + IL_0009: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_000e: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_0013: ldloc.0 + IL_0014: ldc.i4.6 + IL_0015: shl + IL_0016: ldloc.0 + IL_0017: ldc.i4.2 + IL_0018: shr + IL_0019: add + IL_001a: add + IL_001b: add + IL_001c: stloc.0 + IL_001d: ldc.i4 0x9e3779b9 + IL_0022: ldarg.1 + IL_0023: ldarg.0 + IL_0024: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0029: call int32 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericHashWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0) + IL_002e: ldloc.0 + IL_002f: ldc.i4.6 + IL_0030: shl + IL_0031: ldloc.0 + IL_0032: ldc.i4.2 + IL_0033: shr + IL_0034: add + IL_0035: add + IL_0036: add + IL_0037: stloc.0 + IL_0038: ldloc.0 + IL_0039: ret + } + + .method public hidebysig virtual final instance int32 GetHashCode() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call class [runtime]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() + IL_0006: call instance int32 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::GetHashCode(class [runtime]System.Collections.IEqualityComparer) + IL_000b: ret + } + + .method public hidebysig instance bool Equals(valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.2 + IL_0004: ldarg.0 + IL_0005: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_000a: ldloc.0 + IL_000b: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0010: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_0015: brfalse.s IL_002c + + IL_0017: ldarg.2 + IL_0018: ldarg.0 + IL_0019: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_001e: ldloc.0 + IL_001f: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0024: tail. + IL_0026: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityWithComparerj__TPar'>(class [runtime]System.Collections.IEqualityComparer, + !!0, + !!0) + IL_002b: ret + + IL_002c: ldc.i4.0 + IL_002d: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj, class [runtime]System.Collections.IEqualityComparer comp) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 5 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_001a + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: ldarg.2 + IL_0014: call instance bool valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::Equals(valuetype '<>f__AnonymousType1000930219981`2', + class [runtime]System.Collections.IEqualityComparer) + IL_0019: ret + + IL_001a: ldc.i4.0 + IL_001b: ret + } + + .method public hidebysig virtual final instance bool Equals(valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>& V_0) + IL_0000: ldarga.s obj + IL_0002: stloc.0 + IL_0003: ldarg.0 + IL_0004: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_0009: ldloc.0 + IL_000a: ldfld !0 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::A@ + IL_000f: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0014: brfalse.s IL_002a + + IL_0016: ldarg.0 + IL_0017: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_001c: ldloc.0 + IL_001d: ldfld !1 valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::B@ + IL_0022: tail. + IL_0024: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::GenericEqualityERj__TPar'>(!!0, + !!0) + IL_0029: ret + + IL_002a: ldc.i4.0 + IL_002b: ret + } + + .method public hidebysig virtual final instance bool Equals(object obj) cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 4 + .locals init (valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'> V_0) + IL_0000: ldarg.1 + IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGenericf__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>(object) + IL_0006: brtrue.s IL_000a + + IL_0008: br.s IL_0019 + + IL_000a: ldarg.1 + IL_000b: call !!0 [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::UnboxGenericf__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>>(object) + IL_0010: stloc.0 + IL_0011: ldarg.0 + IL_0012: ldloc.0 + IL_0013: call instance bool valuetype '<>f__AnonymousType1000930219981`2'j__TPar',!'j__TPar'>::Equals(valuetype '<>f__AnonymousType1000930219981`2') + IL_0018: ret + + IL_0019: ldc.i4.0 + IL_001a: ret + } + + .property instance !'j__TPar' A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1000930219981`2'::get_A() + } + .property instance !'j__TPar' B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !'j__TPar' '<>f__AnonymousType1000930219981`2'::get_B() + } +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/NominalRecordExpressionSpreads.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/NominalRecordExpressionSpreads.fs new file mode 100644 index 00000000000..92be6f201f0 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/NominalRecordExpressionSpreads.fs @@ -0,0 +1,84 @@ +module EmittedIL.NominalRecordExpressionSpreads + +open FSharp.Test +open FSharp.Test.Compiler + +/// Various types in the System.Diagnostics.CodeAnalysis namespace will be generated by the compiler +/// for the Framework target but will be included in the runtime for the .NET (Core) target. +/// Since the only IL that is material here is the field names, types, and ordering, +/// and since the spread logic is entirely framework/runtime-agnostic, +/// it is simpler to run these tests only for the .NET (Core) target. +type TheoryAttribute = TheoryForNETCOREAPPAttribute + +let [] SupportedLangVersion = "preview" + +let verifyCompilation compilation = + compilation + |> withLangVersion SupportedLangVersion + |> asExe + |> withEmbeddedPdb + |> withEmbedAllSource + |> ignoreWarnings + |> compile + |> shouldSucceed + |> verifyILBaseline + +[] +let Expression_Nominal_ExplicitShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_ExtraFieldsAreIgnored_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_NoOverlap_Explicit_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_NoOverlap_Spread_Explicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_NoOverlap_Spread_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_NoOverlap_SpreadFromAnon_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_SpreadShadowsExplicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_SpreadShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_CoercionsApplied_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Expression_Nominal_Structness_fs compilation = + compilation + |> getCompilation + |> verifyCompilation diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/RecordTypeSpreads.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/RecordTypeSpreads.fs new file mode 100644 index 00000000000..00977956e25 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/RecordTypeSpreads.fs @@ -0,0 +1,78 @@ +module EmittedIL.RecordTypeSpreads + +open FSharp.Test +open FSharp.Test.Compiler + +/// Various types in the System.Diagnostics.CodeAnalysis namespace will be generated by the compiler +/// for the Framework target but will be included in the runtime for the .NET (Core) target. +/// Since the only IL that is material here is the field names, types, and ordering, +/// and since the spread logic is entirely framework/runtime-agnostic, +/// it is simpler to run these tests only for the .NET (Core) target. +type TheoryAttribute = TheoryForNETCOREAPPAttribute + +let [] SupportedLangVersion = "preview" + +let verifyCompilation compilation = + compilation + |> withLangVersion SupportedLangVersion + |> asExe + |> withEmbeddedPdb + |> withEmbedAllSource + |> ignoreWarnings + |> compile + |> shouldSucceed + |> verifyILBaseline + +[] +let Type_ExplicitShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_NoOverlap_Explicit_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_NoOverlap_Spread_Explicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_NoOverlap_Spread_Spread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_NoOverlap_SpreadFromAnon_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_SpreadShadowsSpread_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_SpreadShadowsExplicit_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_Type_AttributesAreShadowed_fs compilation = + compilation + |> getCompilation + |> verifyCompilation + +[] +let Type_NoOverlap_Explicit_Spread_Generics_fs compilation = + compilation + |> getCompilation + |> verifyCompilation diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs new file mode 100644 index 00000000000..d2a2c6076ae --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs @@ -0,0 +1,7 @@ +type Attr1Attribute () = inherit System.Attribute () +type Attr2Attribute () = inherit System.Attribute () + +[] +type R1 = { [] A : int; [] B : int } +[] +type R2 = { ...R1; [] A : string } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs.il.bsl new file mode 100644 index 00000000000..bbc6b8530b6 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_AttributesAreShadowed.fs.il.bsl @@ -0,0 +1,255 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable nested public Attr1Attribute + extends [runtime]System.Attribute + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: callvirt instance void [runtime]System.Attribute::.ctor() + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ret + } + + } + + .class auto ansi serializable nested public Attr2Attribute + extends [runtime]System.Attribute + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) + .method public specialname rtspecialname instance void .ctor() cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: callvirt instance void [runtime]System.Attribute::.ctor() + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ret + } + + } + + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 41 74 74 72 + 69 62 75 74 65 73 41 72 65 53 68 61 64 6F 77 65 + 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void assembly/Attr1Attribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void assembly/Attr1Attribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly string A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance string get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld string assembly/R2::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b, string a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 41 74 74 72 + 69 62 75 74 65 73 41 72 65 53 68 61 64 6F 77 65 + 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld string assembly/R2::A@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void assembly/Attr1Attribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance string A() + { + .custom instance void assembly/Attr2Attribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance string assembly/R2::get_A() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs new file mode 100644 index 00000000000..48ce14dfbbd --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs @@ -0,0 +1,4 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { ...R1; A : string } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..712b79365d5 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_ExplicitShadowsSpread.fs.il.bsl @@ -0,0 +1,217 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 45 78 70 6C + 69 63 69 74 53 68 61 64 6F 77 73 53 70 72 65 61 + 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly string A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance string get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld string assembly/R2::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b, string a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 45 78 70 6C + 69 63 69 74 53 68 61 64 6F 77 73 53 70 72 65 61 + 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld string assembly/R2::A@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance string A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance string assembly/R2::get_A() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs new file mode 100644 index 00000000000..bc667c62e2e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs @@ -0,0 +1,4 @@ +[] +type R1 = { B : int; C : int } +[] +type R2 = { A : int; ...R1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs.il.bsl new file mode 100644 index 00000000000..4fc90ee19a3 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread.fs.il.bsl @@ -0,0 +1,243 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::C@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b, int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 21 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 + 70 72 65 61 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::C@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_C() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 21 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 + 70 72 65 61 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs new file mode 100644 index 00000000000..5d91ed24673 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs @@ -0,0 +1,6 @@ +[] +type R1<'a> = { A : 'a } +[] +type R2<'a> = { B : 'a } +[] +type R3<'a> = { ...R1<'a>; ...R2<'a> } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs.il.bsl new file mode 100644 index 00000000000..04c54f3af6c --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Explicit_Spread_Generics.fs.il.bsl @@ -0,0 +1,255 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1`1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly !a A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance !a get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class assembly/R1`1::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(!a a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2C 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 + 70 72 65 61 64 5F 47 65 6E 65 72 69 63 73 2B 52 + 31 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class assembly/R1`1::A@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1`1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) + IL_0015: ret + } + + .property instance !a A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !a assembly/R1`1::get_A() + } + } + + .class auto ansi serializable sealed nested public R2`1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly !a B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance !a get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class assembly/R2`1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(!a b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2C 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 + 70 72 65 61 64 5F 47 65 6E 65 72 69 63 73 2B 52 + 32 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class assembly/R2`1::B@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2`1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) + IL_0015: ret + } + + .property instance !a B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !a assembly/R2`1::get_B() + } + } + + .class auto ansi serializable sealed nested public R3`1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly !a A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly !a B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance !a get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class assembly/R3`1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance !a get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld !0 class assembly/R3`1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(!a a, !a b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 2C 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 45 78 70 6C 69 63 69 74 5F 53 + 70 72 65 61 64 5F 47 65 6E 65 72 69 63 73 2B 52 + 33 60 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld !0 class assembly/R3`1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld !0 class assembly/R3`1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,string>,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R3`1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString,string>>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2,string>::Invoke(!0) + IL_0015: ret + } + + .property instance !a A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance !a assembly/R3`1::get_A() + } + .property instance !a B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance !a assembly/R3`1::get_B() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs new file mode 100644 index 00000000000..9c0f6e97ac9 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs @@ -0,0 +1,3 @@ +type R1 = {| A : int; B : int |} +[] +type R2 = { ...R1; C : int } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs.il.bsl new file mode 100644 index 00000000000..97fa4e04bc5 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_SpreadFromAnon.fs.il.bsl @@ -0,0 +1,162 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 20 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 46 72 6F 6D + 41 6E 6F 6E 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs new file mode 100644 index 00000000000..c5da8718a02 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs @@ -0,0 +1,4 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { ...R1; C : int } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs.il.bsl new file mode 100644 index 00000000000..f71df039f32 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Explicit.fs.il.bsl @@ -0,0 +1,243 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 21 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 45 78 70 + 6C 69 63 69 74 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 21 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 45 78 70 + 6C 69 63 69 74 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R2::C@ + IL_001b: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs new file mode 100644 index 00000000000..447aa272308 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs @@ -0,0 +1,8 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { C : int; D : int } +[] +type R3 = { ...R1; ...R2 } +[] +type R4 = { ...R2; ...R1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs.il.bsl new file mode 100644 index 00000000000..9998053a106 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_NoOverlap_Spread_Spread.fs.il.bsl @@ -0,0 +1,479 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1F 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 + 65 61 64 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::D@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 c, int32 d) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1F 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 + 65 61 64 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::C@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::D@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_C() + } + .property instance int32 D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_D() + } + } + + .class auto ansi serializable sealed nested public R3 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::D@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 a, + int32 b, + int32 c, + int32 d) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1F 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 + 65 61 64 2B 52 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R3::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R3::B@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R3::C@ + IL_001b: ldarg.0 + IL_001c: ldarg.s d + IL_001e: stfld int32 assembly/R3::D@ + IL_0023: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R3>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_B() + } + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_C() + } + .property instance int32 D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 03 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_D() + } + } + + .class auto ansi serializable sealed nested public R4 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 C@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 D@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_C() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::C@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_D() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::D@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::B@ + IL_0006: ret + } + + .method public specialname rtspecialname + instance void .ctor(int32 c, + int32 d, + int32 a, + int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1F 54 79 70 65 5F 4E 6F 4F 76 + 65 72 6C 61 70 5F 53 70 72 65 61 64 5F 53 70 72 + 65 61 64 2B 52 34 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R4::C@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R4::D@ + IL_0014: ldarg.0 + IL_0015: ldarg.3 + IL_0016: stfld int32 assembly/R4::A@ + IL_001b: ldarg.0 + IL_001c: ldarg.s b + IL_001e: stfld int32 assembly/R4::B@ + IL_0023: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R4>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 C() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_C() + } + .property instance int32 D() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_D() + } + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 02 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 03 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_B() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs new file mode 100644 index 00000000000..0a9e73ffa9d --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs @@ -0,0 +1,4 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { A : string; ...R1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs.il.bsl new file mode 100644 index 00000000000..df5734beec4 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsExplicit.fs.il.bsl @@ -0,0 +1,217 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 45 78 70 6C 69 63 69 + 74 2B 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R2::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1D 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 45 78 70 6C 69 63 69 + 74 2B 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R2::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R2::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R2::get_B() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs new file mode 100644 index 00000000000..e4d65018f9e --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs @@ -0,0 +1,8 @@ +[] +type R1 = { A : int; B : int } +[] +type R2 = { A : string } +[] +type R3 = { ...R1; ...R2 } +[] +type R4 = { ...R2; ...R1 } diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs.il.bsl b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs.il.bsl new file mode 100644 index 00000000000..6e925ff053d --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/Spreads/Type_SpreadShadowsSpread.fs.il.bsl @@ -0,0 +1,356 @@ + + + + + +.assembly extern runtime { } +.assembly extern FSharp.Core { } +.assembly assembly +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, + int32, + int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) + + + + + .hash algorithm 0x00008004 + .ver 0:0:0:0 +} +.module assembly.exe + +.imagebase {value} +.file alignment 0x00000200 +.stackreserve 0x00100000 +.subsystem 0x0003 +.corflags 0x00000001 + + + + + +.class public abstract auto ansi sealed assembly + extends [runtime]System.Object +{ + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) + .class auto ansi serializable sealed nested public R1 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R1::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1B 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B + 52 31 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R1::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R1::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R1>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R1::get_B() + } + } + + .class auto ansi serializable sealed nested public R2 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly string A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance string get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld string assembly/R2::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(string a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1B 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B + 52 32 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld string assembly/R2::A@ + IL_000d: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R2>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance string A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance string assembly/R2::get_A() + } + } + + .class auto ansi serializable sealed nested public R3 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly string A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R3::B@ + IL_0006: ret + } + + .method public hidebysig specialname instance string get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld string assembly/R3::A@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 b, string a) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1B 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B + 52 33 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R3::B@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld string assembly/R3::A@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R3>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R3::get_B() + } + .property instance string A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance string assembly/R3::get_A() + } + } + + .class auto ansi serializable sealed nested public R4 + extends [runtime]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoEqualityAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.NoComparisonAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.DefaultAugmentationAttribute::.ctor(bool) = ( 01 00 00 00 00 ) + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 02 00 00 00 00 00 ) + .field assembly int32 A@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .field assembly int32 B@ + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [runtime]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) + .method public hidebysig specialname instance int32 get_A() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::A@ + IL_0006: ret + } + + .method public hidebysig specialname instance int32 get_B() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .custom instance void [runtime]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldfld int32 assembly/R4::B@ + IL_0006: ret + } + + .method public specialname rtspecialname instance void .ctor(int32 a, int32 b) cil managed + { + .custom instance void [runtime]System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute::.ctor(valuetype [runtime]System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes, + class [runtime]System.Type) = ( 01 00 60 06 00 00 1B 54 79 70 65 5F 53 70 72 65 + 61 64 53 68 61 64 6F 77 73 53 70 72 65 61 64 2B + 52 34 00 00 ) + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: call instance void [runtime]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: ldarg.1 + IL_0008: stfld int32 assembly/R4::A@ + IL_000d: ldarg.0 + IL_000e: ldarg.2 + IL_000f: stfld int32 assembly/R4::B@ + IL_0014: ret + } + + .method public strict virtual instance string ToString() cil managed + { + .custom instance void [runtime]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + + .maxstack 8 + IL_0000: ldstr "%+A" + IL_0005: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [FSharp.Core]Microsoft.FSharp.Core.Unit,string,string,class assembly/R4>::.ctor(string) + IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatToString>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4) + IL_000f: ldarg.0 + IL_0010: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0) + IL_0015: ret + } + + .property instance int32 A() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 00 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_A() + } + .property instance int32 B() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags, + int32) = ( 01 00 04 00 00 00 01 00 00 00 00 00 ) + .get instance int32 assembly/R4::get_B() + } + } + +} + +.class private abstract auto ansi sealed ''.$assembly + extends [runtime]System.Object +{ + .method public static void main@() cil managed + { + .entrypoint + + .maxstack 8 + IL_0000: ret + } + +} + + + + + + diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj index acfeca79f35..9456f97567c 100644 --- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj +++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj @@ -274,6 +274,9 @@ + + + @@ -368,6 +371,7 @@ + diff --git a/tests/FSharp.Compiler.ComponentTests/Language/CopyAndUpdateTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/CopyAndUpdateTests.fs index 94b4571afbb..872d8129b9b 100644 --- a/tests/FSharp.Compiler.ComponentTests/Language/CopyAndUpdateTests.fs +++ b/tests/FSharp.Compiler.ComponentTests/Language/CopyAndUpdateTests.fs @@ -1,4 +1,4 @@ -module Language.CopyAndUpdateTests +module Language.CopyAndUpdateTests open Xunit open FSharp.Test.Compiler @@ -17,7 +17,7 @@ let t2 x = { x with D.B = "a"; D.B = "b" } |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 6, Col 23, Line 6, Col 24, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 6, Col 34, Line 6, Col 41, "The field 'B' appears multiple times in this record expression or pattern" ] [] @@ -32,8 +32,8 @@ let t2 x = { x with D.B = "a"; D.B = "b"; D.B = "c" } |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 6, Col 23, Line 6, Col 24, "The field 'B' appears multiple times in this record expression or pattern") - (Error 668, Line 6, Col 34, Line 6, Col 35, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 6, Col 34, Line 6, Col 41, "The field 'B' appears multiple times in this record expression or pattern" + Error 668, Line 6, Col 45, Line 6, Col 52, "The field 'B' appears multiple times in this record expression or pattern" ] [] @@ -48,8 +48,8 @@ let t2 x = { x with D.B = "a"; D.C = ""; D.B = "c" ; D.C = "d" } |> typecheck |> shouldFail |> withDiagnostics [ - (Error 668, Line 6, Col 34, Line 6, Col 35, "The field 'C' appears multiple times in this record expression or pattern") - (Error 668, Line 6, Col 23, Line 6, Col 24, "The field 'B' appears multiple times in this record expression or pattern") + Error 668, Line 6, Col 44, Line 6, Col 51, "The field 'B' appears multiple times in this record expression or pattern" + Error 668, Line 6, Col 56, Line 6, Col 63, "The field 'C' appears multiple times in this record expression or pattern" ] [] diff --git a/tests/FSharp.Compiler.ComponentTests/Language/SpreadTests.fs b/tests/FSharp.Compiler.ComponentTests/Language/SpreadTests.fs new file mode 100644 index 00000000000..3cb4a278b79 --- /dev/null +++ b/tests/FSharp.Compiler.ComponentTests/Language/SpreadTests.fs @@ -0,0 +1,1977 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +module Language.SpreadTests + +open FSharp.Test.Compiler +open Xunit + +module NominalAndAnonymousRecords = + let [] SupportedLangVersion = "preview" + + module LangVersion = + [] + let ``10 → error`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { ...R1; C : int } + let r1 = { A = 1; B = 2 } + let r2 = { ...r1; C = 3 } + """ + + FSharp src + |> withLangVersion10 + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3350, Line 3, Col 29, Line 3, Col 34, "Feature 'record type and expression spreads' is not available in F# 10.0. Please use language version 'PREVIEW' or greater." + Error 3350, Line 5, Col 28, Line 5, Col 33, "Feature 'record type and expression spreads' is not available in F# 10.0. Please use language version 'PREVIEW' or greater." + ] + + [] + let ``> 10 → success`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { ...R1; C : int } + let r1 = { A = 1; B = 2 } + let r2 = { ...r1; C = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Parsing = + [] + let ``{...} → error`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { ... } + let r1 : R1 = { ... } + let r2 = {| ... |} + let r1' : R1 = { r1 with ... } + let r2' = {| r1 with ... |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3894, Line 3, Col 29, Line 3, Col 32, "Missing spread source type after '...'." + Error 3893, Line 4, Col 33, Line 4, Col 36, "Missing spread source expression after '...'." + Error 3893, Line 5, Col 29, Line 5, Col 32, "Missing spread source expression after '...'." + Error 3893, Line 6, Col 42, Line 6, Col 45, "Missing spread source expression after '...'." + Error 3893, Line 7, Col 38, Line 7, Col 41, "Missing spread source expression after '...'." + ] + + module RecordTypeSpreads = + module Algebra = + /// No overlap, spread ⊕ field. + [] + let ``{...{A,B},C} = {A,B} ⊕ {C} = {A,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { ...R1; C : int } + + let _ : R2 = { A = 1; B = 2; C = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, spread from anonymous record ⊕ field. + [] + let ``{...{|A,B|},C} = {A,B} ⊕ {C} = {A,B,C}`` () = + let src = + """ + type R2 = { ...{| A : int; B : int |}; C : int } + + let _ : R2 = { A = 1; B = 2; C = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, field ⊕ spread. + [] + let ``{A,...{B,C}} = {A} ⊕ {B,C} = {A,B,C}`` () = + let src = + """ + type R1 = { B : int; C : int } + type R2 = { A : int; ...R1 } + + let _ : R2 = { A = 1; B = 2; C = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, spread ⊕ spread. + [] + let ``{...{A,B},...{C,D}} = {A,B} ⊕ {C,D} = {A,B,C,D}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { C : int; D : int } + type R3 = { ...R1; ...R2 } + + let _ : R3 = { A = 1; B = 2; C = 3; D = 4 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward explicit duplicate field shadows field from spread. + [] + let ``{...{A₀,B},A₁} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { ...R1; A : string } + + let _ : R2 = { A = "1"; B = 2 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward spread field shadows leftward spread field. + [] + let ``{...{A₀,B},...{A₁}} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { A : string } + type R3 = { ...R1; ...R2 } + type R4 = { ...R2; ...R1 } + + let _ : R3 = { A = "1"; B = 2 } + let _ : R4 = { A = 1; B = 2 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward spread field shadows leftward explicit field with warning. + [] + let ``{A₀,...{A₁,B}} = {A₀} ⊕ {A₁,B} = {A₁_warn,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { A : string; ...R1 } + + let _ : R2 = { A = 1; B = 2 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Warning 3891, Line 3, Col 45, Line 3, Col 50, "Spread field 'A: int' from type 'R1' shadows an explicitly declared field with the same name.") + + /// Explicit duplicate fields remain disallowed. + [] + let ``{A₀,...{A₁,B},A₂} = {A₀} ⊕ {A₁,B} ⊕ {A₂} = {A₁_warn,B,A₂_error}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { A : string; ...R1; A : float } + + let _ : R2 = { A = 1; B = 2 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Warning 3891, Line 3, Col 45, Line 3, Col 50, "Spread field 'A: int' from type 'R1' shadows an explicitly declared field with the same name." + Error 37, Line 3, Col 52, Line 3, Col 53, "Duplicate definition of field 'A'" + ] + + [] + let ``No dupes allowed, multiple`` () = + let src = + """ + type R1 = { A : int; B : string } + type R2 = { A : decimal } + type R3 = { ...R2; A : string; ...R1; A : float } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Warning 3891, Line 4, Col 52, Line 4, Col 57, "Spread field 'A: int' from type 'R1' shadows an explicitly declared field with the same name." + Error 37, Line 4, Col 59, Line 4, Col 60, "Duplicate definition of field 'A'" + ] + + module Accessibility = + /// Fields should have the accessibility of the target type. + /// A spread from less to more accessible is valid as long as the less accessible + /// fields are accessible at the point of the spread. + [] + let ``Accessibility comes from target`` () = + let src = + """ + type private R1 = { A : int; B : string } + type public R2 = { ...R1 } + + let public r2 : R2 = { A = 1; B = "2" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Mutability = + [] + let ``Mutability is brought over`` () = + let src = + """ + type R1 = { A : int; mutable B : string } + type R2 = { ...R1 } + + let r2 : R2 = { A = 1; B = "3" } + r2.B <- "99" + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module GenericTypeParameters = + [] + let ``Single type parameter, inferred at usage`` () = + let src = + """ + type R1<'a> = { A : 'a; B : string } + type R2<'a> = { X : 'a; Y : string } + type R3<'a> = { ...R1<'a>; ...R2<'a> } + + let _ : R3<_> = { A = 3; B = "lol"; X = 4; Y = "haha" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Single type parameter, inconsistent instantiation disallowed`` () = + let src = + """ + type R1<'a> = { A : 'a } + type R2<'a> = { B : 'a } + type R3<'a> = { ...R1<'a>; ...R2<'a> } + + let _ : R3 = { A = 3; B = "lol" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 1, Line 6, Col 52, Line 6, Col 57, "This expression was expected to have type +'int' +but here has type +'string' " + ] + + [] + let ``Single type parameter, annotated at usage`` () = + let src = + """ + type R1<'a> = { A : 'a; B : string } + type R2<'a> = { X : 'a; Y : string } + type R3<'a> = { ...R1<'a>; ...R2<'a> } + + let _ : R3 = { A = 3; B = "lol"; X = 4; Y = "haha" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Multiple type parameters`` () = + let src = + """ + type R1<'a> = { A : 'a; B : string } + type R2<'a> = { X : 'a; Y : string } + type R3<'a, 'b> = { ...R1<'a>; ...R2<'b> } + + let _ : R3<_, _> = { A = 3; B = "lol"; X = 3.14; Y = "haha" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``'a → 'a list`` () = + let src = + """ + type R1<'a> = { A : 'a } + type R2<'a> = { ...R1<'a list> } + + let _ : R2 = { A = [3] } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Single type parameter, not in scope, not allowed`` () = + let src = + """ + type R1<'a> = { A : 'a; B : string } + type R2<'a> = { X : 'a; Y : string } + type R3<'a> = { ...R1<'a>; ...R2<'b> } + type R4 = { ...R1<'a>; ...R2<'b> } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 39, Line 4, Col 54, Line 4, Col 56, "The type parameter 'b is not defined." + Error 39, Line 5, Col 39, Line 5, Col 41, "The type parameter 'a is not defined." + Error 39, Line 5, Col 50, Line 5, Col 52, "The type parameter 'b is not defined." + ] + + /// Akin to: + /// + /// type R1<[] 'a> = { A : int<'a> } + /// type R2<'a> = { X : R1<'a> } + [] + let ``Measure attribute on source, required on spread destination`` () = + let src = + """ + type R1<[] 'a> = { A : int<'a> } + type R2<'a> = { ...R1<'a> } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 702, Line 3, Col 43, Line 3, Col 45, "Expected unit-of-measure parameter, not type parameter. Explicit unit-of-measure parameters must be marked with the [] attribute.") + + [] + let ``Measure attribute on source, measure on spread destination, OK`` () = + let src = + """ + type R1<[] 'a> = { A : int<'a> } + type R2<[] 'b> = { ...R1<'b> } + + type [] m + type R3 = { ...R1 } + + let _ : R1 = { A = 3 } + let _ : R2 = { A = 3 } + let _ : R3 = { A = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Akin to: + /// + /// type R1<'a when 'a : comparison> = { A : 'a } + /// type R2<'a> = { X : R1<'a> } + [] + let ``Constraint on source, required on spread destination`` () = + let src = + """ + type R1<'a when 'a : comparison> = { A : 'a } + type R2<'a> = { ...R1<'a> } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 1, Line 3, Col 40, Line 3, Col 46, "A type parameter is missing a constraint 'when 'a: comparison'") + + [] + let ``Constraint on source, required on spread destination, error if not compatible at usage`` () = + let src = + """ + type R1<'a when 'a : comparison> = { A : 'a list } + type R2<'a when 'a : comparison> = { ...R1<'a> } + + let _ : R2<_> = { A = [obj ()] } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 193, Line 5, Col 44, Line 5, Col 50, "The type 'obj' does not support the 'comparison' constraint. For example, it does not support the 'System.IComparable' interface") + + [] + let ``Constraint on source, constraint on spread destination, compatible at usage, OK`` () = + let src = + """ + type R1<'a when 'a : comparison> = { A : 'a } + type R2<'a when 'a : comparison> = { ...R1<'a> } + type R3<'a when 'a : comparison> = { ...R1<'a list> } + + let _ : R1 = { A = 3 } + let _ : R2 = { A = 3 } + let _ : R3 = { A = [3] } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module NonRecordSource = + [] + let ``{...class} → error`` () = + let src = + """ + type C () = + member _.A = 1 + member _.B = 2 + + type R = { ...C } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 6, Col 32, Line 6, Col 36, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + [] + let ``{...abstract_class} → error`` () = + let src = + """ + [] + type C () = + abstract A : int + default _.A = 1 + abstract B : int + default _.B = 2 + + type R = { ...C } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 9, Col 32, Line 9, Col 36, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + [] + let ``{...struct} → error`` () = + let src = + """ + [] + type S = + member _.A = 1 + member _.B = 2 + + type R = { ...S } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 7, Col 32, Line 7, Col 36, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + [] + let ``{...interface} → error`` () = + let src = + """ + type IFace = + abstract A : int + abstract B : int + + type R = { ...IFace } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 6, Col 32, Line 6, Col 40, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + [] + let ``{...int} → error`` () = + let src = + """ + type R = { ...int } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 2, Col 32, Line 2, Col 38, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + [] + let ``{...(int -> int)} → error`` () = + let src = + """ + type R = { ...(int -> int) } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3888, Line 2, Col 32, Line 2, Col 47, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type.") + + module Recursion = + [] + let ``Mutually recursive type spreads → error`` () = + let src = + """ + type R = { A : int; ...S; B : int } + and S = { C : int; ...R; D : int } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3895, Line 2, Col 26, Line 2, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 3, Col 26, Line 3, Col 27, "This type definition involves a cyclic reference through a spread." + ] + + [] + let ``Mutually recursive type spreads with some indirection → error`` () = + let src = + """ + type R = { A : int; ...S } + and S = { B : int; ...T } + and T = { C : int; ...U } + and U = { D : int; ...R } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3895, Line 2, Col 26, Line 2, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 3, Col 26, Line 3, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 4, Col 26, Line 4, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 5, Col 26, Line 5, Col 27, "This type definition involves a cyclic reference through a spread." + ] + + [] + let ``Mutually recursive type spreads in recursive module → error`` () = + let src = + """ + module rec M + + type R = { A : int; ...S; B : int } + type S = { C : int; ...R; D : int } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3895, Line 4, Col 26, Line 4, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 5, Col 26, Line 5, Col 27, "This type definition involves a cyclic reference through a spread." + ] + + [] + let ``Complex mutually recursive type spreads → error`` () = + let src = + """ + module rec M + + [] + module N = + type R = { A : int; ...O.S } + + module O = + type S = { B : int; ...T } + + type T = { C : int; ...U } + + [] + module P = + [] + module Q = + type U = { D : int; ...R } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3895, Line 6, Col 30, Line 6, Col 31, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 9, Col 34, Line 9, Col 35, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 11, Col 26, Line 11, Col 27, "This type definition involves a cyclic reference through a spread." + Error 3895, Line 17, Col 34, Line 17, Col 35, "This type definition involves a cyclic reference through a spread." + ] + + [] + let ``Mutually recursive type defns with spreads, no cycles → success`` () = + let src = + """ + module M = + type R = { α : int } + and S = { β : int } + and T = { γ : int } + and U = { δ : int } + + type R = { A : int; ...M.S } + and S = { B : int; ...M.T } + and T = { C : int; ...M.U } + and U = { D : int; ...M.R } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Nullability = + [] + let ``Can't spread from a nullable type`` () = + let src = + """ + type R1 = { A : int } + type R2 = { ...(R1 | null) } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> withCheckNulls + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3888, Line 3, Col 33, Line 3, Col 47, "The source type of a spread into a record type definition must itself be a nominal or anonymous record type." + ] + + module Signatures = + [] + let ``Can use spreads in signatures`` () = + let src = + """ + type R1 = { A : int } + type R2 = { ...R1; B : int } + type R3 = {| A : int |} + type R4 = { ...R1; B : int } + """ + + Fsi src + |> withLangVersion SupportedLangVersion + |> withCheckNulls + |> typecheck + |> shouldSucceed + + module Structness = + [] + let ``Structness depends only on the target type`` () = + let src = + """ + type [] R1 = { A : int } + type R2 = { ...R1 } + type R3 = { A : int } + type [] R4 = { ...R3 } + + if typeof.IsValueType then + failwith "R2 should not be a struct type because it is not explicitly annotated as such." + + if not typeof.IsValueType then + failwith "R4 should be a struct type because it is explicitly annotated as such." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + module AnonymousRecordExpressionSpreads = + module Algebra = + /// No overlap, spread ⊕ field. + [] + let ``{...{A,B},C} = {A,B} ⊕ {C} = {A,B,C}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + + let r2 : {| A : int ; B : int; C : int |} = {| ...r1; C = 3 |} + let r2' : {| A : int ; B : int; C : int |} = {| {||} with ...r1; C = 3 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, field ⊕ spread. + [] + let ``{A,...{B,C}} = {A} ⊕ {B,C} = {A,B,C}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + + let r2 : {| A : int ; B : int; C : int |} = {| C = 3; ...r1 |} + let r2' : {| A : int ; B : int; C : int |} = {| {||} with C = 3; ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, spread ⊕ spread. + [] + let ``{...{A,B},...{C,D}} = {A,B} ⊕ {C,D} = {A,B,C,D}`` () = + let src = + """ + let r1 = {| A = 1 ; B = 2 |} + let r2 = {| C = 3; D = 4 |} + + let r3 : {| A : int ; B : int; C : int; D : int |} = {| ...r1; ...r2 |} + let r4 : {| A : int ; B : int; C : int; D : int |} = {| ...r2; ...r3 |} + let r3' : {| A : int ; B : int; C : int; D : int |} = {| {||} with ...r1; ...r2 |} + let r4' : {| A : int ; B : int; C : int; D : int |} = {| {||} with ...r2; ...r3 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward explicit duplicate field shadows field from spread. + [] + let ``{...{A₀,B},A₁} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + + let r2 : {| A : string; B : int |} = {| ...r1; A = "A" |} + let r2' : {| A : string; B : int |} = {| {||} with ...r1; A = "A" |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward spread field shadows leftward spread field. + [] + let ``{...{A₀,B},...{A₁}} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + let r2 = {| A = "A" |} + + let r3 : {| A : string; B : int |} = {| ...r1; ...r2 |} + let r4 : {| A : int; B : int |} = {| ...r2; ...r1 |} + + let r3' : {| A : string; B : int |} = {| {||} with ...r1; ...r2 |} + let r4' : {| A : int; B : int |} = {| {||} with ...r2; ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward spread field shadows leftward explicit field with warning. + [] + let ``{A₀,...{A₁,B}} = {A₀} ⊕ {A₁,B} = {A₁_warn,B,C}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + + let r2 : {| A : int; B : int |} = {| A = "A"; ...r1 |} + let r2' : {| A : int; B : int |} = {| {||} with A = "A"; ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Warning 3892, Line 4, Col 67, Line 4, Col 72, "Spread field 'A: int' shadows an explicitly declared field with the same name." + Warning 3892, Line 5, Col 78, Line 5, Col 83, "Spread field 'A: int' shadows an explicitly declared field with the same name." + ] + + /// Explicit duplicate fields remain disallowed. + [] + let ``{A₀,...{A₁,B},A₂} = {A₀} ⊕ {A₁,B} ⊕ {A₂} = {A₁_warn,B,A₂_error}`` () = + let src = + """ + let r1 = {| A = 1; B = 2 |} + + let r2 = {| A = "A"; ...r1; A = 3.14 |} + let r2' = {| {||} with A = "A"; ...r1; A = 3.14 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Warning 3892, Line 4, Col 42, Line 4, Col 47, "Spread field 'A: int' shadows an explicitly declared field with the same name." + Error 3522, Line 4, Col 49, Line 4, Col 57, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 5, Col 31, Line 5, Col 71, "The field 'A' appears multiple times in this record expression." + ] + + [] + let ``No dupes allowed, multiple`` () = + let src = + """ + let r1 = {| A = 1; B = "B" |} + let r2 = {| A = 3m |} + + let r3 = {| ...r2; A = "A"; ...r1; A = 3.14 |} + let r3' = {| {||} with ...r2; A = "A"; ...r1; A = 3.14 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Warning 3892, Line 5, Col 49, Line 5, Col 54, "Spread field 'A: int' shadows an explicitly declared field with the same name." + Error 3522, Line 5, Col 56, Line 5, Col 64, "The field 'A' appears multiple times in this record expression." + Error 3522, Line 6, Col 31, Line 6, Col 78, "The field 'A' appears multiple times in this record expression." + ] + + [] + let ``{...{A,B,C}}:{B} = {A,B,C} ∩ {B} = {B}`` () = + let src = + """ + let src = {| A = 1; B = "B"; C = 3m |} + + let typedTarget : {| B : string |} = {| ...src |} + let typedTarget' : {| B : string |} = {| {||} with ...src |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``{...{}} = ∅ ⊕ ∅ = ∅`` () = + let src = + """ + module M + + let r = {| ...{||} |} + let r' = {| {||} with ...{||} |} + + if r <> {||} then failwith $"Expected {{||}} but got %A{r}." + if r' <> {||} then failwith $"Expected {{||}} but got %A{r'}." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> asExe + |> compileAndRun + |> shouldSucceed + + module Accessibility = + /// Fields should have the accessibility of the target type. + /// A spread from less to more accessible is valid as long as the less accessible + /// fields are accessible at the point of the spread. + [] + let ``Accessibility comes from target`` () = + let src = + """ + let private r1 = {| A = 1; B = "B" |} + + let public r2 : {| A : int; B : string |} = {| ...r1 |} + let public r2' : {| A : int; B : string |} = {| {||} with ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Mutability = + [] + let ``Mutability is _not_ brought over`` () = + let src = + """ + type R1 = { A : int; mutable B : string } + let r1 = { A = 1; B = "B" } + + let r2 = {| ...r1 |} + r2.B <- "99" + + let r2' = {| {||} with ...r1 |} + r2'.B <- "99" + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 799, Line 6, Col 21, Line 6, Col 25, "Invalid assignment" + Error 799, Line 9, Col 21, Line 9, Col 26, "Invalid assignment" + ] + + module GenericTypeParameters = + [] + let ``Single type parameter`` () = + let src = + """ + let f (x : 'a) = + let r1 : {| A : 'a; B : string |} = {| A = x; B = "B" |} + let r2 : {| X : 'a; Y : string |} = {| X = x; Y = "Y" |} + + let r3 : {| A : 'a; B : string; X : 'a; Y : string |} = {| ...r1; ...r2 |} + let r3' : {| A : 'a; B : string; X : 'a; Y : string |} = {| {||} with ...r1; ...r2 |} + r3, r3' + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Multiple type parameters`` () = + let src = + """ + let r1 (x : 'a) = {| A = x; B = "B" |} + let r2 (x : 'a) = {| X = x; Y = "Y" |} + + let r3 (x : 'a) (y : 'b) : {| A : 'a; B : string; X : 'b; Y : string |} = {| ...r1 x; ...r2 y |} + let r3' (x : 'a) (y : 'b) : {| A : 'a; B : string; X : 'b; Y : string |} = {| {||} with ...r1 x; ...r2 y |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Measure attribute on source, present on spread destination`` () = + let src = + """ + let r1 (r2 : {| A : int<'m> |}) : {| A : int<'m> |} = {| ...r2 |} + let r1' (r2 : {| A : int<'m> |}) : {| A : int<'m> |} = {| {||} with ...r2 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Constraints kept`` () = + let src = + """ + let r1<'a when 'a : comparison> (r2 : {| A : 'a |}) : unit -> {| A : 'a |} = fun () -> {| ...r2 |} + let r1'<'a when 'a : comparison> (r2 : {| A : 'a |}) : unit -> {| A : 'a |} = fun () -> {| {||} with ...r2 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module NonRecordSource = + [] + let ``{...class} → error`` () = + let src = + """ + type C () = + member _.A = 1 + member _.B = 2 + + let r = {| ...C () |} + let r' = {| {||} with ...C () |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 6, Col 35, Line 6, Col 39, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 7, Col 46, Line 7, Col 50, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...abstract_class} → error`` () = + let src = + """ + [] + type C () = + abstract A : int + abstract B : int + + let r = + {| + ... + { new C () with + member _.A = 1 + member _.B = 2 } + |} + + let r' = + {| + {||} with + ... + { new C () with + member _.A = 1 + member _.B = 2 } + |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 10, Col 33, Line 12, Col 53, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 19, Col 37, Line 21, Col 57, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...struct} → error`` () = + let src = + """ + [] + type S = + member _.A = 1 + member _.B = 2 + + let r = {| ...S () |} + let r' = {| {||} with ...S () |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 7, Col 35, Line 7, Col 39, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 8, Col 46, Line 8, Col 50, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...interface} → error`` () = + let src = + """ + type IFace = + abstract A : int + abstract B : int + + let r = + {| + ... + { new IFace with + member _.A = 1 + member _.B = 2 } + |} + + let r' = + {| + {||} with + ... + { new IFace with + member _.A = 1 + member _.B = 2 } + |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 9, Col 33, Line 11, Col 53, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 18, Col 37, Line 20, Col 57, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...int} → error`` () = + let src = + """ + let r = {| ...0 |} + let r' = {| {||} with ...0 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 2, Col 35, Line 2, Col 36, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 3, Col 46, Line 3, Col 47, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...(int -> int)} → error`` () = + let src = + """ + let r = {| ...(fun x -> x + 1) |} + let r' = {| {||} with ...(fun x -> x + 1) |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 2, Col 35, Line 2, Col 51, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 3, Col 46, Line 3, Col 62, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + [] + let ``{...int list} → error`` () = + let src = + """ + let r = {| ...[1..10] |} + let r' = {| {||} with ...[1..10] |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3890, Line 2, Col 35, Line 2, Col 42, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 3890, Line 3, Col 46, Line 3, Col 53, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + ] + + module MembersOtherThanRecordFields = + [] + let ``Instance properties that are not record fields are ignored`` () = + let src = + """ + type R1 = + { A : int + B : string } + member this.Lol = string this.A + this.B + + type R2 = { ...R1; C : string } + + let r1 = { A = 3; B = "3"; C = "asdf" } + let r2 : {| A : int; B : string; C : string |} = {| ...r1 |} + let r2' : {| A : int; B : string; C : string |} = {| {||} with ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``All members other than record fields are ignored`` () = + let src = + """ + type R1 = + { A : int + B : int } + member this.Lol = this.A + this.B + member _.Ha () = () + static member X = "3" + static member val Y = 42 + static member Q () = () + + type R2 = { ...R1; C : string } + + let r2 : R2 = { A = 3; B = 3; C = "asdf" } + let r3 : {| A : int; B : int; C : string |} = {| ...r2 |} + let r3' : {| A : int; B : int; C : string |} = {| {||} with ...r2 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Effects = + [] + let ``Effects in spread sources are evaluated exactly once per spread, even if all fields are shadowed`` () = + let src = + """ + let effects = ResizeArray () + let f () = effects.Add "f"; {| A = 0; B = 1 |} + let g () = effects.Add "g"; {| A = 2; B = 3 |} + let h () = effects.Add "h"; {| A = 99 |} + let r = {| ...g (); ...g (); ...h (); A = 100 |} + let r' = {| f () with ...g (); ...g (); ...h (); A = 100 |} + + if r.A <> 100 then failwith $"Expected r.A = 100 but got %d{r.A}." + if r'.A <> 100 then failwith $"Expected r'.A = 100 but got %d{r'.A}." + match List.ofSeq effects with + | ["g"; "g"; "h"; "f"; "g"; "g"; "h"] -> () + | unexpected -> failwith $"Expected [\"g\"; \"g\"; \"h\"; \"f\"; \"g\"; \"g\"; \"h\"] but got %A{unexpected}." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + module BackCompat = + [] + let ``Inference works the same`` () = + let src = + """ + module M + + let f x y = + if x = y then () + else failwith $"Expected %A{x} = %A{y}." + + do f {| a = 1 - 1 |} {| a = Unchecked.defaultof<_> |} + do f {| a = 1 - 1 |} {| {||} with a = Unchecked.defaultof<_> |} + + #nowarn FS3892 // Spread shadowing explicit. + + let r = {| a = Unchecked.defaultof<_> |} + do f {| a = 1 - 1 |} {| a = "a"; ...r |} + do f {| a = 1 - 1 |} {| {||} with a = "a"; ...r |} + + let _ = + let r = {| a = Unchecked.defaultof<_> |} + f {| a = 1 - 1 |} {| a = "a"; ...r |} + f {| a = 1 - 1 |} {| {||} with a = "a"; ...r |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + [] + let ``Inference works the same, again`` () = + let src = + """ + module M + + let f () = + ([], [1]) ||> List.fold (fun acc x -> + let y = + {| + Left = x + Right = 3 + |} + + match acc with + | [] -> [y] + | head :: tail -> {| y with Left = head.Left |} :: tail) + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compile + |> shouldSucceed + + [] + let ``Name resolution order is the same`` () = + let src = + """ + module M + + type RecordTypeB = + { Name: string + FieldB: int } + + // When the anonymous record expression is encountered, it must commit to "RecordTypeB". + // The return type of "f" is, at that point, a variable type + // and must be correctly inferred by the point where we process the subsequence + // dot-notation "f().Name" + let rec f() = + {| Name = "" + FieldA = f().Name + |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compile + |> shouldSucceed + + module Conversions = + [] + let ``Coercions work as though they were field assignments`` () = + let src = + """ + let r1 = {| A = 3; B = 4 |} + let r2 : {| A : obj; B : obj |} = {| ...r1 |} + let r3 : {| A : obj; B : obj |} = {| {||} with ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Implicit conversions work as though they were field assignments`` () = + let src = + """ + [] + type T = + | T of int + static member op_Implicit (T t) = U t + + and [] U = + | U of int + + #nowarn 3391 + + let r1 : {| A : T |} = {| A = T 3 |} + let r2 : {| A : U |} = {| A = T 3 |} + let r2' : {| A : U |} = {| ...r1 |} + let r2'' : {| A : U |} = {| {||} with ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Nullability = + [] + let ``Can't spread from a nullable value`` () = + let src = + """ + let r1 : {| A : int |} | null = null + let r2 = {| ...r1 |} + let r2' = {| {||} with ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> withCheckNulls + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3260, Line 2, Col 30, Line 2, Col 50, "The type '{| A: int |}' does not support a nullness qualification." + Error 43, Line 2, Col 53, Line 2, Col 57, "The type '{| A: int |}' does not have 'null' as a proper value" + ] + + module Structness = + [] + let ``Various structness combinations work`` () = + let src = + """ + type RefNominalRecd = { A : int } + type [] StructNominalRecd = { A : int } + + let refAnonRecd = {| A = 1 |} + let structAnonRecd = struct {| A = 1 |} + let refNominalRecd : RefNominalRecd = { A = 1 } + let structNominalRecd : StructNominalRecd = { A = 1 } + + module NewAnonRecd = + let ``ref anon src, no explicit target, stays ref`` = {| ...refAnonRecd; B = 2 |} + let ``ref anon src, explicit struct target, becomes struct`` = struct {| ...refAnonRecd; B = 2 |} + let ``ref anon src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| ...refAnonRecd; B = 2 |} + let ``struct anon src, no explicit target, stays struct`` = {| ...structAnonRecd; B = 2 |} + let ``struct anon src, explicit struct target, stays struct`` = struct {| ...structAnonRecd; B = 2 |} + let ``struct anon src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| ...structAnonRecd; B = 2 |} + + let ``ref nominal src, no explicit target, stays ref`` = {| ...refAnonRecd; B = 2 |} + let ``ref nominal src, explicit struct target, becomes struct`` = struct {| ...refAnonRecd; B = 2 |} + let ``ref nominal src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| ...refAnonRecd; B = 2 |} + let ``struct nominal src, no explicit target, stays struct`` = {| ...structAnonRecd; B = 2 |} + let ``struct nominal src, explicit struct target, stays struct`` = struct {| ...structAnonRecd; B = 2 |} + let ``struct nominal src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| ...structAnonRecd; B = 2 |} + + module CopyAndUpdateAnonRecd = + let ``ref anon src, no explicit target, stays ref`` = {| {||} with ...refAnonRecd; B = 2 |} + let ``ref anon src, explicit struct target, becomes struct`` = struct {| {||} with ...refAnonRecd; B = 2 |} + let ``ref anon src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| {||} with ...refAnonRecd; B = 2 |} + let ``struct anon src, no explicit target, stays struct`` = {| {||} with ...structAnonRecd; B = 2 |} + let ``struct anon src, explicit struct target, stays struct`` = struct {| {||} with ...structAnonRecd; B = 2 |} + let ``struct anon src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| {||} with ...structAnonRecd; B = 2 |} + + let ``ref nominal src, no explicit target, stays ref`` = {| {||} with ...refAnonRecd; B = 2 |} + let ``ref nominal src, explicit struct target, becomes struct`` = struct {| {||} with ...refAnonRecd; B = 2 |} + let ``ref nominal src, inferred struct target, becomes struct`` : struct {| A : int; B : int |} = {| {||} with ...refAnonRecd; B = 2 |} + let ``struct nominal src, no explicit target, stays struct`` = {| {||} with ...structAnonRecd; B = 2 |} + let ``struct nominal src, explicit struct target, stays struct`` = struct {| {||} with ...structAnonRecd; B = 2 |} + let ``struct nominal src, inferred struct target, stays struct`` : struct {| A : int; B : int |} = {| {||} with ...structAnonRecd; B = 2 |} + """ + + Fsx src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + module NominalRecordExpressionSpreads = + module Algebra = + /// No overlap, spread ⊕ field. + [] + let ``{...{A,B},C} = {A,B} ⊕ {C} = {A,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { A : int; B : int; C : int } + + let r1 = { A = 1; B = 2 } + let r2 = { ...r1; C = 3 } + + let r1' = {| A = 1; B = 2 |} + let r2' = { ...r1; C = 3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, field ⊕ spread. + [] + let ``{A,...{B,C}} = {A} ⊕ {B,C} = {A,B,C}`` () = + let src = + """ + type R1 = { B : int; C : int } + type R2 = { A : int; B : int; C : int } + + let r1 = { B = 1; C = 2 } + let r2 = { A = 3; ...r1 } + + let r1' = {| B = 1; C = 2 |} + let r2' = { A = 3; ...r1 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// No overlap, spread ⊕ spread. + [] + let ``{...{A,B},...{C,D}} = {A,B} ⊕ {C,D} = {A,B,C,D}`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { C : int; D : int } + type R3 = { A : int; B : int; C : int; D : int } + + let r1 = { A = 1; B = 2 } + let r2 = { C = 3; D = 4 } + let r3 = { ...r1; ...r2 } + let r3' = { ...r2; ...r3 } + + let r1' = {| A = 1; B = 2 |} + let r2' = {| C = 3; D = 4 |} + let r3'' = { ...r1; ...r2 } + let r3''' = { ...r2; ...r3 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + /// Rightward explicit duplicate field shadows field from spread. + [] + let ``{...{A₀,B},A₁} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + module M + + type R1 = { A : int; B : int } + + let r1 = { A = 1; B = 2 } + let r1' = { ...r1; A = 99 } + + if r1'.A <> 99 then failwith $"Expected r1'.A = 99 but got %A{r1'.A}." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> asExe + |> compileAndRun + |> shouldSucceed + + /// Rightward spread field shadows leftward spread field. + [] + let ``{...{A₀,B},...{A₁}} = {A₀,B} ⊕ {A₁} = {A₁,B,C}`` () = + let src = + """ + module M + + type R1 = { A : int; B : int } + + let r1 = { A = 1; B = 2 } + let r1' = { ...r1; ...{| A = 99 |} } + + if r1'.A <> 99 then failwith $"Expected r1'.A = 99 but got %A{r1'.A}." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> asExe + |> compileAndRun + |> shouldSucceed + + /// Rightward spread field shadows leftward explicit field with warning. + [] + let ``{A₀,...{A₁,B}} = {A₀} ⊕ {A₁,B} = {A₁_warn,B,C}`` () = + let src = + """ + type R1 = { A : int; B : int } + + let r1 = { A = 1; B = 2 } + let r1' = { A = 0; ...r1 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Warning 3892, Line 5, Col 40, Line 5, Col 45, "Spread field 'A: int' shadows an explicitly declared field with the same name.") + + /// Explicit duplicate fields remain disallowed. + [] + let ``{A₀,...{A₁,B},A₂} = {A₀} ⊕ {A₁,B} ⊕ {A₂} = {A₁_warn,B,A₂_error}`` () = + let src = + """ + type R1 = { A : int; B : int } + + let r1 = { A = 1; B = 2; A = 3; ...{| A = 4 |}; A = 5 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 668, Line 4, Col 46, Line 4, Col 51, "The field 'A' appears multiple times in this record expression or pattern" + Warning 3892, Line 4, Col 53, Line 4, Col 67, "Spread field 'A: int' shadows an explicitly declared field with the same name." + Error 668, Line 4, Col 69, Line 4, Col 74, "The field 'A' appears multiple times in this record expression or pattern" + ] + + /// Extra fields are ignored. + [] + let ``{...{A,B,C}}:{B} = {A,B,C} ∩ {B} = {B}`` () = + let src = + """ + type R1 = { A : int; B : int; C : int } + type R2 = { B : int } + + let r1 = { A = 1; B = 2; C = 3 } + let r2 : R2 = { ...r1 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module Accessibility = + /// Fields should have the accessibility of the target type. + /// A spread from less to more accessible is valid as long as the less accessible + /// fields are accessible at the point of the spread. + [] + let ``Accessibility comes from target`` () = + let src = + """ + type private R1 = { A : int; B : string } + type public R2 = { ...R1 } + + let private r1 = { A = 1; B = "2" } + let public r2 : R2 = { ...r1 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + module NonRecordSource = + [] + let ``{...class} → error`` () = + let src = + """ + type C () = + member _.A = 1 + member _.B = 2 + + type R = { A : int } + + let r : R = { ...C () } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 8, Col 35, Line 8, Col 42, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 8, Col 33, Line 8, Col 44, "No assignment given for field 'A' of type 'Test.R'" + ] + + [] + let ``{...abstract_class} → error`` () = + let src = + """ + [] + type C () = + abstract A : int + abstract B : int + + type R = { A : int } + + let r : R = + { + ... + { new C () with + member _.A = 1 + member _.B = 2 } + } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 11, Col 29, Line 14, Col 53, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 10, Col 25, Line 15, Col 26, "No assignment given for field 'A' of type 'Test.R'" + ] + + [] + let ``{...struct} → error`` () = + let src = + """ + [] + type S = + member _.A = 1 + member _.B = 2 + + type R = { A : int } + + let r : R = { ...S () } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 9, Col 35, Line 9, Col 42, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 9, Col 33, Line 9, Col 44, "No assignment given for field 'A' of type 'Test.R'" + ] + + [] + let ``{...interface} → error`` () = + let src = + """ + type IFace = + abstract A : int + abstract B : int + + type R = { A : int } + + let r : R = + { + ... + { new IFace with + member _.A = 1 + member _.B = 2 } + } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 10, Col 29, Line 13, Col 53, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 9, Col 25, Line 14, Col 26, "No assignment given for field 'A' of type 'Test.R'" + ] + + [] + let ``{...int} → error`` () = + let src = + """ + type R = { A : int } + + let r : R = { ...int } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 4, Col 35, Line 4, Col 41, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 4, Col 33, Line 4, Col 43, "No assignment given for field 'A' of type 'Test.R'" + ] + + [] + let ``{...(int -> int)} → error`` () = + let src = + """ + type R = { A : int } + + let r = { ...(fun x -> x + 1) } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withSingleDiagnostic (Error 3889, Line 4, Col 31, Line 4, Col 50, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type.") + + module MembersOtherThanRecordFields = + [] + let ``Instance properties that are not record fields are ignored`` () = + let src = + """ + type R1 = + { A : int + B : string } + member this.Lol = string this.A + this.B + + type R2 = { ...R1; C : string } + + let _ : R2 = { A = 3; B = "3"; C = "asdf" } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``All members other than record fields are ignored`` () = + let src = + """ + type R1 = + { A : int + B : int } + member this.Lol = this.A + this.B + member _.Ha () = () + static member X = "3" + static member val Y = 42 + static member Q () = () + + type R2 = { ...R1; C : string } + + let r2 : R2 = { A = 3; B = 3; C = "asdf" } + ignore r2.Lol // Should not exist. + r2.Ha () // Should not exist. + ignore R2.Y // Should not exist. + R2.Q () // Should not exist. + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 39, Line 14, Col 31, Line 14, Col 34, "The type 'R2' does not define a field, constructor, or member named 'Lol'." + Error 39, Line 15, Col 24, Line 15, Col 26, "The type 'R2' does not define a field, constructor, or member named 'Ha'." + Error 39, Line 16, Col 31, Line 16, Col 32, "The type 'R2' does not define a field, constructor, or member named 'Y'." + Error 39, Line 17, Col 24, Line 17, Col 25, "The type 'R2' does not define a field, constructor, or member named 'Q'." + ] + + module Effects = + [] + let ``Effects in spread sources are evaluated exactly once per spread, even if all fields are shadowed`` () = + let src = + """ + type R = { A : int; B : int } + + let effects = ResizeArray () + let f () = effects.Add "f"; { A = 0; B = 1 } + let g () = effects.Add "g"; { A = 2; B = 3 } + let h () = effects.Add "h"; {| A = 99 |} + let r = { ...g (); ...g (); ...h (); A = 100 } + let r' = { f () with ...g (); ...g (); ...h (); A = 100 } + + if r.A <> 100 then failwith $"Expected r.A = 100 but got %d{r.A}." + if r'.A <> 100 then failwith $"Expected r'.A = 100 but got %d{r'.A}." + match List.ofSeq effects with + | ["g"; "g"; "h"; "f"; "g"; "g"; "h"] -> () + | unexpected -> failwith $"Expected [\"g\"; \"g\"; \"h\"; \"f\"; \"g\"; \"g\"; \"h\"] but got %A{unexpected}." + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + module Conversions = + [] + let ``Coercions work as though they were field assignments`` () = + let src = + """ + type R1 = { A : int; B : string } + [] + type R2 = { A : obj; B : obj } + let r1 = { A = 3; B = "4" } + let r2 : R2 = { ...r1 } + let r1' = {| A = 3; B = "4" |} + let r3 : R2 = { ...r1' } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> typecheck + |> shouldSucceed + + [] + let ``Implicit conversions work as though they were field assignments`` () = + let src = + """ + type T = + | T of int + static member op_Implicit (T t) = U t + + and U = + | U of int + + type R1 = { A : T } + type R2 = { A : U } + + let r1 : R1 = { A = T 3 } + let r2 : R2 = { A = T 3 } + let r3 : R2 = { ...r1 } + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> ignoreWarnings + |> typecheck + |> shouldSucceed + |> withDiagnostics [ + Warning 3391, Line 13, Col 41, Line 13, Col 44, """This expression uses the implicit conversion 'static member T.op_Implicit: T -> U' to convert type 'T' to type 'U'. See https://aka.ms/fsharp-implicit-convs. This warning may be disabled using '#nowarn "3391".""" + Warning 3391, Line 14, Col 35, Line 14, Col 44, """This expression uses the implicit conversion 'static member T.op_Implicit: T -> U' to convert type 'T' to type 'U'. See https://aka.ms/fsharp-implicit-convs. This warning may be disabled using '#nowarn "3391".""" + ] + + module Nullability = + [] + let ``Can't spread from a nullable value`` () = + let src = + """ + type R = { A : int} + let r1 : R | null = null + let r2 : R = { ...r1 } + let r2' : {| A : int |} = {| ...r1 |} + """ + + FSharp src + |> withLangVersion SupportedLangVersion + |> withCheckNulls + |> typecheck + |> shouldFail + |> withDiagnostics [ + Error 3889, Line 4, Col 36, Line 4, Col 41, "The source expression of a spread into a nominal record expression must have a nominal or anonymous record type." + Error 764, Line 4, Col 34, Line 4, Col 43, "No assignment given for field 'A' of type 'Test.R'" + Error 3890, Line 5, Col 53, Line 5, Col 55, "The source expression of a spread into an anonymous record expression must have a nominal or anonymous record type." + Error 1, Line 5, Col 47, Line 5, Col 58, "This anonymous record is missing field 'A'." + ] + + module Inference = + [] + let ``No target type specified, no additional fields, target type inferred to be same as spread source type`` () = + let src = + """ + type R1 = { A : int; B : int } + type R2 = { A : int; B : int; C : int } + + let r1 = { A = 1; B = 2 } + let anon1 = {| A = 1; B = 2 |} + let r1InferredFromR1 = { ...r1 } + let r1InferredFromAnon = { ...anon1 } + + let r2 = { A = 1; B = 2; C = 3 } + let anon2 = {| A = 1; B = 2; C = 3 |} + let r2InferredFromR2 = { ...r2 } + let r2InferredFromAnon = { ...anon2 } + + let ``type of r1InferredFromR1`` = r1InferredFromR1.GetType () + if ``type of r1InferredFromR1`` <> typeof then + failwith $"Expected r1InferredFromR1 to have type R1 but got {``type of r1InferredFromR1``.Name}." + + let ``type of r1InferredFromAnon`` = r1InferredFromAnon.GetType () + if ``type of r1InferredFromAnon`` <> typeof then + failwith $"Expected r1InferredFromAnon to have type R1 but got {``type of r1InferredFromAnon``.Name}." + + let ``type of r2InferredFromR2`` = r2InferredFromR2.GetType () + if ``type of r2InferredFromR2`` <> typeof then + failwith $"Expected r2InferredFromR2 to have type R2 but got {``type of r2InferredFromR2``.Name}." + + let ``type of r2InferredFromAnon`` = r2InferredFromAnon.GetType () + if ``type of r2InferredFromAnon`` <> typeof then + failwith $"Expected r2InferredFromAnon to have type R2 but got {``type of r2InferredFromAnon``.Name}." + """ + + Fsx src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed + + module Structness = + [] + let ``Various structness combinations work`` () = + let src = + """ + type RefNominalRecd = { A : int; B : int } + type [] StructNominalRecd = { A : int; B : int } + + let refAnonRecd = {| A = 1; B = 2 |} + let structAnonRecd = struct {| A = 1; B = 2 |} + let refNominalRecd : RefNominalRecd = { A = 1; B = 2 } + let structNominalRecd : StructNominalRecd = { A = 1; B = 2 } + + let ``ref nominal src, ref nominal dst`` : RefNominalRecd = { ...refNominalRecd; B = 3 } + let ``ref nominal src, struct nominal dst`` : StructNominalRecd = { ...refNominalRecd; B = 3 } + let ``struct nominal src, ref nominal dst`` : RefNominalRecd = { ...structNominalRecd; B = 3 } + let ``struct nominal src, struct nominal dst`` : StructNominalRecd = { ...structNominalRecd; B = 3 } + let ``ref anon src, ref nominal dst`` : RefNominalRecd = { ...refAnonRecd; B = 3 } + let ``ref anon src, struct nominal dst`` : StructNominalRecd = { ...refAnonRecd; B = 3 } + let ``struct anon src, ref nominal dst`` : RefNominalRecd = { ...structAnonRecd; B = 3 } + let ``struct anon src, struct nominal dst`` : StructNominalRecd = { ...structAnonRecd; B = 3 } + """ + + Fsx src + |> withLangVersion SupportedLangVersion + |> compileExeAndRun + |> shouldSucceed diff --git a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.bsl b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.bsl index 9b33caf5d71..62b135e208b 100644 --- a/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.bsl +++ b/tests/FSharp.Compiler.Service.Tests/FSharp.Compiler.Service.SurfaceArea.netstandard20.bsl @@ -6612,6 +6612,28 @@ FSharp.Compiler.Syntax.QualifiedNameOfFile: Int32 get_Tag() FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String Text FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String ToString() FSharp.Compiler.Syntax.QualifiedNameOfFile: System.String get_Text() +FSharp.Compiler.Syntax.RecordBinding+Field: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] declExpr +FSharp.Compiler.Syntax.RecordBinding+Field: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_declExpr() +FSharp.Compiler.Syntax.RecordBinding+Field: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.RecordBinding+Field: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() +FSharp.Compiler.Syntax.RecordBinding+Field: System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean] get_name() +FSharp.Compiler.Syntax.RecordBinding+Field: System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean] name +FSharp.Compiler.Syntax.RecordBinding+Spread: FSharp.Compiler.Syntax.SynExprSpread get_spread() +FSharp.Compiler.Syntax.RecordBinding+Spread: FSharp.Compiler.Syntax.SynExprSpread spread +FSharp.Compiler.Syntax.RecordBinding+Tags: Int32 Field +FSharp.Compiler.Syntax.RecordBinding+Tags: Int32 Spread +FSharp.Compiler.Syntax.RecordBinding: Boolean IsField +FSharp.Compiler.Syntax.RecordBinding: Boolean IsSpread +FSharp.Compiler.Syntax.RecordBinding: Boolean get_IsField() +FSharp.Compiler.Syntax.RecordBinding: Boolean get_IsSpread() +FSharp.Compiler.Syntax.RecordBinding: FSharp.Compiler.Syntax.RecordBinding NewField(System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr]) +FSharp.Compiler.Syntax.RecordBinding: FSharp.Compiler.Syntax.RecordBinding NewSpread(FSharp.Compiler.Syntax.SynExprSpread) +FSharp.Compiler.Syntax.RecordBinding: FSharp.Compiler.Syntax.RecordBinding+Field +FSharp.Compiler.Syntax.RecordBinding: FSharp.Compiler.Syntax.RecordBinding+Spread +FSharp.Compiler.Syntax.RecordBinding: FSharp.Compiler.Syntax.RecordBinding+Tags +FSharp.Compiler.Syntax.RecordBinding: Int32 Tag +FSharp.Compiler.Syntax.RecordBinding: Int32 get_Tag() +FSharp.Compiler.Syntax.RecordBinding: System.String ToString() FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(FSharp.Compiler.Syntax.SeqExprOnly) FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(FSharp.Compiler.Syntax.SeqExprOnly, System.Collections.IEqualityComparer) FSharp.Compiler.Syntax.SeqExprOnly: Boolean Equals(System.Object) @@ -7092,8 +7114,8 @@ FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.SyntaxTrivia.SynExprAno FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.SyntaxTrivia.SynExprAnonRecdTrivia trivia FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+AnonRecd: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynLongIdent,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynLongIdent,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]] recordFields +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread] recordFields FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo FSharp.Compiler.Syntax.SynExpr+AnonRecd: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() FSharp.Compiler.Syntax.SynExpr+App: Boolean get_isInfix() @@ -7476,8 +7498,8 @@ FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+Quote: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExpr+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField] get_recordFields() -FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField] recordFields +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread] get_recordFields() +FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread] recordFields FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] copyInfo FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]] get_copyInfo() FSharp.Compiler.Syntax.SynExpr+Record: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]] baseInfo @@ -7828,7 +7850,7 @@ FSharp.Compiler.Syntax.SynExpr: Boolean get_IsWhileBang() FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturn() FSharp.Compiler.Syntax.SynExpr: Boolean get_IsYieldOrReturnFrom() FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAddressOf(Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynLongIdent,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range],FSharp.Compiler.Syntax.SynExpr]], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynExprAnonRecdTrivia) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewAnonRecd(Boolean, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynExprAnonRecdTrivia) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewApp(FSharp.Compiler.Syntax.ExprAtomicFlag, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArbitraryAfterError(System.String, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewArrayOrList(Boolean, Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) @@ -7879,7 +7901,7 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewNull(FSharp.Co FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewObjExpr(FSharp.Compiler.Syntax.SynType, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynBinding], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynMemberDefn], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynInterfaceImpl], FSharp.Compiler.Text.Range, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewParen(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewQuote(FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Syntax.SynExpr, Boolean, FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordField], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Syntax.SynExpr,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]],FSharp.Compiler.Text.Range]], Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Syntax.SynExpr,System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequential(FSharp.Compiler.Syntax.DebugPointAtSequential, Boolean, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynExprSequentialTrivia) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSequentialOrImplicitYield(FSharp.Compiler.Syntax.DebugPointAtSequential, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Syntax.SynExpr NewSet(FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) @@ -7975,8 +7997,44 @@ FSharp.Compiler.Syntax.SynExpr: FSharp.Compiler.Text.Range get_RangeWithoutAnyEx FSharp.Compiler.Syntax.SynExpr: Int32 Tag FSharp.Compiler.Syntax.SynExpr: Int32 get_Tag() FSharp.Compiler.Syntax.SynExpr: System.String ToString() +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Syntax.SynExprAnonRecordField NewSynExprAnonRecordField(FSharp.Compiler.Syntax.SynLongIdent, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Syntax.SynLongIdent fieldName +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Syntax.SynLongIdent get_fieldName() +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExprAnonRecordField: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExprAnonRecordField: Int32 Tag +FSharp.Compiler.Syntax.SynExprAnonRecordField: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprAnonRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange +FSharp.Compiler.Syntax.SynExprAnonRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() +FSharp.Compiler.Syntax.SynExprAnonRecordField: System.String ToString() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Field: FSharp.Compiler.Syntax.SynExprAnonRecordField field +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Field: FSharp.Compiler.Syntax.SynExprAnonRecordField get_field() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Field: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Field: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynExprSpread get_spread() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynExprSpread spread +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Spread: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Spread: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Tags: Int32 Field +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Tags: Int32 Spread +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Boolean IsField +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Boolean IsSpread +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Boolean get_IsField() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Boolean get_IsSpread() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread NewField(FSharp.Compiler.Syntax.SynExprAnonRecordField, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread NewSpread(FSharp.Compiler.Syntax.SynExprSpread, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Field +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Spread +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread+Tags +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Text.Range Range +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: FSharp.Compiler.Text.Range get_Range() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Int32 Tag +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprAnonRecordFieldOrSpread: System.String ToString() FSharp.Compiler.Syntax.SynExprModule: Boolean shouldBeParenthesizedInContext(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynExpr) -FSharp.Compiler.Syntax.SynExprRecordField: FSharp.Compiler.Syntax.SynExprRecordField NewSynExprRecordField(System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprRecordField: FSharp.Compiler.Syntax.SynExprRecordField NewSynExprRecordField(System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynExprRecordField: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynExprRecordField: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynExprRecordField: Int32 Tag @@ -7985,11 +8043,41 @@ FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[ FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr] get_expr() FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] equalsRange FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Range] get_equalsRange() -FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator -FSharp.Compiler.Syntax.SynExprRecordField: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() FSharp.Compiler.Syntax.SynExprRecordField: System.String ToString() FSharp.Compiler.Syntax.SynExprRecordField: System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean] fieldName FSharp.Compiler.Syntax.SynExprRecordField: System.Tuple`2[FSharp.Compiler.Syntax.SynLongIdent,System.Boolean] get_fieldName() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Field: FSharp.Compiler.Syntax.SynExprRecordField field +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Field: FSharp.Compiler.Syntax.SynExprRecordField get_field() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Field: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Field: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynExprSpread get_spread() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynExprSpread spread +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Spread: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] blockSeparator +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Spread: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]] get_blockSeparator() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Tags: Int32 Field +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Tags: Int32 Spread +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Boolean IsField +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Boolean IsSpread +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Boolean get_IsField() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Boolean get_IsSpread() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread NewField(FSharp.Compiler.Syntax.SynExprRecordField, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread NewSpread(FSharp.Compiler.Syntax.SynExprSpread, Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Text.Position]]]) +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Field +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Spread +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread+Tags +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Int32 Tag +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprRecordFieldOrSpread: System.String ToString() +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Syntax.SynExpr expr +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Syntax.SynExpr get_expr() +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Syntax.SynExprSpread NewSynExprSpread(FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynExpr, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Text.Range get_spreadRange() +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynExprSpread: FSharp.Compiler.Text.Range spreadRange +FSharp.Compiler.Syntax.SynExprSpread: Int32 Tag +FSharp.Compiler.Syntax.SynExprSpread: Int32 get_Tag() +FSharp.Compiler.Syntax.SynExprSpread: System.String ToString() FSharp.Compiler.Syntax.SynField: Boolean get_isMutable() FSharp.Compiler.Syntax.SynField: Boolean get_isStatic() FSharp.Compiler.Syntax.SynField: Boolean isMutable @@ -8014,6 +8102,24 @@ FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Com FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility FSharp.Compiler.Syntax.SynField: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() FSharp.Compiler.Syntax.SynField: System.String ToString() +FSharp.Compiler.Syntax.SynFieldOrSpread+Field: FSharp.Compiler.Syntax.SynField field +FSharp.Compiler.Syntax.SynFieldOrSpread+Field: FSharp.Compiler.Syntax.SynField get_field() +FSharp.Compiler.Syntax.SynFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynTypeSpread get_spread() +FSharp.Compiler.Syntax.SynFieldOrSpread+Spread: FSharp.Compiler.Syntax.SynTypeSpread spread +FSharp.Compiler.Syntax.SynFieldOrSpread+Tags: Int32 Field +FSharp.Compiler.Syntax.SynFieldOrSpread+Tags: Int32 Spread +FSharp.Compiler.Syntax.SynFieldOrSpread: Boolean IsField +FSharp.Compiler.Syntax.SynFieldOrSpread: Boolean IsSpread +FSharp.Compiler.Syntax.SynFieldOrSpread: Boolean get_IsField() +FSharp.Compiler.Syntax.SynFieldOrSpread: Boolean get_IsSpread() +FSharp.Compiler.Syntax.SynFieldOrSpread: FSharp.Compiler.Syntax.SynFieldOrSpread NewField(FSharp.Compiler.Syntax.SynField) +FSharp.Compiler.Syntax.SynFieldOrSpread: FSharp.Compiler.Syntax.SynFieldOrSpread NewSpread(FSharp.Compiler.Syntax.SynTypeSpread) +FSharp.Compiler.Syntax.SynFieldOrSpread: FSharp.Compiler.Syntax.SynFieldOrSpread+Field +FSharp.Compiler.Syntax.SynFieldOrSpread: FSharp.Compiler.Syntax.SynFieldOrSpread+Spread +FSharp.Compiler.Syntax.SynFieldOrSpread: FSharp.Compiler.Syntax.SynFieldOrSpread+Tags +FSharp.Compiler.Syntax.SynFieldOrSpread: Int32 Tag +FSharp.Compiler.Syntax.SynFieldOrSpread: Int32 get_Tag() +FSharp.Compiler.Syntax.SynFieldOrSpread: System.String ToString() FSharp.Compiler.Syntax.SynIdent: FSharp.Compiler.Syntax.Ident get_ident() FSharp.Compiler.Syntax.SynIdent: FSharp.Compiler.Syntax.Ident ident FSharp.Compiler.Syntax.SynIdent: FSharp.Compiler.Syntax.SynIdent NewSynIdent(FSharp.Compiler.Syntax.Ident, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.SyntaxTrivia.IdentTrivia]) @@ -9881,8 +9987,8 @@ FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range ge FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+None: FSharp.Compiler.Text.Range range FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range get_range() FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: FSharp.Compiler.Text.Range range -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] get_recordFields() -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField] recordFields +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynFieldOrSpread] get_recordFieldsAndSpreads() +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynFieldOrSpread] recordFieldsAndSpreads FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] accessibility FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Record: Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess] get_accessibility() FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Tags: Int32 Enum @@ -9926,7 +10032,7 @@ FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefn FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewGeneral(FSharp.Compiler.Syntax.SynTypeDefnKind, Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[FSharp.Compiler.Syntax.SynType,FSharp.Compiler.Text.Range,Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.Ident]]], Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[FSharp.Compiler.Syntax.SynValSig,FSharp.Compiler.Syntax.SynMemberFlags]], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], Boolean, Boolean, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynPat], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewLibraryOnlyILAssembly(System.Object, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewNone(FSharp.Compiler.Text.Range) -FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewRecord(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynFieldOrSpread], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewTypeAbbrev(FSharp.Compiler.Syntax.ParserDetail, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr NewUnion(Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynUnionCase], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr+Enum @@ -9943,6 +10049,16 @@ FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: FSharp.Compiler.Text.Range get_Ran FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 Tag FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: Int32 get_Tag() FSharp.Compiler.Syntax.SynTypeDefnSimpleRepr: System.String ToString() +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Syntax.SynType get_ty() +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Syntax.SynType ty +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Syntax.SynTypeSpread NewSynTypeSpread(FSharp.Compiler.Text.Range, FSharp.Compiler.Syntax.SynType, FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Text.Range get_range() +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Text.Range get_spreadRange() +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Text.Range range +FSharp.Compiler.Syntax.SynTypeSpread: FSharp.Compiler.Text.Range spreadRange +FSharp.Compiler.Syntax.SynTypeSpread: Int32 Tag +FSharp.Compiler.Syntax.SynTypeSpread: Int32 get_Tag() +FSharp.Compiler.Syntax.SynTypeSpread: System.String ToString() FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynIdent get_ident() FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynIdent ident FSharp.Compiler.Syntax.SynUnionCase: FSharp.Compiler.Syntax.SynUnionCase NewSynUnionCase(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynAttributeList], FSharp.Compiler.Syntax.SynIdent, FSharp.Compiler.Syntax.SynUnionCaseKind, FSharp.Compiler.Xml.PreXmlDoc, Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynAccess], FSharp.Compiler.Text.Range, FSharp.Compiler.SyntaxTrivia.SynUnionCaseTrivia) @@ -10195,7 +10311,7 @@ FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOptio FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleOrNamespaceSig(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynModuleOrNamespaceSig) FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitModuleSigDecl(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynModuleSigDecl,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynModuleSigDecl) FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitPat(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynPat,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynPat) -FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynField], FSharp.Compiler.Text.Range) +FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordDefn(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SynFieldOrSpread], FSharp.Compiler.Text.Range) FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitRecordField(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynExpr], Microsoft.FSharp.Core.FSharpOption`1[FSharp.Compiler.Syntax.SynLongIdent]) FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitSimplePats(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], FSharp.Compiler.Syntax.SynPat) FSharp.Compiler.Syntax.SyntaxVisitorBase`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] VisitType(Microsoft.FSharp.Collections.FSharpList`1[FSharp.Compiler.Syntax.SyntaxNode], Microsoft.FSharp.Core.FSharpFunc`2[FSharp.Compiler.Syntax.SynType,Microsoft.FSharp.Core.FSharpOption`1[T]], FSharp.Compiler.Syntax.SynType) @@ -11403,6 +11519,7 @@ FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dollar FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Done FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Dot FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDotDot FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DotDotHat FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 DownTo FSharp.Compiler.Tokenization.FSharpTokenKind+Tags: Int32 Downcast @@ -11594,6 +11711,7 @@ FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDollar FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDone FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDot FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDotDot FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDotDotHat FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDownTo FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean IsDowncast @@ -11781,6 +11899,7 @@ FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDollar() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDone() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDot() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDotDot() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDotDotHat() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDownTo() FSharp.Compiler.Tokenization.FSharpTokenKind: Boolean get_IsDowncast() @@ -11968,6 +12087,7 @@ FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FShar FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Done FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Dot FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDot +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDotDot FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DotDotHat FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind DownTo FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind Downcast @@ -12155,6 +12275,7 @@ FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FShar FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Done() FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Dot() FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDot() +FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDotDot() FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DotDotHat() FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_DownTo() FSharp.Compiler.Tokenization.FSharpTokenKind: FSharp.Compiler.Tokenization.FSharpTokenKind get_Downcast() @@ -12330,6 +12451,7 @@ FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 COMMENT FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DO FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT_DOT FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 DOT_DOT_HAT FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 ELSE FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 EQUALS @@ -12394,6 +12516,7 @@ FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_COMMENT() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DO() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT() +FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT_DOT() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_DOT_DOT_HAT() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_ELSE() FSharp.Compiler.Tokenization.FSharpTokenTag: Int32 get_EQUALS() diff --git a/tests/FSharp.Compiler.Service.Tests/ParsedInputModuleTests.fs b/tests/FSharp.Compiler.Service.Tests/ParsedInputModuleTests.fs index 2ff0eebe32b..c671dbab1f4 100644 --- a/tests/FSharp.Compiler.Service.Tests/ParsedInputModuleTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/ParsedInputModuleTests.fs @@ -2,6 +2,7 @@ module FSharp.Compiler.Service.Tests.ParsedInputModuleTests open FSharp.Compiler.Service.Tests.Common open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTreeOps open FSharp.Compiler.Text.Position open Xunit @@ -27,11 +28,11 @@ let ``tryPick record definition test`` () = (pos0, parseTree) ||> ParsedInput.tryPick (fun _path node -> match node with - | SyntaxNode.SynTypeDefn(SynTypeDefn(typeRepr = SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFields = fields), _))) -> Some fields + | SyntaxNode.SynTypeDefn(SynTypeDefn(typeRepr = SynTypeDefnRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads), _))) -> Some fieldsAndSpreads | _ -> None) match fields with - | Some [ SynField (idOpt = Some id1); SynField (idOpt = Some id2) ] when id1.idText = "A" && id2.idText = "B" -> () + | Some [ SynFieldOrSpread.Field (SynField (idOpt = Some id1)); SynFieldOrSpread.Field (SynField (idOpt = Some id2)) ] when id1.idText = "A" && id2.idText = "B" -> () | _ -> failwith "Did not visit record definition" [] @@ -145,9 +146,9 @@ type Y = (pos0, parseTree) ||> ParsedInput.tryPick (fun _path node -> match node with - | SyntaxNode.SynTypeDefnSig(SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFields = fields), _))) -> - fields - |> List.choose (function SynField(idOpt = Some ident) -> Some ident.idText | _ -> None) + | SyntaxNode.SynTypeDefnSig(SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.Simple(SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads), _))) -> + fieldsAndSpreads + |> List.choose (function SynFieldOrSpread.Field (SynField(idOpt = Some ident)) -> Some ident.idText | _ -> None) |> String.concat "," |> Some | _ -> None) diff --git a/tests/FSharp.Compiler.Service.Tests/TreeVisitorTests.fs b/tests/FSharp.Compiler.Service.Tests/TreeVisitorTests.fs index 7d8b10502d3..aa9557b6016 100644 --- a/tests/FSharp.Compiler.Service.Tests/TreeVisitorTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/TreeVisitorTests.fs @@ -31,7 +31,7 @@ let ``Visit record definition test`` () = let parseTree = parseSourceCode("C:\\test.fs", source) match SyntaxTraversal.Traverse(pos0, parseTree, visitor) with - | Some [ SynField (idOpt = Some id1); SynField (idOpt = Some id2) ] when id1.idText = "A" && id2.idText = "B" -> () + | Some [ SynFieldOrSpread.Field (SynField (idOpt = Some id1)); SynFieldOrSpread.Field (SynField (idOpt = Some id2)) ] when id1.idText = "A" && id2.idText = "B" -> () | _ -> failwith "Did not visit record definition" [] @@ -123,7 +123,7 @@ let ``Visit Record in SynTypeDefnSig`` () = { new SyntaxVisitorBase<_>() with member x.VisitRecordDefn(path, fields, range) = fields - |> List.choose (fun (SynField(idOpt = idOpt)) -> idOpt |> Option.map (fun ident -> ident.idText)) + |> List.choose (function SynFieldOrSpread.Field (SynField(idOpt = idOpt)) -> idOpt |> Option.map (fun ident -> ident.idText) | _ -> None) |> String.concat "," |> Some } diff --git a/tests/FSharp.Compiler.Service.Tests/XmlDocTests.fs b/tests/FSharp.Compiler.Service.Tests/XmlDocTests.fs index 8460938b7c1..5bab095f386 100644 --- a/tests/FSharp.Compiler.Service.Tests/XmlDocTests.fs +++ b/tests/FSharp.Compiler.Service.Tests/XmlDocTests.fs @@ -1,9 +1,10 @@ -module FSharp.Compiler.Service.Tests.XmlDocTests +module FSharp.Compiler.Service.Tests.XmlDocTests open FSharp.Compiler.CodeAnalysis open FSharp.Compiler.Service.Tests.Common open FSharp.Compiler.Symbols open FSharp.Compiler.Syntax +open FSharp.Compiler.SyntaxTreeOps open FSharp.Test.Compiler open FSharp.Test.Assert open Xunit @@ -74,9 +75,9 @@ let (|UnionCases|) = function | x -> failwith $"Unexpected ParsedInput %A{x}" let (|Record|) = function - | Types(_, [SynTypeDefn(typeRepr = SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Record(recordFields = fields)))]) - | TypeSigs(_, [SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.Simple(repr = SynTypeDefnSimpleRepr.Record(recordFields = fields)))]) -> - Record(fields) + | Types(_, [SynTypeDefn(typeRepr = SynTypeDefnRepr.Simple(simpleRepr = SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads)))]) + | TypeSigs(_, [SynTypeDefnSig(typeRepr = SynTypeDefnSigRepr.Simple(repr = SynTypeDefnSimpleRepr.Record(recordFieldsAndSpreads = fieldsAndSpreads)))]) -> + Record(fieldsAndSpreads |> List.choose (function SynFieldOrSpread.Field f -> Some f | SynFieldOrSpread.Spread _ -> None)) | x -> failwith $"Unexpected ParsedInput %A{x}" diff --git a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 01.fs.bsl index 7f3dd8badf2..4b7277f1513 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 01.fs.bsl @@ -7,60 +7,69 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (3,5--3,6), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (3,12--3,13)), Const (Int32 1, (3,10--3,11)), - (3,10--3,13)), Const (Int32 1, (3,14--3,15)), - (3,10--3,15)), false, (3,7--3,18)))], (3,0--3,20), - { OpeningBraceRange = (3,0--3,2) }), (3,0--3,20)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (3,5--3,6), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (3,12--3,13)), Const (Int32 1, (3,10--3,11)), + (3,10--3,13)), Const (Int32 1, (3,14--3,15)), + (3,10--3,15)), false, (3,7--3,18)), (3,3--3,18)), + None)], (3,0--3,20), { OpeningBraceRange = (3,0--3,2) }), + (3,0--3,20)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (5,4--5,5), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (5,11--5,12)), Const (Int32 1, (5,9--5,10)), - (5,9--5,12)), Const (Int32 1, (5,13--5,14)), - (5,9--5,14)), false, (5,6--5,17)))], (5,0--5,20), - { OpeningBraceRange = (5,0--5,2) }), (5,0--5,20)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (5,4--5,5), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (5,11--5,12)), Const (Int32 1, (5,9--5,10)), + (5,9--5,12)), Const (Int32 1, (5,13--5,14)), + (5,9--5,14)), false, (5,6--5,17)), (5,2--5,17)), + None)], (5,0--5,20), { OpeningBraceRange = (5,0--5,2) }), + (5,0--5,20)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (7,5--7,6), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (7,12--7,13)), Const (Int32 1, (7,10--7,11)), - (7,10--7,13)), Const (Int32 1, (7,14--7,15)), - (7,10--7,15)), false, (7,7--7,18)))], (7,0--7,21), - { OpeningBraceRange = (7,0--7,2) }), (7,0--7,21))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (7,5--7,6), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (7,12--7,13)), Const (Int32 1, (7,10--7,11)), + (7,10--7,13)), Const (Int32 1, (7,14--7,15)), + (7,10--7,15)), false, (7,7--7,18)), (7,3--7,18)), + None)], (7,0--7,21), { OpeningBraceRange = (7,0--7,2) }), + (7,0--7,21))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--7,21), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 02.fs.bsl index a17975ba1da..0c4619eda96 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 02.fs.bsl @@ -7,60 +7,69 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (3,5--3,6), - Quote - (Ident op_QuotationUntyped, true, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (3,13--3,14)), Const (Int32 1, (3,11--3,12)), - (3,11--3,14)), Const (Int32 1, (3,15--3,16)), - (3,11--3,16)), false, (3,7--3,20)))], (3,0--3,22), - { OpeningBraceRange = (3,0--3,2) }), (3,0--3,22)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (3,5--3,6), + Quote + (Ident op_QuotationUntyped, true, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (3,13--3,14)), Const (Int32 1, (3,11--3,12)), + (3,11--3,14)), Const (Int32 1, (3,15--3,16)), + (3,11--3,16)), false, (3,7--3,20)), (3,3--3,20)), + None)], (3,0--3,22), { OpeningBraceRange = (3,0--3,2) }), + (3,0--3,22)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (5,4--5,5), - Quote - (Ident op_QuotationUntyped, true, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (5,12--5,13)), Const (Int32 1, (5,10--5,11)), - (5,10--5,13)), Const (Int32 1, (5,14--5,15)), - (5,10--5,15)), false, (5,6--5,19)))], (5,0--5,22), - { OpeningBraceRange = (5,0--5,2) }), (5,0--5,22)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (5,4--5,5), + Quote + (Ident op_QuotationUntyped, true, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (5,12--5,13)), Const (Int32 1, (5,10--5,11)), + (5,10--5,13)), Const (Int32 1, (5,14--5,15)), + (5,10--5,15)), false, (5,6--5,19)), (5,2--5,19)), + None)], (5,0--5,22), { OpeningBraceRange = (5,0--5,2) }), + (5,0--5,22)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (7,5--7,6), - Quote - (Ident op_QuotationUntyped, true, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (7,13--7,14)), Const (Int32 1, (7,11--7,12)), - (7,11--7,14)), Const (Int32 1, (7,15--7,16)), - (7,11--7,16)), false, (7,7--7,20)))], (7,0--7,23), - { OpeningBraceRange = (7,0--7,2) }), (7,0--7,23))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (7,5--7,6), + Quote + (Ident op_QuotationUntyped, true, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (7,13--7,14)), Const (Int32 1, (7,11--7,12)), + (7,11--7,14)), Const (Int32 1, (7,15--7,16)), + (7,11--7,16)), false, (7,7--7,20)), (7,3--7,20)), + None)], (7,0--7,23), { OpeningBraceRange = (7,0--7,2) }), + (7,0--7,23))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--7,23), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 03.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 03.fs.bsl index 91f4963b53c..d319e9d8aed 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 03.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 03.fs.bsl @@ -7,78 +7,96 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (3,5--3,6), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (3,12--3,13)), Const (Int32 1, (3,10--3,11)), - (3,10--3,13)), Const (Int32 1, (3,14--3,15)), - (3,10--3,15)), false, (3,7--3,18))); - (SynLongIdent ([B], [], [None]), Some (3,22--3,23), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (3,28--3,34)), (3,28--3,34)), - false, (3,24--3,38)))], (3,0--3,40), - { OpeningBraceRange = (3,0--3,2) }), (3,0--3,40)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (3,5--3,6), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (3,12--3,13)), Const (Int32 1, (3,10--3,11)), + (3,10--3,13)), Const (Int32 1, (3,14--3,15)), + (3,10--3,15)), false, (3,7--3,18)), (3,3--3,18)), + Some ((3,18--3,19), Some (3,19))); + Field + (SynExprAnonRecordField + (SynLongIdent ([B], [], [None]), Some (3,22--3,23), + Quote + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (3,28--3,34)), + (3,28--3,34)), false, (3,24--3,38)), (3,20--3,38)), + None)], (3,0--3,40), { OpeningBraceRange = (3,0--3,2) }), + (3,0--3,40)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (5,4--5,5), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (5,11--5,12)), Const (Int32 1, (5,9--5,10)), - (5,9--5,12)), Const (Int32 1, (5,13--5,14)), - (5,9--5,14)), false, (5,6--5,17))); - (SynLongIdent ([B], [], [None]), Some (5,21--5,22), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (5,27--5,33)), (5,27--5,33)), - false, (5,23--5,37)))], (5,0--5,40), - { OpeningBraceRange = (5,0--5,2) }), (5,0--5,40)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (5,4--5,5), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (5,11--5,12)), Const (Int32 1, (5,9--5,10)), + (5,9--5,12)), Const (Int32 1, (5,13--5,14)), + (5,9--5,14)), false, (5,6--5,17)), (5,2--5,17)), + Some ((5,17--5,18), Some (5,18))); + Field + (SynExprAnonRecordField + (SynLongIdent ([B], [], [None]), Some (5,21--5,22), + Quote + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (5,27--5,33)), + (5,27--5,33)), false, (5,23--5,37)), (5,19--5,37)), + None)], (5,0--5,40), { OpeningBraceRange = (5,0--5,2) }), + (5,0--5,40)); Expr (AnonRecd (false, None, - [(SynLongIdent ([A], [], [None]), Some (7,5--7,6), - Quote - (Ident op_Quotation, false, - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Addition], [], - [Some (OriginalNotation "+")]), None, - (7,12--7,13)), Const (Int32 1, (7,10--7,11)), - (7,10--7,13)), Const (Int32 1, (7,14--7,15)), - (7,10--7,15)), false, (7,7--7,18))); - (SynLongIdent ([B], [], [None]), Some (7,22--7,23), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (7,28--7,34)), (7,28--7,34)), - false, (7,24--7,38)))], (7,0--7,41), - { OpeningBraceRange = (7,0--7,2) }), (7,0--7,41))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (7,5--7,6), + Quote + (Ident op_Quotation, false, + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], + [Some (OriginalNotation "+")]), None, + (7,12--7,13)), Const (Int32 1, (7,10--7,11)), + (7,10--7,13)), Const (Int32 1, (7,14--7,15)), + (7,10--7,15)), false, (7,7--7,18)), (7,3--7,18)), + Some ((7,18--7,19), Some (7,19))); + Field + (SynExprAnonRecordField + (SynLongIdent ([B], [], [None]), Some (7,22--7,23), + Quote + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (7,28--7,34)), + (7,28--7,34)), false, (7,24--7,38)), (7,20--7,38)), + None)], (7,0--7,41), { OpeningBraceRange = (7,0--7,2) }), + (7,0--7,41))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--7,41), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 04.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 04.fs.bsl index 5577001a81e..e0f12c90800 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonRecd - Quotation 04.fs.bsl @@ -7,57 +7,87 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([Outer], [], [None]), Some (3,9--3,10), - AnonRecd - (false, None, - [(SynLongIdent ([Inner], [], [None]), Some (3,20--3,21), + [Field + (SynExprAnonRecordField + (SynLongIdent ([Outer], [], [None]), Some (3,9--3,10), + AnonRecd + (false, None, + [Field + (SynExprAnonRecordField + (SynLongIdent ([Inner], [], [None]), + Some (3,20--3,21), + Quote + (Ident op_Quotation, false, + Const (Int32 1, (3,25--3,26)), false, + (3,22--3,29)), (3,14--3,29)), None)], + (3,11--3,31), { OpeningBraceRange = (3,11--3,13) }), + (3,3--3,31)), Some ((3,31--3,32), Some (3,32))); + Field + (SynExprAnonRecordField + (SynLongIdent ([Other], [], [None]), Some (3,39--3,40), Quote - (Ident op_Quotation, false, - Const (Int32 1, (3,25--3,26)), false, (3,22--3,29)))], - (3,11--3,31), { OpeningBraceRange = (3,11--3,13) })); - (SynLongIdent ([Other], [], [None]), Some (3,39--3,40), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (3,45--3,51)), (3,45--3,51)), - false, (3,41--3,55)))], (3,0--3,57), - { OpeningBraceRange = (3,0--3,2) }), (3,0--3,57)); + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (3,45--3,51)), + (3,45--3,51)), false, (3,41--3,55)), (3,33--3,55)), + None)], (3,0--3,57), { OpeningBraceRange = (3,0--3,2) }), + (3,0--3,57)); Expr (AnonRecd (false, None, - [(SynLongIdent ([Outer], [], [None]), Some (5,8--5,9), - AnonRecd - (false, None, - [(SynLongIdent ([Inner], [], [None]), Some (5,19--5,20), + [Field + (SynExprAnonRecordField + (SynLongIdent ([Outer], [], [None]), Some (5,8--5,9), + AnonRecd + (false, None, + [Field + (SynExprAnonRecordField + (SynLongIdent ([Inner], [], [None]), + Some (5,19--5,20), + Quote + (Ident op_Quotation, false, + Const (Int32 1, (5,24--5,25)), false, + (5,21--5,28)), (5,13--5,28)), None)], + (5,10--5,30), { OpeningBraceRange = (5,10--5,12) }), + (5,2--5,30)), Some ((5,30--5,31), Some (5,31))); + Field + (SynExprAnonRecordField + (SynLongIdent ([Other], [], [None]), Some (5,38--5,39), Quote - (Ident op_Quotation, false, - Const (Int32 1, (5,24--5,25)), false, (5,21--5,28)))], - (5,10--5,30), { OpeningBraceRange = (5,10--5,12) })); - (SynLongIdent ([Other], [], [None]), Some (5,38--5,39), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (5,44--5,50)), (5,44--5,50)), - false, (5,40--5,54)))], (5,0--5,57), - { OpeningBraceRange = (5,0--5,2) }), (5,0--5,57)); + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (5,44--5,50)), + (5,44--5,50)), false, (5,40--5,54)), (5,32--5,54)), + None)], (5,0--5,57), { OpeningBraceRange = (5,0--5,2) }), + (5,0--5,57)); Expr (AnonRecd (false, None, - [(SynLongIdent ([Outer], [], [None]), Some (7,9--7,10), - AnonRecd - (false, None, - [(SynLongIdent ([Inner], [], [None]), Some (7,20--7,21), + [Field + (SynExprAnonRecordField + (SynLongIdent ([Outer], [], [None]), Some (7,9--7,10), + AnonRecd + (false, None, + [Field + (SynExprAnonRecordField + (SynLongIdent ([Inner], [], [None]), + Some (7,20--7,21), + Quote + (Ident op_Quotation, false, + Const (Int32 1, (7,25--7,26)), false, + (7,22--7,29)), (7,14--7,29)), None)], + (7,11--7,31), { OpeningBraceRange = (7,11--7,13) }), + (7,3--7,31)), Some ((7,31--7,32), Some (7,32))); + Field + (SynExprAnonRecordField + (SynLongIdent ([Other], [], [None]), Some (7,39--7,40), Quote - (Ident op_Quotation, false, - Const (Int32 1, (7,25--7,26)), false, (7,22--7,29)))], - (7,11--7,31), { OpeningBraceRange = (7,11--7,13) })); - (SynLongIdent ([Other], [], [None]), Some (7,39--7,40), - Quote - (Ident op_QuotationUntyped, true, - Const - (String ("test", Regular, (7,45--7,51)), (7,45--7,51)), - false, (7,41--7,55)))], (7,0--7,58), - { OpeningBraceRange = (7,0--7,2) }), (7,0--7,58))], + (Ident op_QuotationUntyped, true, + Const + (String ("test", Regular, (7,45--7,51)), + (7,45--7,51)), false, (7,41--7,55)), (7,33--7,55)), + None)], (7,0--7,58), { OpeningBraceRange = (7,0--7,2) }), + (7,0--7,58))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--7,58), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-01.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-01.fs.bsl index 7dbc5c7695b..1b6ede77ff8 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-01.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-01.fs.bsl @@ -7,15 +7,19 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([X], [], [None]), Some (1,5--1,6), - Const (Int32 1, (1,7--1,8)))], (1,0--1,11), - { OpeningBraceRange = (1,0--1,2) }), (1,0--1,11)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([X], [], [None]), Some (1,5--1,6), + Const (Int32 1, (1,7--1,8)), (1,3--1,8)), None)], + (1,0--1,11), { OpeningBraceRange = (1,0--1,2) }), (1,0--1,11)); Expr (AnonRecd (true, None, - [(SynLongIdent ([Y], [], [None]), Some (2,12--2,13), - Const (Int32 2, (2,14--2,15)))], (2,0--2,18), - { OpeningBraceRange = (2,7--2,9) }), (2,0--2,18)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([Y], [], [None]), Some (2,12--2,13), + Const (Int32 2, (2,14--2,15)), (2,10--2,15)), None)], + (2,0--2,18), { OpeningBraceRange = (2,7--2,9) }), (2,0--2,18)); Expr (AnonRecd (false, None, [], (3,0--3,5), { OpeningBraceRange = (3,0--3,2) }), diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-02.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-02.fs.bsl index fc0a410b79e..c5c448e1dab 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-02.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-02.fs.bsl @@ -7,9 +7,11 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([X], [], [None]), Some (1,5--1,6), - Const (Int32 0, (1,7--1,8)))], (1,0--2,0), - { OpeningBraceRange = (1,0--1,2) }), (1,0--2,0))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([X], [], [None]), Some (1,5--1,6), + Const (Int32 0, (1,7--1,8)), (1,3--1,8)), None)], + (1,0--2,0), { OpeningBraceRange = (1,0--1,2) }), (1,0--2,0))], PreXmlDocEmpty, [], None, (1,0--2,0), { LeadingKeyword = None })], (true, true), { ConditionalDirectives = [] WarnDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-03.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-03.fs.bsl index 4582e5eca53..d8c1e6ee62b 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-03.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-03.fs.bsl @@ -7,9 +7,11 @@ ImplFile [Expr (AnonRecd (true, None, - [(SynLongIdent ([X], [], [None]), Some (1,12--1,13), - Const (Int32 0, (1,14--1,15)))], (1,0--2,0), - { OpeningBraceRange = (1,7--1,9) }), (1,0--2,0))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([X], [], [None]), Some (1,12--1,13), + Const (Int32 0, (1,14--1,15)), (1,10--1,15)), None)], + (1,0--2,0), { OpeningBraceRange = (1,7--1,9) }), (1,0--2,0))], PreXmlDocEmpty, [], None, (1,0--2,0), { LeadingKeyword = None })], (true, true), { ConditionalDirectives = [] WarnDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-06.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-06.fs.bsl index b58b5e4c944..e9f15787514 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-06.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-06.fs.bsl @@ -20,17 +20,23 @@ ImplFile None, (1,4--1,7)), None, AnonRecd (false, Some (Ident x, ((1,15--1,19), None)), - [(SynLongIdent ([R; D], [(1,21--1,22)], [None; None]), - Some (1,24--1,25), - Const (String ("s", Regular, (1,26--1,29)), (1,26--1,29))); - (SynLongIdent ([A], [], [None]), Some (1,33--1,34), - Const (Int32 3, (1,35--1,36)))], (1,10--1,39), - { OpeningBraceRange = (1,10--1,12) }), (1,4--1,7), - NoneAtLet, { LeadingKeyword = Let (1,0--1,3) - InlineKeyword = None - EqualsRange = Some (1,8--1,9) })], (1,0--1,39), - { InKeyword = None })], PreXmlDocEmpty, [], None, (1,0--2,0), - { LeadingKeyword = None })], (true, true), + [Field + (SynExprAnonRecordField + (SynLongIdent ([R; D], [(1,21--1,22)], [None; None]), + Some (1,24--1,25), + Const + (String ("s", Regular, (1,26--1,29)), (1,26--1,29)), + (1,20--1,29)), Some ((1,29--1,30), Some (1,30))); + Field + (SynExprAnonRecordField + (SynLongIdent ([A], [], [None]), Some (1,33--1,34), + Const (Int32 3, (1,35--1,36)), (1,31--1,36)), None)], + (1,10--1,39), { OpeningBraceRange = (1,10--1,12) }), + (1,4--1,7), NoneAtLet, { LeadingKeyword = Let (1,0--1,3) + InlineKeyword = None + EqualsRange = Some (1,8--1,9) })], + (1,0--1,39), { InKeyword = None })], PreXmlDocEmpty, [], None, + (1,0--2,0), { LeadingKeyword = None })], (true, true), { ConditionalDirectives = [] WarnDirectives = [] CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-07.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-07.fs.bsl index a8ff99d1b82..9221dc5414f 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-07.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-07.fs.bsl @@ -7,47 +7,59 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,3--3,4), - Const - (Measure - (Int32 1, (3,4--3,5), - Seq ([Named ([m], (3,6--3,7))], (3,6--3,7)), - { LessRange = (3,5--3,6) - GreaterRange = (3,7--3,8) }), (3,4--3,8)))], - (3,0--3,11), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,11)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,3--3,4), + Const + (Measure + (Int32 1, (3,4--3,5), + Seq ([Named ([m], (3,6--3,7))], (3,6--3,7)), + { LessRange = (3,5--3,6) + GreaterRange = (3,7--3,8) }), (3,4--3,8)), + (3,2--3,8)), None)], (3,0--3,11), + { OpeningBraceRange = (3,0--3,2) }), (3,0--3,11)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,3--5,4), - Const - (Measure - (Int32 1, (5,4--5,5), - Seq ([Named ([m], (5,6--5,7))], (5,6--5,7)), - { LessRange = (5,5--5,6) - GreaterRange = (5,7--5,8) }), (5,4--5,8)))], - (5,0--5,10), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,10)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,3--5,4), + Const + (Measure + (Int32 1, (5,4--5,5), + Seq ([Named ([m], (5,6--5,7))], (5,6--5,7)), + { LessRange = (5,5--5,6) + GreaterRange = (5,7--5,8) }), (5,4--5,8)), + (5,2--5,8)), None)], (5,0--5,10), + { OpeningBraceRange = (5,0--5,2) }), (5,0--5,10)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,4--7,5), - Const - (Measure - (Int32 1, (7,5--7,6), - Seq ([Named ([m], (7,7--7,8))], (7,7--7,8)), - { LessRange = (7,6--7,7) - GreaterRange = (7,8--7,9) }), (7,5--7,9)))], - (7,0--7,11), { OpeningBraceRange = (7,0--7,2) }), (7,0--7,11)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,4--7,5), + Const + (Measure + (Int32 1, (7,5--7,6), + Seq ([Named ([m], (7,7--7,8))], (7,7--7,8)), + { LessRange = (7,6--7,7) + GreaterRange = (7,8--7,9) }), (7,5--7,9)), + (7,3--7,9)), None)], (7,0--7,11), + { OpeningBraceRange = (7,0--7,2) }), (7,0--7,11)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,4--9,5), - Const - (Measure - (Int32 1, (9,5--9,6), - Seq ([Named ([m], (9,7--9,8))], (9,7--9,8)), - { LessRange = (9,6--9,7) - GreaterRange = (9,8--9,9) }), (9,5--9,9)))], - (9,0--9,12), { OpeningBraceRange = (9,0--9,2) }), (9,0--9,12))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,4--9,5), + Const + (Measure + (Int32 1, (9,5--9,6), + Seq ([Named ([m], (9,7--9,8))], (9,7--9,8)), + { LessRange = (9,6--9,7) + GreaterRange = (9,8--9,9) }), (9,5--9,9)), + (9,3--9,9)), None)], (9,0--9,12), + { OpeningBraceRange = (9,0--9,2) }), (9,0--9,12))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-08.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-08.fs.bsl index ed640191c59..126203ce6bf 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-08.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-08.fs.bsl @@ -7,75 +7,99 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,3--3,4), - Const - (Measure - (Int32 1, (3,4--3,5), - Seq ([Named ([m], (3,6--3,7))], (3,6--3,7)), - { LessRange = (3,5--3,6) - GreaterRange = (3,7--3,8) }), (3,4--3,8))); - (SynLongIdent ([b], [], [None]), Some (3,11--3,12), - Const - (Measure - (Int32 2, (3,12--3,13), - Seq ([Named ([m], (3,14--3,15))], (3,14--3,15)), - { LessRange = (3,13--3,14) - GreaterRange = (3,15--3,16) }), (3,12--3,16)))], - (3,0--3,19), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,19)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,3--3,4), + Const + (Measure + (Int32 1, (3,4--3,5), + Seq ([Named ([m], (3,6--3,7))], (3,6--3,7)), + { LessRange = (3,5--3,6) + GreaterRange = (3,7--3,8) }), (3,4--3,8)), + (3,2--3,8)), Some ((3,8--3,9), Some (3,9))); + Field + (SynExprAnonRecordField + (SynLongIdent ([b], [], [None]), Some (3,11--3,12), + Const + (Measure + (Int32 2, (3,12--3,13), + Seq ([Named ([m], (3,14--3,15))], (3,14--3,15)), + { LessRange = (3,13--3,14) + GreaterRange = (3,15--3,16) }), (3,12--3,16)), + (3,10--3,16)), None)], (3,0--3,19), + { OpeningBraceRange = (3,0--3,2) }), (3,0--3,19)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,3--5,4), - Const - (Measure - (Int32 1, (5,4--5,5), - Seq ([Named ([m], (5,6--5,7))], (5,6--5,7)), - { LessRange = (5,5--5,6) - GreaterRange = (5,7--5,8) }), (5,4--5,8))); - (SynLongIdent ([b], [], [None]), Some (5,11--5,12), - Const - (Measure - (Int32 2, (5,12--5,13), - Seq ([Named ([m], (5,14--5,15))], (5,14--5,15)), - { LessRange = (5,13--5,14) - GreaterRange = (5,15--5,16) }), (5,12--5,16)))], - (5,0--5,18), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,18)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,3--5,4), + Const + (Measure + (Int32 1, (5,4--5,5), + Seq ([Named ([m], (5,6--5,7))], (5,6--5,7)), + { LessRange = (5,5--5,6) + GreaterRange = (5,7--5,8) }), (5,4--5,8)), + (5,2--5,8)), Some ((5,8--5,9), Some (5,9))); + Field + (SynExprAnonRecordField + (SynLongIdent ([b], [], [None]), Some (5,11--5,12), + Const + (Measure + (Int32 2, (5,12--5,13), + Seq ([Named ([m], (5,14--5,15))], (5,14--5,15)), + { LessRange = (5,13--5,14) + GreaterRange = (5,15--5,16) }), (5,12--5,16)), + (5,10--5,16)), None)], (5,0--5,18), + { OpeningBraceRange = (5,0--5,2) }), (5,0--5,18)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,4--7,5), - Const - (Measure - (Int32 1, (7,5--7,6), - Seq ([Named ([m], (7,7--7,8))], (7,7--7,8)), - { LessRange = (7,6--7,7) - GreaterRange = (7,8--7,9) }), (7,5--7,9))); - (SynLongIdent ([b], [], [None]), Some (7,12--7,13), - Const - (Measure - (Int32 2, (7,13--7,14), - Seq ([Named ([m], (7,15--7,16))], (7,15--7,16)), - { LessRange = (7,14--7,15) - GreaterRange = (7,16--7,17) }), (7,13--7,17)))], - (7,0--7,19), { OpeningBraceRange = (7,0--7,2) }), (7,0--7,19)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,4--7,5), + Const + (Measure + (Int32 1, (7,5--7,6), + Seq ([Named ([m], (7,7--7,8))], (7,7--7,8)), + { LessRange = (7,6--7,7) + GreaterRange = (7,8--7,9) }), (7,5--7,9)), + (7,3--7,9)), Some ((7,9--7,10), Some (7,10))); + Field + (SynExprAnonRecordField + (SynLongIdent ([b], [], [None]), Some (7,12--7,13), + Const + (Measure + (Int32 2, (7,13--7,14), + Seq ([Named ([m], (7,15--7,16))], (7,15--7,16)), + { LessRange = (7,14--7,15) + GreaterRange = (7,16--7,17) }), (7,13--7,17)), + (7,11--7,17)), None)], (7,0--7,19), + { OpeningBraceRange = (7,0--7,2) }), (7,0--7,19)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,4--9,5), - Const - (Measure - (Int32 1, (9,5--9,6), - Seq ([Named ([m], (9,7--9,8))], (9,7--9,8)), - { LessRange = (9,6--9,7) - GreaterRange = (9,8--9,9) }), (9,5--9,9))); - (SynLongIdent ([b], [], [None]), Some (9,12--9,13), - Const - (Measure - (Int32 2, (9,13--9,14), - Seq ([Named ([m], (9,15--9,16))], (9,15--9,16)), - { LessRange = (9,14--9,15) - GreaterRange = (9,16--9,17) }), (9,13--9,17)))], - (9,0--9,20), { OpeningBraceRange = (9,0--9,2) }), (9,0--9,20))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,4--9,5), + Const + (Measure + (Int32 1, (9,5--9,6), + Seq ([Named ([m], (9,7--9,8))], (9,7--9,8)), + { LessRange = (9,6--9,7) + GreaterRange = (9,8--9,9) }), (9,5--9,9)), + (9,3--9,9)), Some ((9,9--9,10), Some (9,10))); + Field + (SynExprAnonRecordField + (SynLongIdent ([b], [], [None]), Some (9,12--9,13), + Const + (Measure + (Int32 2, (9,13--9,14), + Seq ([Named ([m], (9,15--9,16))], (9,15--9,16)), + { LessRange = (9,14--9,15) + GreaterRange = (9,16--9,17) }), (9,13--9,17)), + (9,11--9,17)), None)], (9,0--9,20), + { OpeningBraceRange = (9,0--9,2) }), (9,0--9,20))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,20), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-09.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-09.fs.bsl index ec7c2e4e312..03288dd9864 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-09.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-09.fs.bsl @@ -7,39 +7,51 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,3--3,4), - TypeApp - (Ident typeof, (3,10--3,11), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (3,14--3,15), (3,10--3,15), (3,4--3,15)))], - (3,0--3,17), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,17)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,3--3,4), + TypeApp + (Ident typeof, (3,10--3,11), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (3,14--3,15), (3,10--3,15), (3,4--3,15)), + (3,2--3,15)), None)], (3,0--3,17), + { OpeningBraceRange = (3,0--3,2) }), (3,0--3,17)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,3--5,4), - TypeApp - (Ident typeof, (5,10--5,11), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (5,14--5,15), (5,10--5,15), (5,4--5,15)))], - (5,0--5,18), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,18)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,3--5,4), + TypeApp + (Ident typeof, (5,10--5,11), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (5,14--5,15), (5,10--5,15), (5,4--5,15)), + (5,2--5,15)), None)], (5,0--5,18), + { OpeningBraceRange = (5,0--5,2) }), (5,0--5,18)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,4--7,5), - TypeApp - (Ident typeof, (7,11--7,12), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (7,15--7,16), (7,11--7,16), (7,5--7,16)))], - (7,0--7,18), { OpeningBraceRange = (7,0--7,2) }), (7,0--7,18)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,4--7,5), + TypeApp + (Ident typeof, (7,11--7,12), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (7,15--7,16), (7,11--7,16), (7,5--7,16)), + (7,3--7,16)), None)], (7,0--7,18), + { OpeningBraceRange = (7,0--7,2) }), (7,0--7,18)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,4--9,5), - TypeApp - (Ident typeof, (9,11--9,12), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (9,15--9,16), (9,11--9,16), (9,5--9,16)))], - (9,0--9,19), { OpeningBraceRange = (9,0--9,2) }), (9,0--9,19))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,4--9,5), + TypeApp + (Ident typeof, (9,11--9,12), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (9,15--9,16), (9,11--9,16), (9,5--9,16)), + (9,3--9,16)), None)], (9,0--9,19), + { OpeningBraceRange = (9,0--9,2) }), (9,0--9,19))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,19), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-10.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-10.fs.bsl index a30127b522f..030773fa567 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-10.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-10.fs.bsl @@ -7,46 +7,58 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,3--3,4), - TypeApp - (Ident typedefof, (3,13--3,14), - [App - (LongIdent (SynLongIdent ([option], [], [None])), None, - [Anon (3,14--3,15)], [], None, true, (3,14--3,22))], - [], Some (3,22--3,23), (3,13--3,23), (3,4--3,23)))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,3--3,4), + TypeApp + (Ident typedefof, (3,13--3,14), + [App + (LongIdent (SynLongIdent ([option], [], [None])), + None, [Anon (3,14--3,15)], [], None, true, + (3,14--3,22))], [], Some (3,22--3,23), + (3,13--3,23), (3,4--3,23)), (3,2--3,23)), None)], (3,0--3,25), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,25)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,3--5,4), - TypeApp - (Ident typedefof, (5,13--5,14), - [App - (LongIdent (SynLongIdent ([option], [], [None])), None, - [Anon (5,14--5,15)], [], None, true, (5,14--5,22))], - [], Some (5,22--5,23), (5,13--5,23), (5,4--5,23)))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,3--5,4), + TypeApp + (Ident typedefof, (5,13--5,14), + [App + (LongIdent (SynLongIdent ([option], [], [None])), + None, [Anon (5,14--5,15)], [], None, true, + (5,14--5,22))], [], Some (5,22--5,23), + (5,13--5,23), (5,4--5,23)), (5,2--5,23)), None)], (5,0--5,26), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,26)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,4--7,5), - TypeApp - (Ident typedefof, (7,14--7,15), - [App - (LongIdent (SynLongIdent ([option], [], [None])), None, - [Anon (7,15--7,16)], [], None, true, (7,15--7,23))], - [], Some (7,23--7,24), (7,14--7,24), (7,5--7,24)))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,4--7,5), + TypeApp + (Ident typedefof, (7,14--7,15), + [App + (LongIdent (SynLongIdent ([option], [], [None])), + None, [Anon (7,15--7,16)], [], None, true, + (7,15--7,23))], [], Some (7,23--7,24), + (7,14--7,24), (7,5--7,24)), (7,3--7,24)), None)], (7,0--7,26), { OpeningBraceRange = (7,0--7,2) }), (7,0--7,26)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,4--9,5), - TypeApp - (Ident typedefof, (9,14--9,15), - [App - (LongIdent (SynLongIdent ([option], [], [None])), None, - [Anon (9,15--9,16)], [], None, true, (9,15--9,23))], - [], Some (9,23--9,24), (9,14--9,24), (9,5--9,24)))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,4--9,5), + TypeApp + (Ident typedefof, (9,14--9,15), + [App + (LongIdent (SynLongIdent ([option], [], [None])), + None, [Anon (9,15--9,16)], [], None, true, + (9,15--9,23))], [], Some (9,23--9,24), + (9,14--9,24), (9,5--9,24)), (9,3--9,24)), None)], (9,0--9,27), { OpeningBraceRange = (9,0--9,2) }), (9,0--9,27))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,27), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-11.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-11.fs.bsl index e33ad8c1418..01168ac1005 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-11.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-11.fs.bsl @@ -23,16 +23,19 @@ ImplFile false)), Pats [], None, (3,4--3,9)), None, AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,15--3,16), - TypeApp - (Ident nameof, (3,22--3,23), - [Var (SynTypar (T, None, false), (3,23--3,25))], [], - Some (3,25--3,26), (3,22--3,26), (3,16--3,26)))], - (3,12--3,28), { OpeningBraceRange = (3,12--3,14) }), - (3,4--3,9), NoneAtLet, { LeadingKeyword = Let (3,0--3,3) - InlineKeyword = None - EqualsRange = Some (3,10--3,11) })], - (3,0--3,28), { InKeyword = None }); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,15--3,16), + TypeApp + (Ident nameof, (3,22--3,23), + [Var (SynTypar (T, None, false), (3,23--3,25))], + [], Some (3,25--3,26), (3,22--3,26), (3,16--3,26)), + (3,14--3,26)), None)], (3,12--3,28), + { OpeningBraceRange = (3,12--3,14) }), (3,4--3,9), + NoneAtLet, { LeadingKeyword = Let (3,0--3,3) + InlineKeyword = None + EqualsRange = Some (3,10--3,11) })], (3,0--3,28), + { InKeyword = None }); Let (false, [SynBinding @@ -52,16 +55,19 @@ ImplFile false)), Pats [], None, (5,4--5,9)), None, AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,15--5,16), - TypeApp - (Ident nameof, (5,22--5,23), - [Var (SynTypar (T, None, false), (5,23--5,25))], [], - Some (5,25--5,26), (5,22--5,26), (5,16--5,26)))], - (5,12--5,29), { OpeningBraceRange = (5,12--5,14) }), - (5,4--5,9), NoneAtLet, { LeadingKeyword = Let (5,0--5,3) - InlineKeyword = None - EqualsRange = Some (5,10--5,11) })], - (5,0--5,29), { InKeyword = None }); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,15--5,16), + TypeApp + (Ident nameof, (5,22--5,23), + [Var (SynTypar (T, None, false), (5,23--5,25))], + [], Some (5,25--5,26), (5,22--5,26), (5,16--5,26)), + (5,14--5,26)), None)], (5,12--5,29), + { OpeningBraceRange = (5,12--5,14) }), (5,4--5,9), + NoneAtLet, { LeadingKeyword = Let (5,0--5,3) + InlineKeyword = None + EqualsRange = Some (5,10--5,11) })], (5,0--5,29), + { InKeyword = None }); Let (false, [SynBinding @@ -81,16 +87,19 @@ ImplFile false)), Pats [], None, (7,4--7,9)), None, AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,16--7,17), - TypeApp - (Ident nameof, (7,23--7,24), - [Var (SynTypar (T, None, false), (7,24--7,26))], [], - Some (7,26--7,27), (7,23--7,27), (7,17--7,27)))], - (7,12--7,29), { OpeningBraceRange = (7,12--7,14) }), - (7,4--7,9), NoneAtLet, { LeadingKeyword = Let (7,0--7,3) - InlineKeyword = None - EqualsRange = Some (7,10--7,11) })], - (7,0--7,29), { InKeyword = None }); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,16--7,17), + TypeApp + (Ident nameof, (7,23--7,24), + [Var (SynTypar (T, None, false), (7,24--7,26))], + [], Some (7,26--7,27), (7,23--7,27), (7,17--7,27)), + (7,15--7,27)), None)], (7,12--7,29), + { OpeningBraceRange = (7,12--7,14) }), (7,4--7,9), + NoneAtLet, { LeadingKeyword = Let (7,0--7,3) + InlineKeyword = None + EqualsRange = Some (7,10--7,11) })], (7,0--7,29), + { InKeyword = None }); Let (false, [SynBinding @@ -110,16 +119,19 @@ ImplFile false)), Pats [], None, (9,4--9,9)), None, AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,16--9,17), - TypeApp - (Ident nameof, (9,23--9,24), - [Var (SynTypar (T, None, false), (9,24--9,26))], [], - Some (9,26--9,27), (9,23--9,27), (9,17--9,27)))], - (9,12--9,30), { OpeningBraceRange = (9,12--9,14) }), - (9,4--9,9), NoneAtLet, { LeadingKeyword = Let (9,0--9,3) - InlineKeyword = None - EqualsRange = Some (9,10--9,11) })], - (9,0--9,30), { InKeyword = None })], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,16--9,17), + TypeApp + (Ident nameof, (9,23--9,24), + [Var (SynTypar (T, None, false), (9,24--9,26))], + [], Some (9,26--9,27), (9,23--9,27), (9,17--9,27)), + (9,15--9,27)), None)], (9,12--9,30), + { OpeningBraceRange = (9,12--9,14) }), (9,4--9,9), + NoneAtLet, { LeadingKeyword = Let (9,0--9,3) + InlineKeyword = None + EqualsRange = Some (9,10--9,11) })], (9,0--9,30), + { InKeyword = None })], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,30), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-12.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-12.fs.bsl index 1de6c8767d2..af402e59a8a 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-12.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-12.fs.bsl @@ -7,39 +7,51 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,3--3,4), - TypeApp - (Ident id, (3,6--3,7), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (3,10--3,11), (3,6--3,11), (3,4--3,11)))], - (3,0--3,13), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,13)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,3--3,4), + TypeApp + (Ident id, (3,6--3,7), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (3,10--3,11), (3,6--3,11), (3,4--3,11)), + (3,2--3,11)), None)], (3,0--3,13), + { OpeningBraceRange = (3,0--3,2) }), (3,0--3,13)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,3--5,4), - TypeApp - (Ident id, (5,6--5,7), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (5,10--5,11), (5,6--5,11), (5,4--5,11)))], - (5,0--5,14), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,14)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,3--5,4), + TypeApp + (Ident id, (5,6--5,7), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (5,10--5,11), (5,6--5,11), (5,4--5,11)), + (5,2--5,11)), None)], (5,0--5,14), + { OpeningBraceRange = (5,0--5,2) }), (5,0--5,14)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (7,4--7,5), - TypeApp - (Ident id, (7,7--7,8), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (7,11--7,12), (7,7--7,12), (7,5--7,12)))], - (7,0--7,14), { OpeningBraceRange = (7,0--7,2) }), (7,0--7,14)); + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (7,4--7,5), + TypeApp + (Ident id, (7,7--7,8), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (7,11--7,12), (7,7--7,12), (7,5--7,12)), + (7,3--7,12)), None)], (7,0--7,14), + { OpeningBraceRange = (7,0--7,2) }), (7,0--7,14)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (9,4--9,5), - TypeApp - (Ident id, (9,7--9,8), - [LongIdent (SynLongIdent ([int], [], [None]))], [], - Some (9,11--9,12), (9,7--9,12), (9,5--9,12)))], - (9,0--9,15), { OpeningBraceRange = (9,0--9,2) }), (9,0--9,15))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (9,4--9,5), + TypeApp + (Ident id, (9,7--9,8), + [LongIdent (SynLongIdent ([int], [], [None]))], [], + Some (9,11--9,12), (9,7--9,12), (9,5--9,12)), + (9,3--9,12)), None)], (9,0--9,15), + { OpeningBraceRange = (9,0--9,2) }), (9,0--9,15))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--9,15), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-13.fs.bsl b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-13.fs.bsl index ede1aa9a366..2dc59a91f58 100644 --- a/tests/service/data/SyntaxTree/Expression/AnonymousRecords-13.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/AnonymousRecords-13.fs.bsl @@ -7,18 +7,24 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (3,4--3,5), - Quote - (Ident op_Quotation, false, Const (Int32 3, (3,9--3,10)), - false, (3,6--3,13)))], (3,0--3,16), + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (3,4--3,5), + Quote + (Ident op_Quotation, false, + Const (Int32 3, (3,9--3,10)), false, (3,6--3,13)), + (3,2--3,13)), None)], (3,0--3,16), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,16)); Expr (AnonRecd (false, None, - [(SynLongIdent ([a], [], [None]), Some (5,4--5,5), - Quote - (Ident op_Quotation, false, Const (Int32 3, (5,9--5,10)), - false, (5,6--5,13)))], (5,0--5,15), + [Field + (SynExprAnonRecordField + (SynLongIdent ([a], [], [None]), Some (5,4--5,5), + Quote + (Ident op_Quotation, false, + Const (Int32 3, (5,9--5,10)), false, (5,6--5,13)), + (5,2--5,13)), None)], (5,0--5,15), { OpeningBraceRange = (5,0--5,2) }), (5,0--5,15))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--5,15), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/CopySynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl b/tests/service/data/SyntaxTree/Expression/CopySynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl index 975d9cc4d21..d0cfb22352e 100644 --- a/tests/service/data/SyntaxTree/Expression/CopySynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/CopySynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl @@ -10,11 +10,12 @@ ImplFile [Expr (Record (None, Some (Ident foo, ((2,6--2,10), None)), - [SynExprRecordField - ((SynLongIdent ([X], [], [None]), true), Some (4,12--4,13), - Some (Const (Int32 12, (5,16--5,18))), (3,8--5,18), None)], - (2,0--5,20)), (2,0--5,20))], PreXmlDocEmpty, [], None, - (2,0--5,20), { LeadingKeyword = None })], (true, true), - { ConditionalDirectives = [] - WarnDirectives = [] - CodeComments = [] }, set [])) + [Field + (SynExprRecordField + ((SynLongIdent ([X], [], [None]), true), + Some (4,12--4,13), Some (Const (Int32 12, (5,16--5,18))), + (3,8--5,18)), None)], (2,0--5,20)), (2,0--5,20))], + PreXmlDocEmpty, [], None, (2,0--5,20), { LeadingKeyword = None })], + (true, true), { ConditionalDirectives = [] + WarnDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 1.fs.bsl b/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 1.fs.bsl index 7c41f9d1d94..d5bc96ffc8d 100644 --- a/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 1.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 1.fs.bsl @@ -41,16 +41,18 @@ ImplFile (6,4--6,13)), (4,4--6,13)), (3,19--3,20), Some (7,2--7,3), (3,19--7,3)), (3,10--7,3), Some ((7,4--8,2), None), (3,2--3,9)), None, - [SynExprRecordField - ((SynLongIdent ([X], [], [None]), true), Some (8,4--8,5), - Some (Const (Int32 42, (8,6--8,8))), (8,2--8,8), + [Field + (SynExprRecordField + ((SynLongIdent ([X], [], [None]), true), Some (8,4--8,5), + Some (Const (Int32 42, (8,6--8,8))), (8,2--8,8)), Some ((8,9--9,2), None)); - SynExprRecordField - ((SynLongIdent ([Y], [], [None]), true), Some (9,4--9,5), - Some - (Const - (String ("test", Regular, (9,6--9,12)), (9,6--9,12))), - (9,2--9,12), None)], (3,0--10,1)), (3,0--10,1))], + Field + (SynExprRecordField + ((SynLongIdent ([Y], [], [None]), true), Some (9,4--9,5), + Some + (Const + (String ("test", Regular, (9,6--9,12)), (9,6--9,12))), + (9,2--9,12)), None)], (3,0--10,1)), (3,0--10,1))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--10,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 2.fs.bsl b/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 2.fs.bsl index 0c8fe61edb4..14422349ac6 100644 --- a/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 2.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/InheritRecord - Field 2.fs.bsl @@ -13,21 +13,26 @@ ImplFile (String ("test", Regular, (4,22--4,28)), (4,22--4,28)), (4,21--4,22), Some (4,28--4,29), (4,21--4,29)), (4,12--4,29), Some ((4,30--5,4), None), (4,4--4,11)), None, - [SynExprRecordField - ((SynLongIdent ([Field1], [], [None]), true), - Some (5,11--5,12), Some (Const (Int32 1, (5,13--5,14))), - (5,4--5,14), Some ((5,15--6,4), None)); - SynExprRecordField - ((SynLongIdent ([Field2], [], [None]), true), - Some (6,11--6,12), - Some - (Const - (String ("two", Regular, (6,13--6,18)), (6,13--6,18))), - (6,4--6,18), Some ((6,19--7,4), None)); - SynExprRecordField - ((SynLongIdent ([Field3], [], [None]), true), - Some (7,11--7,12), Some (Const (Double 3.0, (7,13--7,16))), - (7,4--7,16), None)], (3,0--8,1)), (3,0--8,1))], + [Field + (SynExprRecordField + ((SynLongIdent ([Field1], [], [None]), true), + Some (5,11--5,12), Some (Const (Int32 1, (5,13--5,14))), + (5,4--5,14)), Some ((5,15--6,4), None)); + Field + (SynExprRecordField + ((SynLongIdent ([Field2], [], [None]), true), + Some (6,11--6,12), + Some + (Const + (String ("two", Regular, (6,13--6,18)), + (6,13--6,18))), (6,4--6,18)), + Some ((6,19--7,4), None)); + Field + (SynExprRecordField + ((SynLongIdent ([Field3], [], [None]), true), + Some (7,11--7,12), + Some (Const (Double 3.0, (7,13--7,16))), (7,4--7,16)), + None)], (3,0--8,1)), (3,0--8,1))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--8,1), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/InheritSynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl b/tests/service/data/SyntaxTree/Expression/InheritSynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl index 7ad5d76dc22..ae3ae438c62 100644 --- a/tests/service/data/SyntaxTree/Expression/InheritSynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/InheritSynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl @@ -16,12 +16,13 @@ ImplFile (Ident msg, (2,19--2,20), Some (2,23--2,24), (2,19--2,24)), (2,10--2,24), Some ((2,24--2,25), Some (2,25)), (2,2--2,9)), None, - [SynExprRecordField - ((SynLongIdent ([X], [], [None]), true), Some (2,28--2,29), - Some (Const (Int32 1, (2,30--2,31))), (2,26--2,31), - Some ((2,31--2,32), Some (2,32)))], (2,0--2,34)), - (2,0--2,34))], PreXmlDocEmpty, [], None, (2,0--2,34), - { LeadingKeyword = None })], (true, true), + [Field + (SynExprRecordField + ((SynLongIdent ([X], [], [None]), true), + Some (2,28--2,29), Some (Const (Int32 1, (2,30--2,31))), + (2,26--2,31)), Some ((2,31--2,32), Some (2,32)))], + (2,0--2,34)), (2,0--2,34))], PreXmlDocEmpty, [], None, + (2,0--2,34), { LeadingKeyword = None })], (true, true), { ConditionalDirectives = [] WarnDirectives = [] CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 01.fs.bsl index 409a6349663..0445032bf15 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 01.fs.bsl @@ -7,9 +7,11 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F], [], [None]), Some (3,5--3,6), - Const (Int32 1, (3,7--3,8)))], (3,0--3,11), - { OpeningBraceRange = (3,0--3,2) }), (3,0--3,11))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([F], [], [None]), Some (3,5--3,6), + Const (Int32 1, (3,7--3,8)), (3,3--3,8)), None)], + (3,0--3,11), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,11))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 02.fs.bsl index abb4f9c61af..58e4aec01dc 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 02.fs.bsl @@ -7,8 +7,11 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F], [], [None]), Some (3,5--3,6), - ArbitraryAfterError ("anonField", (3,3--3,4)))], (3,0--3,9), + [Field + (SynExprAnonRecordField + (SynLongIdent ([F], [], [None]), Some (3,5--3,6), + ArbitraryAfterError ("anonField", (3,3--3,4)), + (3,3--3,6)), None)], (3,0--3,9), { OpeningBraceRange = (3,0--3,2) }), (3,0--3,9))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,9), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 07.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 07.fs.bsl index 0a2441bca98..93ca847d598 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 07.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 07.fs.bsl @@ -7,10 +7,16 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F1], [], [None]), Some (3,6--3,7), - Const (Int32 1, (3,8--3,9))); - (SynLongIdent ([F2], [], [None]), Some (4,6--4,7), - ArbitraryAfterError ("anonField", (4,3--4,5)))], (3,0--4,10), + [Field + (SynExprAnonRecordField + (SynLongIdent ([F1], [], [None]), Some (3,6--3,7), + Const (Int32 1, (3,8--3,9)), (3,3--3,9)), + Some ((3,10--4,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([F2], [], [None]), Some (4,6--4,7), + ArbitraryAfterError ("anonField", (4,3--4,5)), + (4,3--4,7)), None)], (3,0--4,10), { OpeningBraceRange = (3,0--3,2) }), (3,0--4,10))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 08.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 08.fs.bsl index 70fdc8e6a09..7deb988ef57 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 08.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 08.fs.bsl @@ -7,10 +7,16 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F1], [], [None]), Some (3,6--3,7), - Const (Int32 1, (3,8--3,9))); - (SynLongIdent ([F2], [], [None]), None, - ArbitraryAfterError ("anonField", (4,3--4,5)))], (3,0--4,8), + [Field + (SynExprAnonRecordField + (SynLongIdent ([F1], [], [None]), Some (3,6--3,7), + Const (Int32 1, (3,8--3,9)), (3,3--3,9)), + Some ((3,10--4,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([F2], [], [None]), None, + ArbitraryAfterError ("anonField", (4,3--4,5)), + (4,3--4,5)), None)], (3,0--4,8), { OpeningBraceRange = (3,0--3,2) }), (3,0--4,8))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 09.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 09.fs.bsl index c40cd96963e..dcaec38b40f 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 09.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 09.fs.bsl @@ -7,20 +7,27 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F1], [], [None]), Some (3,6--3,7), - Const (Int32 1, (3,8--3,9))); - (SynLongIdent ([F2], [], [None]), Some (4,6--4,7), - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], [Some (OriginalNotation "=")]), - None, (5,6--5,7)), Ident F3, (5,3--5,7)), - Const (Int32 3, (5,8--5,9)), (5,3--5,9)))], (3,0--5,12), - { OpeningBraceRange = (3,0--3,2) }), (3,0--5,12))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([F1], [], [None]), Some (3,6--3,7), + Const (Int32 1, (3,8--3,9)), (3,3--3,9)), + Some ((3,10--4,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([F2], [], [None]), Some (4,6--4,7), + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), None, + (5,6--5,7)), Ident F3, (5,3--5,7)), + Const (Int32 3, (5,8--5,9)), (5,3--5,9)), (4,3--5,9)), + None)], (3,0--5,12), { OpeningBraceRange = (3,0--3,2) }), + (3,0--5,12))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--5,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 10.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 10.fs.bsl index cc908ff2853..d27d2f0a92e 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 10.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 10.fs.bsl @@ -7,13 +7,21 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F1], [], [None]), Some (3,6--3,7), - Const (Int32 1, (3,8--3,9))); - (SynLongIdent ([F2], [], [None]), None, - ArbitraryAfterError ("anonField", (4,3--4,5))); - (SynLongIdent ([F3], [], [None]), Some (5,6--5,7), - Const (Int32 3, (5,8--5,9)))], (3,0--5,12), - { OpeningBraceRange = (3,0--3,2) }), (3,0--5,12))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([F1], [], [None]), Some (3,6--3,7), + Const (Int32 1, (3,8--3,9)), (3,3--3,9)), + Some ((3,10--4,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([F2], [], [None]), None, + ArbitraryAfterError ("anonField", (4,3--4,5)), + (4,3--4,5)), Some ((4,6--5,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([F3], [], [None]), Some (5,6--5,7), + Const (Int32 3, (5,8--5,9)), (5,3--5,9)), None)], + (3,0--5,12), { OpeningBraceRange = (3,0--3,2) }), (3,0--5,12))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--5,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Anon 11.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Anon 11.fs.bsl index 4fe46cfb3d5..91d64405a00 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Anon 11.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Anon 11.fs.bsl @@ -7,18 +7,22 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([F1], [], [None]), Some (3,6--3,7), - App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], [Some (OriginalNotation "=")]), - None, (4,6--4,7)), Ident F2, (4,3--4,7)), - Const (Int32 2, (4,8--4,9)), (4,3--4,9)))], (3,0--4,12), - { OpeningBraceRange = (3,0--3,2) }), (3,0--4,12))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([F1], [], [None]), Some (3,6--3,7), + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), None, + (4,6--4,7)), Ident F2, (4,3--4,7)), + Const (Int32 2, (4,8--4,9)), (4,3--4,9)), (3,3--4,9)), + None)], (3,0--4,12), { OpeningBraceRange = (3,0--3,2) }), + (3,0--4,12))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 03.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 03.fs.bsl index 253ba19cef9..84240a87755 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 03.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 03.fs.bsl @@ -7,10 +7,11 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [(3,3--3,4)], [None]), true), - Some (3,5--3,6), Some (Const (Int32 1, (3,7--3,8))), - (3,2--3,8), None)], (3,0--3,10)), (3,0--3,10))], + [Field + (SynExprRecordField + ((SynLongIdent ([A], [(3,3--3,4)], [None]), true), + Some (3,5--3,6), Some (Const (Int32 1, (3,7--3,8))), + (3,2--3,8)), None)], (3,0--3,10)), (3,0--3,10))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 04.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 04.fs.bsl index 14d2e09eaf1..1775342609d 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 04.fs.bsl @@ -7,11 +7,13 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent - ([A; B], [(3,3--3,4); (3,5--3,6)], [None; None]), true), - Some (3,7--3,8), Some (Const (Int32 1, (3,9--3,10))), - (3,2--3,10), None)], (3,0--3,12)), (3,0--3,12))], + [Field + (SynExprRecordField + ((SynLongIdent + ([A; B], [(3,3--3,4); (3,5--3,6)], [None; None]), + true), Some (3,7--3,8), + Some (Const (Int32 1, (3,9--3,10))), (3,2--3,10)), None)], + (3,0--3,12)), (3,0--3,12))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,12), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 05.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 05.fs.bsl index f1020c78c2c..c94e13bd9c0 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 05.fs.bsl @@ -7,9 +7,10 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), - Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7), None)], + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), + Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7)), None)], (3,0--3,9)), (3,0--3,9))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,9), { LeadingKeyword = Module (1,0--1,6) })], (true, true), diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 06.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 06.fs.bsl index 112d7a23329..1fcbf012664 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 06.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 06.fs.bsl @@ -7,10 +7,11 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A; B], [(3,3--3,4)], [None; None]), true), - Some (3,6--3,7), Some (Const (Int32 1, (3,8--3,9))), - (3,2--3,9), None)], (3,0--3,11)), (3,0--3,11))], + [Field + (SynExprRecordField + ((SynLongIdent ([A; B], [(3,3--3,4)], [None; None]), true), + Some (3,6--3,7), Some (Const (Int32 1, (3,8--3,9))), + (3,2--3,9)), None)], (3,0--3,11)), (3,0--3,11))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,11), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 08.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 08.fs.bsl index 27b99f20b97..df4373095c8 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 08.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 08.fs.bsl @@ -7,13 +7,15 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), - Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7), + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), + Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7)), Some ((3,8--4,2), None)); - SynExprRecordField - ((SynLongIdent ([B], [(4,3--4,4)], [None]), true), None, - None, (4,2--4,4), None)], (3,0--4,6)), (3,0--4,6))], + Field + (SynExprRecordField + ((SynLongIdent ([B], [(4,3--4,4)], [None]), true), None, + None, (4,2--4,4)), None)], (3,0--4,6)), (3,0--4,6))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 09.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 09.fs.bsl index 8da1bc6096b..2dca16bf938 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 09.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 09.fs.bsl @@ -7,13 +7,15 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), - Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7), + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), + Some (Const (Int32 1, (3,6--3,7))), (3,2--3,7)), Some ((3,8--4,2), None)); - SynExprRecordField - ((SynLongIdent ([B], [], [None]), true), None, None, - (4,2--4,3), None)], (3,0--4,5)), (3,0--4,5))], + Field + (SynExprRecordField + ((SynLongIdent ([B], [], [None]), true), None, None, + (4,2--4,3)), None)], (3,0--4,5)), (3,0--4,5))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 11.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 11.fs.bsl index efa568036d4..9c2fb9f08f8 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 11.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 11.fs.bsl @@ -7,9 +7,10 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), - None, (3,2--3,5), None)], (3,0--3,7)), (3,0--3,7))], + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), Some (3,4--3,5), + None, (3,2--3,5)), None)], (3,0--3,7)), (3,0--3,7))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--3,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 12.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 12.fs.bsl index a2360bb38bd..2d810c85b80 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 12.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 12.fs.bsl @@ -7,21 +7,22 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), - Some - (App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], - [Some (OriginalNotation "=")]), None, - (4,5--4,6)), Ident F2, (4,2--4,6)), - Const (Int32 2, (4,7--4,8)), (4,2--4,8))), (3,2--4,8), - None)], (3,0--4,10)), (3,0--4,10))], + [Field + (SynExprRecordField + ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), + Some + (App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), None, + (4,5--4,6)), Ident F2, (4,2--4,6)), + Const (Int32 2, (4,7--4,8)), (4,2--4,8))), + (3,2--4,8)), None)], (3,0--4,10)), (3,0--4,10))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 13.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 13.fs.bsl index 8ce8d350e90..97b3e19bb71 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 13.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 13.fs.bsl @@ -7,13 +7,15 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), - Some (Const (Int32 1, (3,7--3,8))), (3,2--3,8), + [Field + (SynExprRecordField + ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), + Some (Const (Int32 1, (3,7--3,8))), (3,2--3,8)), Some ((3,9--4,2), None)); - SynExprRecordField - ((SynLongIdent ([F2], [], [None]), true), Some (4,5--4,6), - None, (4,2--4,6), None)], (3,0--4,8)), (3,0--4,8))], + Field + (SynExprRecordField + ((SynLongIdent ([F2], [], [None]), true), Some (4,5--4,6), + None, (4,2--4,6)), None)], (3,0--4,8)), (3,0--4,8))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--4,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/Record - Field 14.fs.bsl b/tests/service/data/SyntaxTree/Expression/Record - Field 14.fs.bsl index 3de711bfbaf..c15b6421bc4 100644 --- a/tests/service/data/SyntaxTree/Expression/Record - Field 14.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/Record - Field 14.fs.bsl @@ -7,25 +7,27 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), - Some (Const (Int32 1, (3,7--3,8))), (3,2--3,8), + [Field + (SynExprRecordField + ((SynLongIdent ([F1], [], [None]), true), Some (3,5--3,6), + Some (Const (Int32 1, (3,7--3,8))), (3,2--3,8)), Some ((3,9--4,2), None)); - SynExprRecordField - ((SynLongIdent ([F2], [], [None]), true), Some (4,5--4,6), - Some - (App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], - [Some (OriginalNotation "=")]), None, - (5,5--5,6)), Ident F3, (5,2--5,6)), - Const (Int32 3, (5,7--5,8)), (5,2--5,8))), (4,2--5,8), - None)], (3,0--5,10)), (3,0--5,10))], + Field + (SynExprRecordField + ((SynLongIdent ([F2], [], [None]), true), Some (4,5--4,6), + Some + (App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), None, + (5,5--5,6)), Ident F3, (5,2--5,6)), + Const (Int32 3, (5,7--5,8)), (5,2--5,8))), + (4,2--5,8)), None)], (3,0--5,10)), (3,0--5,10))], PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, (1,0--5,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true), { ConditionalDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/SynExprAnonRecdWithStructKeyword.fs.bsl b/tests/service/data/SyntaxTree/Expression/SynExprAnonRecdWithStructKeyword.fs.bsl index abb76d98ae6..0efb8dff6a5 100644 --- a/tests/service/data/SyntaxTree/Expression/SynExprAnonRecdWithStructKeyword.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/SynExprAnonRecdWithStructKeyword.fs.bsl @@ -7,8 +7,10 @@ ImplFile [Expr (AnonRecd (true, None, - [(SynLongIdent ([Foo], [], [None]), Some (3,11--3,12), - Ident someValue)], (2,0--5,16), + [Field + (SynExprAnonRecordField + (SynLongIdent ([Foo], [], [None]), Some (3,11--3,12), + Ident someValue, (3,7--5,13)), None)], (2,0--5,16), { OpeningBraceRange = (3,4--3,6) }), (2,0--5,16)); Expr (AnonRecd diff --git a/tests/service/data/SyntaxTree/Expression/SynExprAnonRecordContainsTheRangeOfTheEqualsSignInTheFields.fs.bsl b/tests/service/data/SyntaxTree/Expression/SynExprAnonRecordContainsTheRangeOfTheEqualsSignInTheFields.fs.bsl index e7e6666975a..ffa4b0d290b 100644 --- a/tests/service/data/SyntaxTree/Expression/SynExprAnonRecordContainsTheRangeOfTheEqualsSignInTheFields.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/SynExprAnonRecordContainsTheRangeOfTheEqualsSignInTheFields.fs.bsl @@ -10,13 +10,21 @@ ImplFile [Expr (AnonRecd (false, None, - [(SynLongIdent ([X], [], [None]), Some (2,5--2,6), - Const (Int32 5, (2,7--2,8))); - (SynLongIdent ([Y], [], [None]), Some (3,8--3,9), - Const (Int32 6, (3,10--3,11))); - (SynLongIdent ([Z], [], [None]), Some (4,12--4,13), - Const (Int32 7, (4,14--4,15)))], (2,0--4,18), - { OpeningBraceRange = (2,0--2,2) }), (2,0--4,18))], + [Field + (SynExprAnonRecordField + (SynLongIdent ([X], [], [None]), Some (2,5--2,6), + Const (Int32 5, (2,7--2,8)), (2,3--2,8)), + Some ((2,9--3,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([Y], [], [None]), Some (3,8--3,9), + Const (Int32 6, (3,10--3,11)), (3,3--3,11)), + Some ((3,12--4,3), None)); + Field + (SynExprAnonRecordField + (SynLongIdent ([Z], [], [None]), Some (4,12--4,13), + Const (Int32 7, (4,14--4,15)), (4,3--4,15)), None)], + (2,0--4,18), { OpeningBraceRange = (2,0--2,2) }), (2,0--4,18))], PreXmlDocEmpty, [], None, (2,0--4,18), { LeadingKeyword = None })], (true, true), { ConditionalDirectives = [] WarnDirectives = [] diff --git a/tests/service/data/SyntaxTree/Expression/SynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl b/tests/service/data/SyntaxTree/Expression/SynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl index f403c248e54..73264f7a55c 100644 --- a/tests/service/data/SyntaxTree/Expression/SynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/SynExprRecordContainsTheRangeOfTheEqualsSignInSynExprRecordField.fs.bsl @@ -10,22 +10,24 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([V], [], [None]), true), Some (2,4--2,5), - Some (Ident v), (2,2--2,7), Some ((2,8--3,2), None)); - SynExprRecordField - ((SynLongIdent ([X], [], [None]), true), Some (3,9--3,10), - Some - (App - (NonAtomic, false, - App + [Field + (SynExprRecordField + ((SynLongIdent ([V], [], [None]), true), Some (2,4--2,5), + Some (Ident v), (2,2--2,7)), Some ((2,8--3,2), None)); + Field + (SynExprRecordField + ((SynLongIdent ([X], [], [None]), true), Some (3,9--3,10), + Some + (App (NonAtomic, false, App - (NonAtomic, false, Ident someLongFunctionCall, - Ident a, (4,16--5,21)), Ident b, (4,16--6,21)), - Ident c, (4,16--7,21))), (3,2--7,21), None)], - (2,0--7,23)), (2,0--7,23))], PreXmlDocEmpty, [], None, - (2,0--7,23), { LeadingKeyword = None })], (true, true), - { ConditionalDirectives = [] - WarnDirectives = [] - CodeComments = [LineComment (3,13--3,28)] }, set [])) + (NonAtomic, false, + App + (NonAtomic, false, Ident someLongFunctionCall, + Ident a, (4,16--5,21)), Ident b, + (4,16--6,21)), Ident c, (4,16--7,21))), + (3,2--7,21)), None)], (2,0--7,23)), (2,0--7,23))], + PreXmlDocEmpty, [], None, (2,0--7,23), { LeadingKeyword = None })], + (true, true), { ConditionalDirectives = [] + WarnDirectives = [] + CodeComments = [LineComment (3,13--3,28)] }, set [])) diff --git a/tests/service/data/SyntaxTree/Expression/SynExprRecordFieldsContainCorrectAmountOfTrivia.fs.bsl b/tests/service/data/SyntaxTree/Expression/SynExprRecordFieldsContainCorrectAmountOfTrivia.fs.bsl index 03e2eefdfd4..50834b09847 100644 --- a/tests/service/data/SyntaxTree/Expression/SynExprRecordFieldsContainCorrectAmountOfTrivia.fs.bsl +++ b/tests/service/data/SyntaxTree/Expression/SynExprRecordFieldsContainCorrectAmountOfTrivia.fs.bsl @@ -8,59 +8,61 @@ ImplFile [Expr (Record (None, None, - [SynExprRecordField - ((SynLongIdent ([JobType], [], [None]), true), - Some (2,10--2,11), - Some - (App - (NonAtomic, false, - App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], - [Some (OriginalNotation "=")]), None, - (5,13--5,14)), + [Field + (SynExprRecordField + ((SynLongIdent ([JobType], [], [None]), true), + Some (2,10--2,11), + Some + (App + (NonAtomic, false, App - (NonAtomic, false, + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), None, + (5,13--5,14)), App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], - [Some (OriginalNotation "=")]), None, - (4,12--4,13)), + (NonAtomic, false, App - (NonAtomic, false, + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), + None, (4,12--4,13)), App - (NonAtomic, true, - LongIdent - (false, - SynLongIdent - ([op_Equality], [], - [Some (OriginalNotation "=")]), - None, (3,19--3,20)), + (NonAtomic, false, App - (NonAtomic, false, - Ident EsriBoundaryImport, - Ident FileToImport, (2,12--3,18)), - (2,12--3,20)), - App - (NonAtomic, false, Ident filePath, - Ident State, (3,21--4,11)), - (2,12--4,11)), (2,12--4,13)), - App - (NonAtomic, false, Ident state, Ident DryRun, - (4,14--5,12)), (2,12--5,12)), (2,12--5,14)), - LongIdent - (false, - SynLongIdent - ([args; DryRun], [(5,19--5,20)], [None; None]), - None, (5,15--5,26)), (2,12--5,26))), (2,2--5,26), - None)], (2,0--5,28)), (2,0--5,28))], PreXmlDocEmpty, [], - None, (2,0--5,28), { LeadingKeyword = None })], (true, true), - { ConditionalDirectives = [] - WarnDirectives = [] - CodeComments = [] }, set [])) + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Equality], [], + [Some (OriginalNotation "=")]), + None, (3,19--3,20)), + App + (NonAtomic, false, + Ident EsriBoundaryImport, + Ident FileToImport, (2,12--3,18)), + (2,12--3,20)), + App + (NonAtomic, false, Ident filePath, + Ident State, (3,21--4,11)), + (2,12--4,11)), (2,12--4,13)), + App + (NonAtomic, false, Ident state, + Ident DryRun, (4,14--5,12)), (2,12--5,12)), + (2,12--5,14)), + LongIdent + (false, + SynLongIdent + ([args; DryRun], [(5,19--5,20)], [None; None]), + None, (5,15--5,26)), (2,12--5,26))), + (2,2--5,26)), None)], (2,0--5,28)), (2,0--5,28))], + PreXmlDocEmpty, [], None, (2,0--5,28), { LeadingKeyword = None })], + (true, true), { ConditionalDirectives = [] + WarnDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Pattern/Named field 07.fs.bsl b/tests/service/data/SyntaxTree/Pattern/Named field 07.fs.bsl index 813ba3344bd..7bfd907c406 100644 --- a/tests/service/data/SyntaxTree/Pattern/Named field 07.fs.bsl +++ b/tests/service/data/SyntaxTree/Pattern/Named field 07.fs.bsl @@ -8,10 +8,12 @@ ImplFile (Yes (3,0--3,20), Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), - Some (3,10--3,11), Some (Const (Int32 1, (3,12--3,13))), - (3,8--3,13), None)], (3,6--3,15)), + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), + Some (3,10--3,11), + Some (Const (Int32 1, (3,12--3,13))), (3,8--3,13)), + None)], (3,6--3,15)), [SynMatchClause (Record ([NamePatPairField diff --git a/tests/service/data/SyntaxTree/Pattern/Named field 08.fs.bsl b/tests/service/data/SyntaxTree/Pattern/Named field 08.fs.bsl index cd8a867459d..8a72d830932 100644 --- a/tests/service/data/SyntaxTree/Pattern/Named field 08.fs.bsl +++ b/tests/service/data/SyntaxTree/Pattern/Named field 08.fs.bsl @@ -8,10 +8,12 @@ ImplFile (Yes (3,0--3,20), Record (None, None, - [SynExprRecordField - ((SynLongIdent ([A], [], [None]), true), - Some (3,10--3,11), Some (Const (Int32 1, (3,12--3,13))), - (3,8--3,13), None)], (3,6--3,15)), + [Field + (SynExprRecordField + ((SynLongIdent ([A], [], [None]), true), + Some (3,10--3,11), + Some (Const (Int32 1, (3,12--3,13))), (3,8--3,13)), + None)], (3,6--3,15)), [SynMatchClause (Record ([NamePatPairField diff --git a/tests/service/data/SyntaxTree/SignatureType/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fsi.bsl b/tests/service/data/SyntaxTree/SignatureType/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fsi.bsl index af1c383c20c..5d1b952c47d 100644 --- a/tests/service/data/SyntaxTree/SignatureType/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fsi.bsl +++ b/tests/service/data/SyntaxTree/SignatureType/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fsi.bsl @@ -36,12 +36,14 @@ SigFile Simple (Record (Some (Internal (8,4--8,12)), - [SynField - ([], false, Some LongNameBarBarBarBarBarBarBar, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((10,12), FSharp.Compiler.Xml.XmlDocCollector), - None, (10,12--10,46), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some LongNameBarBarBarBarBarBarBar, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((10,12), FSharp.Compiler.Xml.XmlDocCollector), + None, (10,12--10,46), { LeadingKeyword = None + MutableKeyword = None }))], (8,4--11,9)), (8,4--11,9)), [Member (SynValSig diff --git a/tests/service/data/SyntaxTree/SignatureType/RangeOfSynTypeDefnSigRecordShouldEndAtLastMember.fsi.bsl b/tests/service/data/SyntaxTree/SignatureType/RangeOfSynTypeDefnSigRecordShouldEndAtLastMember.fsi.bsl index bcbb3398842..dac61202112 100644 --- a/tests/service/data/SyntaxTree/SignatureType/RangeOfSynTypeDefnSigRecordShouldEndAtLastMember.fsi.bsl +++ b/tests/service/data/SyntaxTree/SignatureType/RangeOfSynTypeDefnSigRecordShouldEndAtLastMember.fsi.bsl @@ -13,12 +13,14 @@ SigFile Simple (Record (None, - [SynField - ([], false, Some Level, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (4,6--4,16), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Level, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,16), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--4,18)), (4,4--4,18)), [Member (SynValSig diff --git a/tests/service/data/SyntaxTree/Type/Module Inside Record 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Module Inside Record 01.fs.bsl index 49bb21bfb20..9bb9daef119 100644 --- a/tests/service/data/SyntaxTree/Type/Module Inside Record 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Module Inside Record 01.fs.bsl @@ -13,12 +13,14 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some A, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,6--5,13), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some A, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,6--5,13), { LeadingKeyword = None + MutableKeyword = None }))], (5,4--5,15)), (5,4--5,15)), [], None, (4,5--5,15), { LeadingKeyword = Type (4,0--4,4) EqualsRange = Some (4,7--4,8) diff --git a/tests/service/data/SyntaxTree/Type/Module Same Indentation 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Module Same Indentation 01.fs.bsl index 4b5f37845d7..97eed9f26e1 100644 --- a/tests/service/data/SyntaxTree/Type/Module Same Indentation 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Module Same Indentation 01.fs.bsl @@ -71,12 +71,14 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some Field, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((12,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (12,6--12,16), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Field, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((12,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (12,6--12,16), { LeadingKeyword = None + MutableKeyword = None }))], (12,4--12,18)), (12,4--12,18)), [], None, (11,5--12,18), { LeadingKeyword = Type (11,0--11,4) EqualsRange = Some (11,7--11,8) diff --git a/tests/service/data/SyntaxTree/Type/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fs.bsl b/tests/service/data/SyntaxTree/Type/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fs.bsl index ad592dd5cbb..64f8987ac04 100644 --- a/tests/service/data/SyntaxTree/Type/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/RangeOfAttributesShouldBeIncludedInRecursiveTypes.fs.bsl @@ -87,24 +87,27 @@ ImplFile Simple (Record (Some (Internal (7,4--7,12)), - [SynField - ([], false, Some Hash, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((8,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (8,8--8,18), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, Some Foo, - App - (LongIdent (SynLongIdent ([Foo], [], [None])), - Some (9,17--9,18), - [Var (SynTypar (a, None, false), (9,18--9,20)); - Var (SynTypar (b, None, false), (9,22--9,24))], - [(9,20--9,21)], Some (9,24--9,25), false, - (9,14--9,25)), false, - PreXmlDoc ((9,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (9,8--9,25), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Hash, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((8,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (8,8--8,18), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, Some Foo, + App + (LongIdent (SynLongIdent ([Foo], [], [None])), + Some (9,17--9,18), + [Var (SynTypar (a, None, false), (9,18--9,20)); + Var (SynTypar (b, None, false), (9,22--9,24))], + [(9,20--9,21)], Some (9,24--9,25), false, + (9,14--9,25)), false, + PreXmlDoc ((9,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (9,8--9,25), { LeadingKeyword = None + MutableKeyword = None }))], (7,4--10,5)), (7,4--10,5)), [], None, (6,4--10,5), { LeadingKeyword = And (6,0--6,3) EqualsRange = Some (6,56--6,57) diff --git a/tests/service/data/SyntaxTree/Type/Record - Access 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Access 01.fs.bsl index e2c49be6c8e..c2cc6fa372b 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Access 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Access 01.fs.bsl @@ -12,11 +12,13 @@ ImplFile Simple (Record (None, - [SynField - ([], false, None, FromParseError (5,16--5,16), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,16), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, None, FromParseError (5,16--5,16), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,16), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record - Access 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Access 02.fs.bsl index 3540dbcc68c..d13bde420d6 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Access 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Access 02.fs.bsl @@ -12,13 +12,15 @@ ImplFile Simple (Record (None, - [SynField - ([], false, None, FromParseError (5,24--5,24), true, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,24), - { LeadingKeyword = None - MutableKeyword = Some (5,8--5,15) })], (4,4--6,5)), - (4,4--6,5)), [], None, (3,5--6,5), + [Field + (SynField + ([], false, None, FromParseError (5,24--5,24), + true, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,24), + { LeadingKeyword = None + MutableKeyword = Some (5,8--5,15) }))], + (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) WithKeyword = None })], (3,0--6,5)); diff --git a/tests/service/data/SyntaxTree/Type/Record - Access 03.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Access 03.fs.bsl index 353570298cd..a72aaf7d8d9 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Access 03.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Access 03.fs.bsl @@ -12,14 +12,16 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F, - LongIdent (SynLongIdent ([int], [], [None])), true, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,31), - { LeadingKeyword = None - MutableKeyword = Some (5,8--5,15) })], (4,4--6,5)), - (4,4--6,5)), [], None, (3,5--6,5), + [Field + (SynField + ([], false, Some F, + LongIdent (SynLongIdent ([int], [], [None])), + true, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,31), + { LeadingKeyword = None + MutableKeyword = Some (5,8--5,15) }))], + (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) WithKeyword = None })], (3,0--6,5)); diff --git a/tests/service/data/SyntaxTree/Type/Record - Access 04.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Access 04.fs.bsl index 37ad416ff25..26111d2dfb2 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Access 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Access 04.fs.bsl @@ -12,12 +12,14 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,23), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some F, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,23), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record - Mutable 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Mutable 01.fs.bsl index 37da69f67aa..7b6786f818e 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Mutable 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Mutable 01.fs.bsl @@ -12,13 +12,15 @@ ImplFile Simple (Record (None, - [SynField - ([], false, None, FromParseError (5,15--5,15), true, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,15), - { LeadingKeyword = None - MutableKeyword = Some (5,8--5,15) })], (4,4--6,5)), - (4,4--6,5)), [], None, (3,5--6,5), + [Field + (SynField + ([], false, None, FromParseError (5,15--5,15), + true, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,15), + { LeadingKeyword = None + MutableKeyword = Some (5,8--5,15) }))], + (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) WithKeyword = None })], (3,0--6,5)); diff --git a/tests/service/data/SyntaxTree/Type/Record - Mutable 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Mutable 02.fs.bsl index 7b80fa8e08f..dc42d7244dc 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Mutable 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Mutable 02.fs.bsl @@ -12,19 +12,23 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F1, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,15), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, None, FromParseError (6,15--6,15), true, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,15), - { LeadingKeyword = None - MutableKeyword = Some (6,8--6,15) })], (4,4--7,5)), - (4,4--7,5)), [], None, (3,5--7,5), + [Field + (SynField + ([], false, Some F1, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,15), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, None, FromParseError (6,15--6,15), + true, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,15), + { LeadingKeyword = None + MutableKeyword = Some (6,8--6,15) }))], + (4,4--7,5)), (4,4--7,5)), [], None, (3,5--7,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) WithKeyword = None })], (3,0--7,5)); diff --git a/tests/service/data/SyntaxTree/Type/Record - Mutable 03.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Mutable 03.fs.bsl index 64b6dba2775..cd6635ad1eb 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Mutable 03.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Mutable 03.fs.bsl @@ -12,18 +12,22 @@ ImplFile Simple (Record (None, - [SynField - ([], false, None, FromParseError (5,15--5,15), true, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,15), - { LeadingKeyword = None - MutableKeyword = Some (5,8--5,15) }); - SynField - ([], false, Some F2, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,15), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, None, FromParseError (5,15--5,15), + true, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,15), + { LeadingKeyword = None + MutableKeyword = Some (5,8--5,15) })); + Field + (SynField + ([], false, Some F2, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,15), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--7,5)), (4,4--7,5)), [], None, (3,5--7,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record - Mutable 04.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Mutable 04.fs.bsl index c3b99f04619..143b61b6292 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Mutable 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Mutable 04.fs.bsl @@ -12,24 +12,30 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F1, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,15), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, None, FromParseError (6,15--6,15), true, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,15), - { LeadingKeyword = None - MutableKeyword = Some (6,8--6,15) }); - SynField - ([], false, Some F3, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((7,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (7,8--7,15), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some F1, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,15), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, None, FromParseError (6,15--6,15), + true, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,15), + { LeadingKeyword = None + MutableKeyword = Some (6,8--6,15) })); + Field + (SynField + ([], false, Some F3, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((7,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (7,8--7,15), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--8,5)), (4,4--8,5)), [], None, (3,5--8,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record - Mutable 05.fs.bsl b/tests/service/data/SyntaxTree/Type/Record - Mutable 05.fs.bsl index 6443e19b43b..3c2d00eb5cc 100644 --- a/tests/service/data/SyntaxTree/Type/Record - Mutable 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record - Mutable 05.fs.bsl @@ -12,25 +12,31 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F1, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,15), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, Some F2, - LongIdent (SynLongIdent ([int], [], [None])), true, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,23), - { LeadingKeyword = None - MutableKeyword = Some (6,8--6,15) }); - SynField - ([], false, Some F3, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((7,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (7,8--7,15), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some F1, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,15), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, Some F2, + LongIdent (SynLongIdent ([int], [], [None])), + true, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,23), + { LeadingKeyword = None + MutableKeyword = Some (6,8--6,15) })); + Field + (SynField + ([], false, Some F3, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((7,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (7,8--7,15), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--8,5)), (4,4--8,5)), [], None, (3,5--8,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Record 01.fs.bsl index 50126fc6544..96c0fb59387 100644 --- a/tests/service/data/SyntaxTree/Type/Record 01.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record 01.fs.bsl @@ -12,17 +12,21 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some Invest, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,19), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, Some T, FromParseError (6,9--6,9), false, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,9), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Invest, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,19), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, Some T, FromParseError (6,9--6,9), + false, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,9), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--7,5)), (4,4--7,5)), [], None, (3,5--7,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,8--3,9) diff --git a/tests/service/data/SyntaxTree/Type/Record 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Record 02.fs.bsl index 986cadf5de9..8461f3d1a11 100644 --- a/tests/service/data/SyntaxTree/Type/Record 02.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record 02.fs.bsl @@ -12,18 +12,21 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some Invest, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,8--5,19), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, Some T, FromParseError (6,11--6,11), - false, - PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,8--6,11), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Invest, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((5,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,8--5,19), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, Some T, FromParseError (6,11--6,11), + false, + PreXmlDoc ((6,8), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,8--6,11), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--7,5)), (4,4--7,5)), [], None, (3,5--7,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,8--3,9) diff --git a/tests/service/data/SyntaxTree/Type/Record 04.fs.bsl b/tests/service/data/SyntaxTree/Type/Record 04.fs.bsl index bc34db45a45..62d89315400 100644 --- a/tests/service/data/SyntaxTree/Type/Record 04.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record 04.fs.bsl @@ -12,11 +12,12 @@ ImplFile Simple (Record (None, - [SynField - ([], false, None, FromParseError (5,6--5,6), false, - PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,6--5,6), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, None, FromParseError (5,6--5,6), false, + PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,6--5,6), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--6,5)), (4,4--6,5)), [], None, (3,5--6,5), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/Record 05.fs.bsl b/tests/service/data/SyntaxTree/Type/Record 05.fs.bsl index 65f78f4d5d3..5b7f1e20345 100644 --- a/tests/service/data/SyntaxTree/Type/Record 05.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/Record 05.fs.bsl @@ -12,23 +12,28 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some F1, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (4,6--4,13), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, None, FromParseError (5,6--5,6), false, - PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (5,6--5,6), { LeadingKeyword = None - MutableKeyword = None }); - SynField - ([], false, Some F3, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((6,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (6,6--6,13), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some F1, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,13), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, None, FromParseError (5,6--5,6), false, + PreXmlDoc ((5,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,6--5,6), { LeadingKeyword = None + MutableKeyword = None })); + Field + (SynField + ([], false, Some F3, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((6,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (6,6--6,13), { LeadingKeyword = None + MutableKeyword = None }))], (4,4--6,15)), (4,4--6,15)), [], None, (3,5--6,15), { LeadingKeyword = Type (3,0--3,4) EqualsRange = Some (3,7--3,8) diff --git a/tests/service/data/SyntaxTree/Type/SynTypeDefnWithRecordContainsTheRangeOfTheWithKeyword.fs.bsl b/tests/service/data/SyntaxTree/Type/SynTypeDefnWithRecordContainsTheRangeOfTheWithKeyword.fs.bsl index 7cb9f5a2af5..993fcc36e63 100644 --- a/tests/service/data/SyntaxTree/Type/SynTypeDefnWithRecordContainsTheRangeOfTheWithKeyword.fs.bsl +++ b/tests/service/data/SyntaxTree/Type/SynTypeDefnWithRecordContainsTheRangeOfTheWithKeyword.fs.bsl @@ -16,12 +16,14 @@ ImplFile Simple (Record (None, - [SynField - ([], false, Some Bar, - LongIdent (SynLongIdent ([int], [], [None])), false, - PreXmlDoc ((3,6), FSharp.Compiler.Xml.XmlDocCollector), - None, (3,6--3,15), { LeadingKeyword = None - MutableKeyword = None })], + [Field + (SynField + ([], false, Some Bar, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((3,6), FSharp.Compiler.Xml.XmlDocCollector), + None, (3,6--3,15), { LeadingKeyword = None + MutableKeyword = None }))], (3,4--3,17)), (3,4--3,17)), [Member (SynBinding diff --git a/vsintegration/tests/FSharp.Editor.Tests/SemanticClassificationServiceTests.fs b/vsintegration/tests/FSharp.Editor.Tests/SemanticClassificationServiceTests.fs index 9d0b2346639..6c58f658ee9 100644 --- a/vsintegration/tests/FSharp.Editor.Tests/SemanticClassificationServiceTests.fs +++ b/vsintegration/tests/FSharp.Editor.Tests/SemanticClassificationServiceTests.fs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace FSharp.Editor.Tests From e37f538f208c5f1e78fbbcd1f462d4f15ff5b700 Mon Sep 17 00:00:00 2001 From: Brian Rourke Boll Date: Fri, 29 May 2026 17:50:00 -0400 Subject: [PATCH 2/2] Update release notes --- docs/release-notes/.FSharp.Compiler.Service/11.0.100.md | 1 + docs/release-notes/.Language/preview.md | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md index 43601b6e34c..600a8a2e4cf 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/11.0.100.md @@ -73,6 +73,7 @@ * Added warning FS3884 when a function or delegate value is used as an interpolated string argument. ([PR #19289](https://github.com/dotnet/fsharp/pull/19289)) * Symbols: add ObsoleteDiagnosticInfo ([PR #19359](https://github.com/dotnet/fsharp/pull/19359)) * Add `#version;;` directive to F# Interactive to display version and environment information. ([Issue #13307](https://github.com/dotnet/fsharp/issues/13307), [PR #19332](https://github.com/dotnet/fsharp/pull/19332)) +* Spread operator for records ([RFC FS-1151](https://github.com/fsharp/fslang-design/pull/805), [PR #18927](https://github.com/dotnet/fsharp/pull/18927)) ### Changed diff --git a/docs/release-notes/.Language/preview.md b/docs/release-notes/.Language/preview.md index d97ef294125..7f0db6fa541 100644 --- a/docs/release-notes/.Language/preview.md +++ b/docs/release-notes/.Language/preview.md @@ -2,7 +2,8 @@ * Warn (FS3884) when a function or delegate value is used as an interpolated string argument, since it will be formatted via `ToString` rather than being applied. ([PR #19289](https://github.com/dotnet/fsharp/pull/19289)) * Added `MethodOverloadsCache` language feature (preview) that caches overload resolution results for repeated method calls, significantly improving compilation performance. ([PR #19072](https://github.com/dotnet/fsharp/pull/19072)) +* Spread operator for records ([RFC FS-1151](https://github.com/fsharp/fslang-design/pull/805), [PR #18927](https://github.com/dotnet/fsharp/pull/18927)) ### Fixed -### Changed \ No newline at end of file +### Changed