From fa3a96fcdd6930ac4a90be5706b693c0e43ee0c9 Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Wed, 31 Jul 2024 16:38:54 +0200 Subject: [PATCH 1/7] Add dumps collection to PR pipelines when failing. --- azure-pipelines-PR.yml | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml index 9723c7356df..89e50496e2f 100644 --- a/azure-pipelines-PR.yml +++ b/azure-pipelines-PR.yml @@ -228,6 +228,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -configuration Release /p:FSharpLangVersion=preview env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -240,6 +243,15 @@ stages: ArtifactName: 'Windows Release build binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true - job: WindowsNoRealsig_testCoreclr pool: @@ -256,6 +268,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -buildnorealsig -testCoreclr -configuration Release env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -268,6 +283,15 @@ stages: ArtifactName: 'Windows Release build binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true - job: WindowsNoRealsig_testDesktop pool: @@ -284,6 +308,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -buildnorealsig -testDesktop -configuration Release env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -296,6 +323,15 @@ stages: ArtifactName: 'Windows Release build binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true - job: WindowsStrictIndentation pool: @@ -312,6 +348,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -configuration Release /p:AdditionalFscCmdFlags=--strict-indentation+ env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -324,6 +363,15 @@ stages: ArtifactName: 'Windows Release build binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true - job: WindowsNoStrictIndentation pool: @@ -336,6 +384,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -configuration Release /p:AdditionalFscCmdFlags=--strict-indentation- env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -348,6 +399,15 @@ stages: ArtifactName: 'Windows Release build binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true # Windows With Compressed Metadata - job: WindowsCompressedMetadata @@ -398,12 +458,18 @@ stages: # yes, this is miserable, but - https://github.com/dotnet/arcade/issues/13239 - script: eng\CIBuild.cmd -compressallmetadata -configuration $(_configuration) -$(_testKind) env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build / Test condition: and( ne(variables['_testKind'], 'testIntegration'), ne(variables['System.JobName'], 'transparent_compiler_release') ) - script: eng\CIBuild.cmd -compressallmetadata -configuration $(_configuration) -$(_testKind) env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp TEST_TRANSPARENT_COMPILER: 1 NativeToolsOnMachine: true displayName: Build / Test Transparent Compiler @@ -411,6 +477,9 @@ stages: - script: eng\CIBuild.cmd -compressallmetadata -configuration $(_configuration) -$(_testKind) env: + DOTNET_DbgEnableMiniDump: 1 + DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build / Integration Test continueOnError: true @@ -433,6 +502,15 @@ stages: ArtifactName: 'Windows $(_configuration) $(_testKind) test binlogs' ArtifactType: Container parallel: true + - task: PublishBuildArtifacts@1 + displayName: Publish Dumps + condition: failed() + continueOnError: true + inputs: + PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' + ArtifactType: Container + parallel: true - task: PublishBuildArtifacts@1 displayName: Publish Test Logs inputs: From 8a796acd1c1fddf7a984eac49995d9ec3000eb0a Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 31 Jul 2024 13:26:57 -0700 Subject: [PATCH 2/7] Remove unused values from TcGlobals (#17422) * initial * missing --------- Co-authored-by: Petr --- src/Compiler/FSharp.Compiler.Service.fsproj | 1 + src/Compiler/TypedTree/TcGlobals.fs | 46 - src/Compiler/TypedTree/TcGlobals.fsi | 1371 +++++++++++++++++++ 3 files changed, 1372 insertions(+), 46 deletions(-) create mode 100644 src/Compiler/TypedTree/TcGlobals.fsi diff --git a/src/Compiler/FSharp.Compiler.Service.fsproj b/src/Compiler/FSharp.Compiler.Service.fsproj index e015a6a86e7..3a46aab75a9 100644 --- a/src/Compiler/FSharp.Compiler.Service.fsproj +++ b/src/Compiler/FSharp.Compiler.Service.fsproj @@ -310,6 +310,7 @@ + diff --git a/src/Compiler/TypedTree/TcGlobals.fs b/src/Compiler/TypedTree/TcGlobals.fs index a2b8adfe60e..9a3f8c13e61 100644 --- a/src/Compiler/TypedTree/TcGlobals.fs +++ b/src/Compiler/TypedTree/TcGlobals.fs @@ -381,14 +381,12 @@ type TcGlobals( let tryMkSysNonGenericTy path n = tryFindSysTyconRef path n |> Option.map mkNonGenericTy let sys = ["System"] - let sysLinq = ["System";"Linq"] let sysCollections = ["System";"Collections"] let sysGenerics = ["System";"Collections";"Generic"] let sysCompilerServices = ["System";"Runtime";"CompilerServices"] let lazy_tcr = findSysTyconRef sys "Lazy`1" let v_fslib_IEvent2_tcr = mk_MFControl_tcref fslibCcu "IEvent`2" - let v_tcref_IQueryable = findSysTyconRef sysLinq "IQueryable`1" let v_tcref_IObservable = findSysTyconRef sys "IObservable`1" let v_tcref_IObserver = findSysTyconRef sys "IObserver`1" let v_fslib_IDelegateEvent_tcr = mk_MFControl_tcref fslibCcu "IDelegateEvent`1" @@ -789,7 +787,6 @@ type TcGlobals( let v_sbyte_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "sbyte" , None , Some "ToSByte", [vara], ([[varaTy]], v_sbyte_ty)) let v_int16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int16" , None , Some "ToInt16", [vara], ([[varaTy]], v_int16_ty)) let v_uint16_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint16" , None , Some "ToUInt16", [vara], ([[varaTy]], v_uint16_ty)) - let v_int_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int" , None , Some "ToInt", [vara], ([[varaTy]], v_int_ty)) let v_int32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int32" , None , Some "ToInt32", [vara], ([[varaTy]], v_int32_ty)) let v_uint32_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "uint32" , None , Some "ToUInt32", [vara], ([[varaTy]], v_uint32_ty)) let v_int64_operator_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "int64" , None , Some "ToInt64", [vara], ([[varaTy]], v_int64_ty)) @@ -876,7 +873,6 @@ type TcGlobals( let v_lazy_create_info = makeIntrinsicValRef(fslib_MFLazyExtensions_nleref, "Create" , Some "Lazy`1" , None , [vara], ([[v_unit_ty --> varaTy]], mkLazyTy varaTy)) let v_seq_info = makeIntrinsicValRef(fslib_MFOperators_nleref, "seq" , None , Some "CreateSequence" , [vara], ([[mkSeqTy varaTy]], mkSeqTy varaTy)) - let v_refcell_info = makeIntrinsicValRef(fslib_MFCore_nleref, "ref" , Some "FSharpRef`1" , None , [vara], ([[mkRefCellTy varaTy]; []], varaTy)) let v_splice_expr_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "op_Splice" , None , None , [vara], ([[mkQuotedExprTy varaTy]], varaTy)) let v_splice_raw_expr_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "op_SpliceUntyped" , None , None , [vara], ([[mkRawQuotedExprTy]], varaTy)) let v_new_decimal_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "MakeDecimal" , None , None , [], ([[v_int_ty]; [v_int_ty]; [v_int_ty]; [v_bool_ty]; [v_byte_ty]], v_decimal_ty)) @@ -897,7 +893,6 @@ type TcGlobals( let v_query_source_info = makeIntrinsicValRef(fslib_MFLinq_nleref, "Source" , Some "QueryBuilder" , None , [vara], ([[mkQueryBuilderTy];[mkSeqTy varaTy ]], mkQuerySourceTy varaTy (mkNonGenericTy v_tcref_System_Collections_IEnumerable)) ) let v_query_source_as_enum_info = makeIntrinsicValRef(fslib_MFLinq_nleref, "get_Source" , Some "QuerySource`2" , None , [vara; vare], ([[mkQuerySourceTy varaTy vareTy];[]], mkSeqTy varaTy) ) let v_new_query_source_info = makeIntrinsicValRef(fslib_MFLinq_nleref, ".ctor" , Some "QuerySource`2" , None , [vara; vare], ([[mkSeqTy varaTy]], mkQuerySourceTy varaTy vareTy) ) - let v_query_where_value_info = makeIntrinsicValRef(fslib_MFLinq_nleref, "Where" , Some "QueryBuilder" , None , [vara; vare], ([[mkQueryBuilderTy];[mkQuerySourceTy varaTy vareTy;varaTy --> v_bool_ty]], mkQuerySourceTy varaTy vareTy) ) let v_query_zero_value_info = makeIntrinsicValRef(fslib_MFLinq_nleref, "Zero" , Some "QueryBuilder" , None , [vara; vare], ([[mkQueryBuilderTy];[]], mkQuerySourceTy varaTy vareTy) ) let v_fail_init_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "FailInit" , None , None , [], ([[v_unit_ty]], v_unit_ty)) let v_fail_static_init_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "FailStaticInit" , None , None , [], ([[v_unit_ty]], v_unit_ty)) @@ -1100,8 +1095,6 @@ type TcGlobals( static member IsInEmbeddableKnownSet name = isInEmbeddableKnownSet name - member _.embeddedTypeDefs = embeddedILTypeDefs.Values |> Seq.toList - member _.tryRemoveEmbeddedILTypeDefs () = [ for key in embeddedILTypeDefs.Keys.OrderBy id do match (embeddedILTypeDefs.TryRemove(key)) with @@ -1134,8 +1127,6 @@ type TcGlobals( member _.emitDebugInfoInQuotations = emitDebugInfoInQuotations - member _.directoryToResolveRelativePaths = directoryToResolveRelativePaths - member _.pathMap = pathMap member _.langVersion = langVersion @@ -1156,10 +1147,6 @@ type TcGlobals( member _.list_tcr_canon = v_list_tcr_canon - member val set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1" - - member val map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2" - member _.lazy_tcr_canon = lazy_tcr member val refcell_tcr_nice = v_refcell_tcr_nice @@ -1184,10 +1171,6 @@ type TcGlobals( member _.nativeint_tcr = v_nativeint_tcr - member _.unativeint_tcr = v_unativeint_tcr - - member _.int_tcr = v_int_tcr - member _.int32_tcr = v_int32_tcr member _.int16_tcr = v_int16_tcr @@ -1214,8 +1197,6 @@ type TcGlobals( member _.unit_tcr_canon = v_unit_tcr_canon - member _.unit_tcr_nice = v_unit_tcr_nice - member _.exn_tcr = v_exn_tcr member _.char_tcr = v_char_tcr @@ -1266,7 +1247,6 @@ type TcGlobals( member _.MatchFailureException_tcr = v_mfe_tcr - member _.tcref_IQueryable = v_tcref_IQueryable member _.tcref_IObservable = v_tcref_IObservable @@ -1355,7 +1335,6 @@ type TcGlobals( member _.string_ty_ambivalent = v_string_ty_ambivalent member _.system_IFormattable_tcref = v_IFormattable_tcref member _.system_FormattableString_tcref = v_FormattableString_tcref - member _.system_FormattableStringFactory_tcref = v_FormattableStringFactory_tcref member _.system_IFormattable_ty = v_IFormattable_ty member _.system_FormattableString_ty = v_FormattableString_ty member _.system_FormattableStringFactory_ty = v_FormattableStringFactory_ty @@ -1381,10 +1360,7 @@ type TcGlobals( member val system_Delegate_ty = mkSysNonGenericTy sys "Delegate" member val system_MulticastDelegate_ty = mkSysNonGenericTy sys "MulticastDelegate" member val system_Enum_ty = mkSysNonGenericTy sys "Enum" - member val system_Exception_ty = mkSysNonGenericTy sys "Exception" - member val system_String_typ = mkSysNonGenericTy sys "String" member val system_String_tcref = findSysTyconRef sys "String" - member val system_Int32_ty = mkSysNonGenericTy sys "Int32" member _.system_Type_ty = v_system_Type_ty member val system_TypedReference_tcref = tryFindSysTyconRef sys "TypedReference" member val system_ArgIterator_tcref = tryFindSysTyconRef sys "ArgIterator" @@ -1405,7 +1381,6 @@ type TcGlobals( member val system_Single_tcref = findSysTyconRef sys "Single" member val system_Double_tcref = findSysTyconRef sys "Double" member val system_RuntimeTypeHandle_ty = mkSysNonGenericTy sys "RuntimeTypeHandle" - member _.system_RuntimeMethodHandle_ty = v_system_RuntimeMethodHandle_ty member val system_MarshalByRefObject_tcref = tryFindSysTyconRef sys "MarshalByRefObject" member val system_MarshalByRefObject_ty = tryMkSysNonGenericTy sys "MarshalByRefObject" @@ -1413,14 +1388,11 @@ type TcGlobals( member val system_ExceptionDispatchInfo_ty = tryMkSysNonGenericTy ["System"; "Runtime"; "ExceptionServices"] "ExceptionDispatchInfo" - member _.system_Reflection_MethodInfo_ty = v_system_Reflection_MethodInfo_ty member _.mk_IAsyncStateMachine_ty = mkSysNonGenericTy sysCompilerServices "IAsyncStateMachine" - member val system_Array_tcref = v_Array_tcref member val system_Object_tcref = findSysTyconRef sys "Object" member val system_Value_tcref = findSysTyconRef sys "ValueType" member val system_Void_tcref = findSysTyconRef sys "Void" - member val system_IndexOutOfRangeException_tcref = findSysTyconRef sys "IndexOutOfRangeException" member val system_Nullable_tcref = v_nullable_tcr member val system_GenericIComparable_tcref = findSysTyconRef sys "IComparable`1" member val system_GenericIEquatable_tcref = findSysTyconRef sys "IEquatable`1" @@ -1438,7 +1410,6 @@ type TcGlobals( member val tcref_System_Collections_IEqualityComparer = findSysTyconRef sysCollections "IEqualityComparer" member val tcref_System_Collections_Generic_IEqualityComparer = findSysTyconRef sysGenerics "IEqualityComparer`1" member val tcref_System_Collections_Generic_Dictionary = findSysTyconRef sysGenerics "Dictionary`2" - member val tcref_System_Collections_Generic_IDictionary = findSysTyconRef sysGenerics "IDictionary`2" member val tcref_System_IComparable = findSysTyconRef sys "IComparable" member val tcref_System_IStructuralComparable = findSysTyconRef sysCollections "IStructuralComparable" @@ -1447,7 +1418,6 @@ type TcGlobals( member val tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives" - member val tcref_System_Collections_Generic_List = findSysTyconRef sysGenerics "List`1" member val tcref_System_Collections_Generic_IList = findSysTyconRef sysGenerics "IList`1" member val tcref_System_Collections_Generic_IReadOnlyList = findSysTyconRef sysGenerics "IReadOnlyList`1" member val tcref_System_Collections_Generic_ICollection = findSysTyconRef sysGenerics "ICollection`1" @@ -1462,7 +1432,6 @@ type TcGlobals( // Review: Does this need to be an option type? member val System_Runtime_CompilerServices_RuntimeFeature_ty = tryFindSysTyconRef sysCompilerServices "RuntimeFeature" |> Option.map mkNonGenericTy - member val iltyp_TypedReference = tryFindSysILTypeRef "System.TypedReference" |> Option.map mkILNonGenericValueTy member val iltyp_StreamingContext = tryFindSysILTypeRef tname_StreamingContext |> Option.map mkILNonGenericValueTy member val iltyp_SerializationInfo = tryFindSysILTypeRef tname_SerializationInfo |> Option.map mkILNonGenericBoxedTy member val iltyp_Missing = findSysILTypeRef tname_Missing |> mkILNonGenericBoxedTy @@ -1507,7 +1476,6 @@ type TcGlobals( member val attrib_OptionalAttribute = tryFindSysAttrib "System.Runtime.InteropServices.OptionalAttribute" member val attrib_DefaultParameterValueAttribute = tryFindSysAttrib "System.Runtime.InteropServices.DefaultParameterValueAttribute" member val attrib_ThreadStaticAttribute = tryFindSysAttrib "System.ThreadStaticAttribute" - member val attrib_SpecialNameAttribute = tryFindSysAttrib "System.Runtime.CompilerServices.SpecialNameAttribute" member val attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute" member val attrib_NoEagerConstraintApplicationAttribute = mk_MFCompilerServices_attrib "NoEagerConstraintApplicationAttribute" member val attrib_ContextStaticAttribute = tryFindSysAttrib "System.ContextStaticAttribute" @@ -1521,7 +1489,6 @@ type TcGlobals( member val attrib_CallerLineNumberAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerLineNumberAttribute" member val attrib_CallerFilePathAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerFilePathAttribute" member val attrib_CallerMemberNameAttribute = findSysAttrib "System.Runtime.CompilerServices.CallerMemberNameAttribute" - member val attrib_ReferenceAssemblyAttribute = findSysAttrib "System.Runtime.CompilerServices.ReferenceAssemblyAttribute" member val attrib_SkipLocalsInitAttribute = findSysAttrib "System.Runtime.CompilerServices.SkipLocalsInitAttribute" member val attribs_Unsupported = v_attribs_Unsupported @@ -1587,7 +1554,6 @@ type TcGlobals( member _.new_decimal_info = v_new_decimal_info member _.seq_info = v_seq_info member val seq_vref = (ValRefForIntrinsic v_seq_info) - member val fsharpref_vref = (ValRefForIntrinsic v_refcell_info) member val and_vref = (ValRefForIntrinsic v_and_info) member val and2_vref = (ValRefForIntrinsic v_and2_info) member val addrof_vref = (ValRefForIntrinsic v_addrof_info) @@ -1645,9 +1611,7 @@ type TcGlobals( member _.unchecked_multiply_info = v_unchecked_multiply_info member _.unchecked_division_info = v_unchecked_division_info member _.unchecked_modulus_info = v_unchecked_modulus_info - member _.unchecked_unary_plus_info = v_unchecked_unary_plus_info member _.unchecked_unary_minus_info = v_unchecked_unary_minus_info - member _.unchecked_unary_not_info = v_unchecked_unary_not_info member _.unchecked_defaultof_info = v_unchecked_defaultof_info member _.checked_addition_info = v_checked_addition_info @@ -1671,7 +1635,6 @@ type TcGlobals( member _.sbyte_operator_info = v_sbyte_operator_info member _.int16_operator_info = v_int16_operator_info member _.uint16_operator_info = v_uint16_operator_info - member _.int_operator_info = v_int_operator_info member _.int32_operator_info = v_int32_operator_info member _.uint32_operator_info = v_uint32_operator_info member _.int64_operator_info = v_int64_operator_info @@ -1713,13 +1676,7 @@ type TcGlobals( member _.box_info = v_box_info member _.isnull_info = v_isnull_info member _.raise_info = v_raise_info - member _.failwith_info = v_failwith_info - member _.invalid_arg_info = v_invalid_arg_info - member _.null_arg_info = v_null_arg_info - member _.invalid_op_info = v_invalid_op_info - member _.failwithf_info = v_failwithf_info member _.reraise_info = v_reraise_info - member _.methodhandleof_info = v_methodhandleof_info member _.typeof_info = v_typeof_info member _.typedefof_info = v_typedefof_info @@ -1758,7 +1715,6 @@ type TcGlobals( member val seq_append_vref = ValRefForIntrinsic v_seq_append_info member val seq_generated_vref = ValRefForIntrinsic v_seq_generated_info member val seq_finally_vref = ValRefForIntrinsic v_seq_finally_info - member val seq_of_functions_vref = ValRefForIntrinsic v_seq_of_functions_info member val seq_map_vref = ValRefForIntrinsic v_seq_map_info member val seq_empty_vref = ValRefForIntrinsic v_seq_empty_info member val new_format_vref = ValRefForIntrinsic v_new_format_info @@ -1775,7 +1731,6 @@ type TcGlobals( member val query_yield_vref = ValRefForIntrinsic v_query_yield_value_info member val query_yield_from_vref = ValRefForIntrinsic v_query_yield_from_value_info member val query_select_vref = ValRefForIntrinsic v_query_select_value_info - member val query_where_vref = ValRefForIntrinsic v_query_where_value_info member val query_zero_vref = ValRefForIntrinsic v_query_zero_value_info member val seq_to_list_vref = ValRefForIntrinsic v_seq_to_list_info member val seq_to_array_vref = ValRefForIntrinsic v_seq_to_array_info @@ -1801,7 +1756,6 @@ type TcGlobals( member _.getstring_info = v_getstring_info member _.unbox_fast_info = v_unbox_fast_info member _.istype_info = v_istype_info - member _.istype_fast_info = v_istype_fast_info member _.lazy_force_info = v_lazy_force_info member _.lazy_create_info = v_lazy_create_info member _.create_instance_info = v_create_instance_info diff --git a/src/Compiler/TypedTree/TcGlobals.fsi b/src/Compiler/TypedTree/TcGlobals.fsi new file mode 100644 index 00000000000..b0b4a4d496b --- /dev/null +++ b/src/Compiler/TypedTree/TcGlobals.fsi @@ -0,0 +1,1371 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +module internal FSharp.Compiler.TcGlobals + +val internal DummyFileNameForRangesWithoutASpecificLocation: string + +/// Represents an intrinsic value from FSharp.Core known to the compiler +[] +type internal IntrinsicValRef = + | IntrinsicValRef of + FSharp.Compiler.TypedTree.NonLocalEntityRef * + string * + bool * + FSharp.Compiler.TypedTree.TType * + FSharp.Compiler.TypedTree.ValLinkageFullKey + + /// For debugging + override ToString: unit -> string + + /// For debugging + [ (0))>] + member DebugText: string + + member Name: string + +val internal ValRefForIntrinsic: IntrinsicValRef -> FSharp.Compiler.TypedTree.ValRef + +[] +module internal FSharpLib = + + val Root: string + + val RootPath: string list + + val Core: string + + val CorePath: string list + + val CoreOperatorsCheckedName: string + + val ControlName: string + + val LinqName: string + + val CollectionsName: string + + val LanguagePrimitivesName: string + + val CompilerServicesName: string + + val LinqRuntimeHelpersName: string + + val ExtraTopLevelOperatorsName: string + + val NativeInteropName: string + + val QuotationsName: string + + val ControlPath: string list + + val LinqPath: string list + + val CollectionsPath: string list + + val NativeInteropPath: string array + + val CompilerServicesPath: string array + + val LinqRuntimeHelpersPath: string array + + val QuotationsPath: string array + + val RootPathArray: string array + + val CorePathArray: string array + + val LinqPathArray: string array + + val ControlPathArray: string array + + val CollectionsPathArray: string array + +[] +type internal BuiltinAttribInfo = + | AttribInfo of FSharp.Compiler.AbstractIL.IL.ILTypeRef * FSharp.Compiler.TypedTree.TyconRef + + /// For debugging + override ToString: unit -> string + + /// For debugging + [ (0))>] + member DebugText: string + + member TyconRef: FSharp.Compiler.TypedTree.TyconRef + + member TypeRef: FSharp.Compiler.AbstractIL.IL.ILTypeRef + +[] +val internal tname_InternalsVisibleToAttribute: string = "System.Runtime.CompilerServices.InternalsVisibleToAttribute" + +[] +val internal tname_DebuggerHiddenAttribute: string = "System.Diagnostics.DebuggerHiddenAttribute" + +[] +val internal tname_DebuggerStepThroughAttribute: string = "System.Diagnostics.DebuggerStepThroughAttribute" + +[] +val internal tname_StringBuilder: string = "System.Text.StringBuilder" + +[] +val internal tname_FormattableString: string = "System.FormattableString" + +[] +val internal tname_SecurityPermissionAttribute: string = "System.Security.Permissions.SecurityPermissionAttribute" + +[] +val internal tname_Delegate: string = "System.Delegate" + +[] +val internal tname_Enum: string = "System.Enum" + +[] +val internal tname_FlagsAttribute: string = "System.FlagsAttribute" + +[] +val internal tname_Array: string = "System.Array" + +[] +val internal tname_RuntimeArgumentHandle: string = "System.RuntimeArgumentHandle" + +[] +val internal tname_IsByRefLikeAttribute: string = "System.Runtime.CompilerServices.IsByRefLikeAttribute" + +type internal TcGlobals = + + new: + compilingFSharpCore: bool * + ilg: FSharp.Compiler.AbstractIL.IL.ILGlobals * + fslibCcu: FSharp.Compiler.TypedTree.CcuThunk * + directoryToResolveRelativePaths: string * + mlCompatibility: bool * + isInteractive: bool * + checkNullness: bool * + useReflectionFreeCodeGen: bool * + tryFindSysTypeCcuHelper: (string list -> string -> bool -> FSharp.Compiler.TypedTree.CcuThunk option) * + emitDebugInfoInQuotations: bool * + noDebugAttributes: bool * + pathMap: Internal.Utilities.PathMap * + langVersion: FSharp.Compiler.Features.LanguageVersion * + realsig: bool -> + TcGlobals + + static member IsInEmbeddableKnownSet: name: string -> bool + + member AddFieldGeneratedAttributes: + mdef: FSharp.Compiler.AbstractIL.IL.ILFieldDef -> FSharp.Compiler.AbstractIL.IL.ILFieldDef + + member AddFieldNeverAttributes: + mdef: FSharp.Compiler.AbstractIL.IL.ILFieldDef -> FSharp.Compiler.AbstractIL.IL.ILFieldDef + + member AddGeneratedAttributes: + attrs: FSharp.Compiler.AbstractIL.IL.ILAttributes -> FSharp.Compiler.AbstractIL.IL.ILAttributes + + member AddMethodGeneratedAttributes: + mdef: FSharp.Compiler.AbstractIL.IL.ILMethodDef -> FSharp.Compiler.AbstractIL.IL.ILMethodDef + + member AddPropertyGeneratedAttributes: + mdef: FSharp.Compiler.AbstractIL.IL.ILPropertyDef -> FSharp.Compiler.AbstractIL.IL.ILPropertyDef + + member AddPropertyNeverAttributes: + mdef: FSharp.Compiler.AbstractIL.IL.ILPropertyDef -> FSharp.Compiler.AbstractIL.IL.ILPropertyDef + + member AddValGeneratedAttributes: v: FSharp.Compiler.TypedTree.Val -> (FSharp.Compiler.Text.range -> unit) + + member FindSysAttrib: nm: string -> BuiltinAttribInfo + + member FindSysILTypeRef: nm: string -> FSharp.Compiler.AbstractIL.IL.ILTypeRef + + member isSpliceOperator: FSharp.Compiler.TypedTree.ValRef -> bool + + member FindSysTyconRef: path: string list -> nm: string -> FSharp.Compiler.TypedTree.EntityRef + + member HasTailCallAttrib: attribs: FSharp.Compiler.TypedTree.Attribs -> bool + + /// Find an FSharp.Core LaguagePrimitives dynamic function that corresponds to a trait witness, e.g. + /// AdditionDynamic for op_Addition. Also work out the type instantiation of the dynamic function. + member MakeBuiltInWitnessInfo: + t: FSharp.Compiler.TypedTree.TraitConstraintInfo -> IntrinsicValRef * FSharp.Compiler.TypedTree.TType list + + member MakeInternalsVisibleToAttribute: simpleAssemName: string -> FSharp.Compiler.AbstractIL.IL.ILAttribute + + member MkDebuggerTypeProxyAttribute: + ty: FSharp.Compiler.AbstractIL.IL.ILType -> FSharp.Compiler.AbstractIL.IL.ILAttribute + + member TryEmbedILType: + tref: FSharp.Compiler.AbstractIL.IL.ILTypeRef * + mkEmbeddableType: (unit -> FSharp.Compiler.AbstractIL.IL.ILTypeDef) -> + unit + + member TryFindSysAttrib: nm: string -> BuiltinAttribInfo option + + member TryFindSysILTypeRef: nm: string -> FSharp.Compiler.AbstractIL.IL.ILTypeRef option + + member TryFindSysTyconRef: path: string list -> nm: string -> FSharp.Compiler.TypedTree.EntityRef option + + /// Find an FSharp.Core operator that corresponds to a trait witness + member TryMakeOperatorAsBuiltInWitnessInfo: + isStringTy: (TcGlobals -> FSharp.Compiler.TypedTree.TType -> bool) -> + isArrayTy: (TcGlobals -> FSharp.Compiler.TypedTree.TType -> bool) -> + t: FSharp.Compiler.TypedTree.TraitConstraintInfo -> + argExprs: 'a list -> + (IntrinsicValRef * FSharp.Compiler.TypedTree.TType list * 'a list) option + + member decompileType: + tcref: FSharp.Compiler.TypedTree.EntityRef -> + tinst: FSharp.Compiler.TypedTree.TypeInst -> + (FSharp.Compiler.TypedTree.Nullness -> FSharp.Compiler.TypedTree.TType) + + member improveType: + tcref: FSharp.Compiler.TypedTree.EntityRef -> + tinst: FSharp.Compiler.TypedTree.TType list -> + (FSharp.Compiler.TypedTree.Nullness -> FSharp.Compiler.TypedTree.TType) + + /// Memoization table to help minimize the number of ILSourceDocument objects we create + member memoize_file: x: int -> FSharp.Compiler.AbstractIL.IL.ILSourceDocument + + member mkDebuggableAttributeV2: + jitTracking: bool * jitOptimizerDisabled: bool -> FSharp.Compiler.AbstractIL.IL.ILAttribute + + member mkDebuggerDisplayAttribute: s: string -> FSharp.Compiler.AbstractIL.IL.ILAttribute + + member mk_ArrayCollector_ty: seqElemTy: FSharp.Compiler.TypedTree.TType -> FSharp.Compiler.TypedTree.TType + + member mk_GeneratedSequenceBase_ty: seqElemTy: FSharp.Compiler.TypedTree.TType -> FSharp.Compiler.TypedTree.TType + + member mk_IResumableStateMachine_ty: dataTy: FSharp.Compiler.TypedTree.TType -> FSharp.Compiler.TypedTree.TType + + member mk_ListCollector_ty: seqElemTy: FSharp.Compiler.TypedTree.TType -> FSharp.Compiler.TypedTree.TType + + member mk_ResumableStateMachine_ty: dataTy: FSharp.Compiler.TypedTree.TType -> FSharp.Compiler.TypedTree.TType + + member tryRemoveEmbeddedILTypeDefs: unit -> FSharp.Compiler.AbstractIL.IL.ILTypeDef list + + member unionCaseRefEq: + x: FSharp.Compiler.TypedTree.UnionCaseRef -> y: FSharp.Compiler.TypedTree.UnionCaseRef -> bool + + member valRefEq: x: FSharp.Compiler.TypedTree.ValRef -> y: FSharp.Compiler.TypedTree.ValRef -> bool + + member CompilerGeneratedAttribute: FSharp.Compiler.AbstractIL.IL.ILAttribute + + member CompilerGlobalState: FSharp.Compiler.CompilerGlobalState.CompilerGlobalState option + + member DebuggerBrowsableNeverAttribute: FSharp.Compiler.AbstractIL.IL.ILAttribute + + member DebuggerNonUserCodeAttribute: FSharp.Compiler.AbstractIL.IL.ILAttribute + + member IComparer_ty: FSharp.Compiler.TypedTree.TType + + member IEqualityComparer_ty: FSharp.Compiler.TypedTree.TType + + member ListCollector_tcr: FSharp.Compiler.TypedTree.EntityRef + + member MatchFailureException_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ResumableCode_tcr: FSharp.Compiler.TypedTree.EntityRef + + member System_Runtime_CompilerServices_RuntimeFeature_ty: FSharp.Compiler.TypedTree.TType option + + member addrof2_vref: FSharp.Compiler.TypedTree.ValRef + + member addrof_vref: FSharp.Compiler.TypedTree.ValRef + + member and2_vref: FSharp.Compiler.TypedTree.ValRef + + member and_vref: FSharp.Compiler.TypedTree.ValRef + + member array2D_get_info: IntrinsicValRef + + member array2D_get_vref: FSharp.Compiler.TypedTree.ValRef + + member array2D_set_info: IntrinsicValRef + + member array3D_get_info: IntrinsicValRef + + member array3D_get_vref: FSharp.Compiler.TypedTree.ValRef + + member array3D_set_info: IntrinsicValRef + + member array4D_get_info: IntrinsicValRef + + member array4D_get_vref: FSharp.Compiler.TypedTree.ValRef + + member array4D_set_info: IntrinsicValRef + + member array_get_info: IntrinsicValRef + + member array_get_vref: FSharp.Compiler.TypedTree.ValRef + + member array_length_info: IntrinsicValRef + + member array_set_info: IntrinsicValRef + + member array_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member attrib_AbstractClassAttribute: BuiltinAttribInfo + + member attrib_AllowNullLiteralAttribute: BuiltinAttribInfo + + member attrib_AttributeUsageAttribute: BuiltinAttribInfo + + member attrib_AutoOpenAttribute: BuiltinAttribInfo + + member attrib_AutoSerializableAttribute: BuiltinAttribInfo + + member attrib_CLIEventAttribute: BuiltinAttribInfo + + member attrib_CLIMutableAttribute: BuiltinAttribInfo + + member attrib_CallerFilePathAttribute: BuiltinAttribInfo + + member attrib_CallerLineNumberAttribute: BuiltinAttribInfo + + member attrib_CallerMemberNameAttribute: BuiltinAttribInfo + + member attrib_ClassAttribute: BuiltinAttribInfo + + member attrib_ComImportAttribute: BuiltinAttribInfo option + + member attrib_ComVisibleAttribute: BuiltinAttribInfo + + member attrib_ComparisonConditionalOnAttribute: BuiltinAttribInfo + + member attrib_CompilationArgumentCountsAttribute: BuiltinAttribInfo + + member attrib_CompilationMappingAttribute: BuiltinAttribInfo + + member attrib_CompilationRepresentationAttribute: BuiltinAttribInfo + + member attrib_CompiledNameAttribute: BuiltinAttribInfo + + member attrib_CompilerFeatureRequiredAttribute: BuiltinAttribInfo + + member attrib_CompilerMessageAttribute: BuiltinAttribInfo + + member attrib_ComponentModelEditorBrowsableAttribute: BuiltinAttribInfo + + member attrib_ConditionalAttribute: BuiltinAttribInfo + + member attrib_ContextStaticAttribute: BuiltinAttribInfo option + + member attrib_CustomComparisonAttribute: BuiltinAttribInfo + + member attrib_CustomEqualityAttribute: BuiltinAttribInfo + + member attrib_CustomOperationAttribute: BuiltinAttribInfo + + member attrib_DebuggerDisplayAttribute: BuiltinAttribInfo + + member attrib_DebuggerTypeProxyAttribute: BuiltinAttribInfo + + member attrib_DefaultAugmentationAttribute: BuiltinAttribInfo + + member attrib_DefaultMemberAttribute: BuiltinAttribInfo + + member attrib_DefaultParameterValueAttribute: BuiltinAttribInfo option + + member attrib_DefaultValueAttribute: BuiltinAttribInfo + + member attrib_DllImportAttribute: BuiltinAttribInfo option + + member attrib_DynamicDependencyAttribute: BuiltinAttribInfo + + member attrib_EntryPointAttribute: BuiltinAttribInfo + + member attrib_EqualityConditionalOnAttribute: BuiltinAttribInfo + + member attrib_ExperimentalAttribute: BuiltinAttribInfo + + member attrib_ExtensionAttribute: BuiltinAttribInfo + + member attrib_FieldOffsetAttribute: BuiltinAttribInfo + + member attrib_FlagsAttribute: BuiltinAttribInfo + + member attrib_GeneralizableValueAttribute: BuiltinAttribInfo + + member attrib_IDispatchConstantAttribute: BuiltinAttribInfo option + + member attrib_IUnknownConstantAttribute: BuiltinAttribInfo option + + member attrib_InAttribute: BuiltinAttribInfo + + member attrib_InlineIfLambdaAttribute: BuiltinAttribInfo + + member attrib_InterfaceAttribute: BuiltinAttribInfo + + member attrib_InternalsVisibleToAttribute: BuiltinAttribInfo + + member attrib_IsReadOnlyAttribute: BuiltinAttribInfo + + member attrib_IsUnmanagedAttribute: BuiltinAttribInfo + + member attrib_LiteralAttribute: BuiltinAttribInfo + + member attrib_MarshalAsAttribute: BuiltinAttribInfo option + + member attrib_MeasureAttribute: BuiltinAttribInfo + + member attrib_MeasureableAttribute: BuiltinAttribInfo + + member attrib_MemberNotNullWhenAttribute: BuiltinAttribInfo + + member attrib_MethodImplAttribute: BuiltinAttribInfo + + member attrib_NoComparisonAttribute: BuiltinAttribInfo + + member attrib_NoCompilerInliningAttribute: BuiltinAttribInfo + + member attrib_NoDynamicInvocationAttribute: BuiltinAttribInfo + + member attrib_NoEagerConstraintApplicationAttribute: BuiltinAttribInfo + + member attrib_NoEqualityAttribute: BuiltinAttribInfo + + member attrib_NonSerializedAttribute: BuiltinAttribInfo option + + member attrib_NullableAttribute: BuiltinAttribInfo + + member attrib_NullableAttribute_opt: BuiltinAttribInfo option + + member attrib_NullableContextAttribute: BuiltinAttribInfo + + member attrib_NullableContextAttribute_opt: BuiltinAttribInfo option + + member attrib_OptionalArgumentAttribute: BuiltinAttribInfo + + member attrib_OptionalAttribute: BuiltinAttribInfo option + + member attrib_OutAttribute: BuiltinAttribInfo + + member attrib_ParamArrayAttribute: BuiltinAttribInfo + + member attrib_PreserveSigAttribute: BuiltinAttribInfo option + + member attrib_ProjectionParameterAttribute: BuiltinAttribInfo + + member attrib_ReferenceEqualityAttribute: BuiltinAttribInfo + + member attrib_ReflectedDefinitionAttribute: BuiltinAttribInfo + + member attrib_RequireQualifiedAccessAttribute: BuiltinAttribInfo + + member attrib_RequiredMemberAttribute: BuiltinAttribInfo + + member attrib_RequiresExplicitTypeArgumentsAttribute: BuiltinAttribInfo + + member attrib_RequiresLocationAttribute: BuiltinAttribInfo + + member attrib_SealedAttribute: BuiltinAttribInfo + + member attrib_SecurityAttribute: BuiltinAttribInfo option + + member attrib_SecurityCriticalAttribute: BuiltinAttribInfo + + member attrib_SecuritySafeCriticalAttribute: BuiltinAttribInfo + + member attrib_SetsRequiredMembersAttribute: BuiltinAttribInfo + + member attrib_SkipLocalsInitAttribute: BuiltinAttribInfo + + member attrib_StructAttribute: BuiltinAttribInfo + + member attrib_StructLayoutAttribute: BuiltinAttribInfo + + member attrib_StructuralComparisonAttribute: BuiltinAttribInfo + + member attrib_StructuralEqualityAttribute: BuiltinAttribInfo + + member attrib_SystemObsolete: BuiltinAttribInfo + + member attrib_ThreadStaticAttribute: BuiltinAttribInfo option + + member attrib_TypeForwardedToAttribute: BuiltinAttribInfo + + member attrib_UnverifiableAttribute: BuiltinAttribInfo + + member attrib_VolatileFieldAttribute: BuiltinAttribInfo + + member attrib_WarnOnWithoutNullArgumentAttribute: BuiltinAttribInfo + + member attribs_Unsupported: FSharp.Compiler.TypedTree.TyconRef list + + member bitwise_and_info: IntrinsicValRef + + member bitwise_and_vref: FSharp.Compiler.TypedTree.ValRef + + member bitwise_or_info: IntrinsicValRef + + member bitwise_or_vref: FSharp.Compiler.TypedTree.ValRef + + member bitwise_shift_left_info: IntrinsicValRef + + member bitwise_shift_left_vref: FSharp.Compiler.TypedTree.ValRef + + member bitwise_shift_right_info: IntrinsicValRef + + member bitwise_shift_right_vref: FSharp.Compiler.TypedTree.ValRef + + member bitwise_unary_not_info: IntrinsicValRef + + member bitwise_unary_not_vref: FSharp.Compiler.TypedTree.ValRef + + member bitwise_xor_info: IntrinsicValRef + + member bitwise_xor_vref: FSharp.Compiler.TypedTree.ValRef + + member bool_tcr: FSharp.Compiler.TypedTree.EntityRef + + member bool_ty: FSharp.Compiler.TypedTree.TType + + member box_info: IntrinsicValRef + + member byref2_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byref_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byrefkind_InOut_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byrefkind_In_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byrefkind_Out_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byte_checked_info: IntrinsicValRef + + member byte_operator_info: IntrinsicValRef + + member byte_tcr: FSharp.Compiler.TypedTree.EntityRef + + member byte_ty: FSharp.Compiler.TypedTree.TType + + member call_with_witnesses_info: IntrinsicValRef + + member cast_quotation_info: IntrinsicValRef + + member cgh__debugPoint_vref: FSharp.Compiler.TypedTree.ValRef + + member cgh__resumableEntry_vref: FSharp.Compiler.TypedTree.ValRef + + member cgh__resumeAt_vref: FSharp.Compiler.TypedTree.ValRef + + member cgh__stateMachine_vref: FSharp.Compiler.TypedTree.ValRef + + member cgh__useResumableCode_vref: FSharp.Compiler.TypedTree.ValRef + + member char_operator_info: IntrinsicValRef + + member char_tcr: FSharp.Compiler.TypedTree.EntityRef + + member char_ty: FSharp.Compiler.TypedTree.TType + + member checkNullness: bool + + member check_this_info: IntrinsicValRef + + member checked_addition_info: IntrinsicValRef + + member checked_multiply_info: IntrinsicValRef + + member checked_subtraction_info: IntrinsicValRef + + member checked_unary_minus_info: IntrinsicValRef + + member choice2_tcr: FSharp.Compiler.TypedTree.EntityRef + + member choice3_tcr: FSharp.Compiler.TypedTree.EntityRef + + member choice4_tcr: FSharp.Compiler.TypedTree.EntityRef + + member choice5_tcr: FSharp.Compiler.TypedTree.EntityRef + + member choice6_tcr: FSharp.Compiler.TypedTree.EntityRef + + member choice7_tcr: FSharp.Compiler.TypedTree.EntityRef + + member compare_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member compilingFSharpCore: bool + + member cons_ucref: FSharp.Compiler.TypedTree.UnionCaseRef + + member create_event_info: IntrinsicValRef + + member create_instance_info: IntrinsicValRef + + member date_tcr: FSharp.Compiler.TypedTree.EntityRef + + member decimal_tcr: FSharp.Compiler.TypedTree.EntityRef + + member decimal_ty: FSharp.Compiler.TypedTree.TType + + member deserialize_quoted_FSharp_20_plus_info: IntrinsicValRef + + member deserialize_quoted_FSharp_40_plus_info: IntrinsicValRef + + member dispose_info: IntrinsicValRef + + member emitDebugInfoInQuotations: bool + + member enumOfValue_vref: FSharp.Compiler.TypedTree.ValRef + + member enum_DynamicallyAccessedMemberTypes: BuiltinAttribInfo + + member enum_operator_info: IntrinsicValRef + + member enum_vref: FSharp.Compiler.TypedTree.ValRef + + member equals_nullable_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member equals_operator_info: IntrinsicValRef + + member equals_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member exn_tcr: FSharp.Compiler.TypedTree.EntityRef + + member exn_ty: FSharp.Compiler.TypedTree.TType + + member exponentiation_vref: FSharp.Compiler.TypedTree.ValRef + + member expr_tcr: FSharp.Compiler.TypedTree.EntityRef + + member fail_init_info: IntrinsicValRef + + member fail_static_init_info: IntrinsicValRef + + member failwith_vref: FSharp.Compiler.TypedTree.ValRef + + member failwithf_vref: FSharp.Compiler.TypedTree.ValRef + + member fastFunc_tcr: FSharp.Compiler.TypedTree.EntityRef + + member float32_operator_info: IntrinsicValRef + + member float32_tcr: FSharp.Compiler.TypedTree.EntityRef + + member float32_ty: FSharp.Compiler.TypedTree.TType + + member float_operator_info: IntrinsicValRef + + member float_tcr: FSharp.Compiler.TypedTree.EntityRef + + member float_ty: FSharp.Compiler.TypedTree.TType + + member format4_tcr: FSharp.Compiler.TypedTree.EntityRef + + member format_tcr: FSharp.Compiler.TypedTree.EntityRef + + member fslibCcu: FSharp.Compiler.TypedTree.CcuThunk + + member fslib_IDelegateEvent_tcr: FSharp.Compiler.TypedTree.EntityRef + + member fslib_IEvent2_tcr: FSharp.Compiler.TypedTree.EntityRef + + /// Indicates if we are generating witness arguments for SRTP constraints. Only done if the FSharp.Core + /// supports witness arguments. + member generateWitnesses: bool + + member generic_compare_withc_tuple2_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_compare_withc_tuple3_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_compare_withc_tuple4_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_compare_withc_tuple5_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_comparison_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_comparison_withc_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_comparison_withc_outer_info: IntrinsicValRef + + member generic_equality_er_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equality_er_outer_info: IntrinsicValRef + + member generic_equality_per_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equality_withc_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equality_withc_outer_info: IntrinsicValRef + + member generic_equality_withc_outer_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equals_withc_tuple2_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equals_withc_tuple3_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equals_withc_tuple4_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_equals_withc_tuple5_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_withc_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_withc_outer_info: IntrinsicValRef + + member generic_hash_withc_tuple2_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_withc_tuple3_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_withc_tuple4_vref: FSharp.Compiler.TypedTree.ValRef + + member generic_hash_withc_tuple5_vref: FSharp.Compiler.TypedTree.ValRef + + member get_generic_comparer_info: IntrinsicValRef + + member get_generic_er_equality_comparer_info: IntrinsicValRef + + member get_generic_per_equality_comparer_info: IntrinsicValRef + + member getstring_info: IntrinsicValRef + + member greater_than_operator: IntrinsicValRef + + member greater_than_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member greater_than_or_equals_operator: IntrinsicValRef + + member greater_than_or_equals_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member hash_info: IntrinsicValRef + + member il_arr_tcr_map: FSharp.Compiler.TypedTree.EntityRef array + + member ilg: FSharp.Compiler.AbstractIL.IL.ILGlobals + + member ilsigptr_tcr: FSharp.Compiler.TypedTree.EntityRef + + member iltyp_AsyncCallback: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_Exception: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_IAsyncResult: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_IComparable: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_Missing: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_ReferenceAssemblyAttributeOpt: FSharp.Compiler.AbstractIL.IL.ILType option + + member iltyp_RuntimeFieldHandle: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_RuntimeMethodHandle: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_RuntimeTypeHandle: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_SerializationInfo: FSharp.Compiler.AbstractIL.IL.ILType option + + member iltyp_StreamingContext: FSharp.Compiler.AbstractIL.IL.ILType option + + member iltyp_UnmanagedType: FSharp.Compiler.AbstractIL.IL.ILType + + member iltyp_ValueType: FSharp.Compiler.AbstractIL.IL.ILType + + member inref_tcr: FSharp.Compiler.TypedTree.EntityRef + + member int16_checked_info: IntrinsicValRef + + member int16_operator_info: IntrinsicValRef + + member int16_tcr: FSharp.Compiler.TypedTree.EntityRef + + member int16_ty: FSharp.Compiler.TypedTree.TType + + member int32_checked_info: IntrinsicValRef + + member int32_operator_info: IntrinsicValRef + + member int32_tcr: FSharp.Compiler.TypedTree.EntityRef + + member int32_ty: FSharp.Compiler.TypedTree.TType + + member int64_checked_info: IntrinsicValRef + + member int64_operator_info: IntrinsicValRef + + member int64_tcr: FSharp.Compiler.TypedTree.EntityRef + + member int64_ty: FSharp.Compiler.TypedTree.TType + + member int_checked_info: IntrinsicValRef + + member int_ty: FSharp.Compiler.TypedTree.TType + + member invalid_arg_vref: FSharp.Compiler.TypedTree.ValRef + + member invalid_op_vref: FSharp.Compiler.TypedTree.ValRef + + /// Indicates if we can use System.Array.Empty when emitting IL for empty array literals + member isArrayEmptyAvailable: bool + + /// Are we assuming all code gen is for F# interactive, with no static linking + member isInteractive: bool + + member isnull_info: IntrinsicValRef + + member istype_fast_vref: FSharp.Compiler.TypedTree.ValRef + + member istype_info: IntrinsicValRef + + member istype_vref: FSharp.Compiler.TypedTree.ValRef + + member knownFSharpCoreModules: System.Collections.Generic.IDictionary + + member knownIntrinsics: + System.Collections.Concurrent.ConcurrentDictionary<(string * string option * string * int), FSharp.Compiler.TypedTree.ValRef> + + member knownWithNull: FSharp.Compiler.TypedTree.Nullness + + member knownWithoutNull: FSharp.Compiler.TypedTree.Nullness + + member langFeatureNullness: bool + + member langVersion: FSharp.Compiler.Features.LanguageVersion + + member lazy_create_info: IntrinsicValRef + + member lazy_force_info: IntrinsicValRef + + member lazy_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member lazy_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member less_than_operator: IntrinsicValRef + + member less_than_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member less_than_or_equals_operator: IntrinsicValRef + + member less_than_or_equals_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member lift_value_info: IntrinsicValRef + + member lift_value_with_defn_info: IntrinsicValRef + + member lift_value_with_name_info: IntrinsicValRef + + member list_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member list_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member measureinverse_tcr: FSharp.Compiler.TypedTree.EntityRef + + member measureone_tcr: FSharp.Compiler.TypedTree.EntityRef + + member measureproduct_tcr: FSharp.Compiler.TypedTree.EntityRef + + member methodhandleof_vref: FSharp.Compiler.TypedTree.ValRef + + member mk_Attribute_ty: FSharp.Compiler.TypedTree.TType + + member mk_IAsyncStateMachine_ty: FSharp.Compiler.TypedTree.TType + + member mk_IComparable_ty: FSharp.Compiler.TypedTree.TType + + member mk_IStructuralComparable_ty: FSharp.Compiler.TypedTree.TType + + member mk_IStructuralEquatable_ty: FSharp.Compiler.TypedTree.TType + + member mlCompatibility: bool + + member nameof_vref: FSharp.Compiler.TypedTree.ValRef + + member nativeint_checked_info: IntrinsicValRef + + member nativeint_operator_info: IntrinsicValRef + + member nativeint_tcr: FSharp.Compiler.TypedTree.EntityRef + + member nativeint_ty: FSharp.Compiler.TypedTree.TType + + member nativeptr_tcr: FSharp.Compiler.TypedTree.EntityRef + + member nativeptr_tobyref_vref: FSharp.Compiler.TypedTree.ValRef + + member new_decimal_info: IntrinsicValRef + + member new_format_info: IntrinsicValRef + + member new_format_vref: FSharp.Compiler.TypedTree.ValRef + + member new_query_source_info: IntrinsicValRef + + member nil_ucref: FSharp.Compiler.TypedTree.UnionCaseRef + + member not_equals_operator: IntrinsicValRef + + member not_equals_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member null_arg_vref: FSharp.Compiler.TypedTree.ValRef + + member nullable_equals_nullable_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member nullable_equals_operator_vref: FSharp.Compiler.TypedTree.ValRef + + member obj_ty_ambivalent: FSharp.Compiler.TypedTree.TType + + member obj_ty_noNulls: FSharp.Compiler.TypedTree.TType + + member obj_ty_withNulls: FSharp.Compiler.TypedTree.TType + + member option_defaultValue_info: IntrinsicValRef + + member option_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member option_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member option_toNullable_info: IntrinsicValRef + + member or2_vref: FSharp.Compiler.TypedTree.ValRef + + member or_vref: FSharp.Compiler.TypedTree.ValRef + + member outref_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pathMap: Internal.Utilities.PathMap + + member pdecimal_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pfloat32_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pfloat_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pint16_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pint64_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pint8_tcr: FSharp.Compiler.TypedTree.EntityRef + + member pint_tcr: FSharp.Compiler.TypedTree.EntityRef + + member piperight2_vref: FSharp.Compiler.TypedTree.ValRef + + member piperight3_vref: FSharp.Compiler.TypedTree.ValRef + + member piperight_vref: FSharp.Compiler.TypedTree.ValRef + + member pnativeint_tcr: FSharp.Compiler.TypedTree.EntityRef + + member puint16_tcr: FSharp.Compiler.TypedTree.EntityRef + + member puint64_tcr: FSharp.Compiler.TypedTree.EntityRef + + member puint8_tcr: FSharp.Compiler.TypedTree.EntityRef + + member puint_tcr: FSharp.Compiler.TypedTree.EntityRef + + member punativeint_tcr: FSharp.Compiler.TypedTree.EntityRef + + member query_builder_tcref: FSharp.Compiler.TypedTree.EntityRef + + member query_for_vref: FSharp.Compiler.TypedTree.ValRef + + member query_run_enumerable_vref: FSharp.Compiler.TypedTree.ValRef + + member query_run_value_vref: FSharp.Compiler.TypedTree.ValRef + + member query_select_vref: FSharp.Compiler.TypedTree.ValRef + + member query_source_as_enum_info: IntrinsicValRef + + member query_source_vref: FSharp.Compiler.TypedTree.ValRef + + member query_value_vref: FSharp.Compiler.TypedTree.ValRef + + member query_yield_from_vref: FSharp.Compiler.TypedTree.ValRef + + member query_yield_vref: FSharp.Compiler.TypedTree.ValRef + + member query_zero_vref: FSharp.Compiler.TypedTree.ValRef + + member quote_to_linq_lambda_info: IntrinsicValRef + + member raise_info: IntrinsicValRef + + member raise_vref: FSharp.Compiler.TypedTree.ValRef + + member range_byte_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_char_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_generic_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_int16_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_int32_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_int64_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_nativeint_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_sbyte_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_step_generic_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_step_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_uint16_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_uint32_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_uint64_op_vref: FSharp.Compiler.TypedTree.ValRef + + member range_unativeint_op_vref: FSharp.Compiler.TypedTree.ValRef + + member raw_expr_tcr: FSharp.Compiler.TypedTree.EntityRef + + member realsig: bool + + member ref_tuple1_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple2_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple3_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple4_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple5_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple6_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple7_tcr: FSharp.Compiler.TypedTree.EntityRef + + member ref_tuple8_tcr: FSharp.Compiler.TypedTree.EntityRef + + member refcell_assign_vref: FSharp.Compiler.TypedTree.ValRef + + member refcell_decr_vref: FSharp.Compiler.TypedTree.ValRef + + member refcell_deref_vref: FSharp.Compiler.TypedTree.ValRef + + member refcell_incr_vref: FSharp.Compiler.TypedTree.ValRef + + member refcell_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member refcell_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member reference_equality_inner_vref: FSharp.Compiler.TypedTree.ValRef + + member renderNullnessAnnotations: bool + + member reraise_info: IntrinsicValRef + + member reraise_vref: FSharp.Compiler.TypedTree.ValRef + + member sbyte_checked_info: IntrinsicValRef + + member sbyte_operator_info: IntrinsicValRef + + member sbyte_tcr: FSharp.Compiler.TypedTree.EntityRef + + member sbyte_ty: FSharp.Compiler.TypedTree.TType + + member seq_append_info: IntrinsicValRef + + member seq_append_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_collect_info: IntrinsicValRef + + member seq_collect_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_delay_info: IntrinsicValRef + + member seq_delay_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_empty_info: IntrinsicValRef + + member seq_empty_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_finally_info: IntrinsicValRef + + member seq_finally_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_generated_info: IntrinsicValRef + + member seq_generated_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_info: IntrinsicValRef + + member seq_map_info: IntrinsicValRef + + member seq_map_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_of_functions_info: IntrinsicValRef + + member seq_singleton_info: IntrinsicValRef + + member seq_singleton_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_tcr: FSharp.Compiler.TypedTree.EntityRef + + member seq_to_array_info: IntrinsicValRef + + member seq_to_array_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_to_list_info: IntrinsicValRef + + member seq_to_list_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_trywith_info: IntrinsicValRef + + member seq_using_info: IntrinsicValRef + + member seq_using_vref: FSharp.Compiler.TypedTree.ValRef + + member seq_vref: FSharp.Compiler.TypedTree.ValRef + + member sizeof_vref: FSharp.Compiler.TypedTree.ValRef + + member splice_expr_vref: FSharp.Compiler.TypedTree.ValRef + + member splice_raw_expr_vref: FSharp.Compiler.TypedTree.ValRef + + member sprintf_info: IntrinsicValRef + + member sprintf_vref: FSharp.Compiler.TypedTree.ValRef + + member string_ty: FSharp.Compiler.TypedTree.TType + + member string_ty_ambivalent: FSharp.Compiler.TypedTree.TType + + member struct_tuple1_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple2_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple3_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple4_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple5_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple6_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple7_tcr: FSharp.Compiler.TypedTree.EntityRef + + member struct_tuple8_tcr: FSharp.Compiler.TypedTree.EntityRef + + member suppressed_types: FSharp.Compiler.TypedTree.EntityRef list + + member system_ArgIterator_tcref: FSharp.Compiler.TypedTree.EntityRef option + + member system_Array_ty: FSharp.Compiler.TypedTree.TType + + member system_Bool_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Byte_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Char_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Decimal_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Delegate_ty: FSharp.Compiler.TypedTree.TType + + member system_Double_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Enum_ty: FSharp.Compiler.TypedTree.TType + + member system_ExceptionDispatchInfo_ty: FSharp.Compiler.TypedTree.TType option + + member system_FormattableStringFactory_ty: FSharp.Compiler.TypedTree.TType + + member system_FormattableString_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_FormattableString_ty: FSharp.Compiler.TypedTree.TType + + member system_GenericIComparable_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_GenericIEquatable_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_IDisposable_ty: FSharp.Compiler.TypedTree.TType + + member system_IFormattable_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_IFormattable_ty: FSharp.Compiler.TypedTree.TType + + member system_Int16_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Int32_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Int64_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_IntPtr_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_LinqExpression_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_MarshalByRefObject_tcref: FSharp.Compiler.TypedTree.EntityRef option + + member system_MarshalByRefObject_ty: FSharp.Compiler.TypedTree.TType option + + member system_MulticastDelegate_ty: FSharp.Compiler.TypedTree.TType + + member system_Nullable_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Object_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Object_ty: FSharp.Compiler.TypedTree.TType + + member system_RuntimeArgumentHandle_tcref: FSharp.Compiler.TypedTree.EntityRef option + + member system_RuntimeHelpers_ty: FSharp.Compiler.TypedTree.TType + + member system_RuntimeTypeHandle_ty: FSharp.Compiler.TypedTree.TType + + member system_SByte_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Single_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_String_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Type_ty: FSharp.Compiler.TypedTree.TType + + member system_TypedReference_tcref: FSharp.Compiler.TypedTree.EntityRef option + + member system_UInt16_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_UInt32_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_UInt64_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_UIntPtr_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Value_tcref: FSharp.Compiler.TypedTree.EntityRef + + member system_Value_ty: FSharp.Compiler.TypedTree.TType + + member system_Void_tcref: FSharp.Compiler.TypedTree.EntityRef + + member tcref_IObservable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_IObserver: FSharp.Compiler.TypedTree.EntityRef + + member tcref_LanguagePrimitives: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Attribute: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_Dictionary: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_ICollection: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IEnumerable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IEnumerator: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IEqualityComparer: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IList: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IReadOnlyCollection: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_Generic_IReadOnlyList: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_IComparer: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_IEnumerable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_Collections_IEqualityComparer: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_IComparable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_IDisposable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_IStructuralComparable: FSharp.Compiler.TypedTree.EntityRef + + member tcref_System_IStructuralEquatable: FSharp.Compiler.TypedTree.EntityRef + + member typedefof_info: IntrinsicValRef + + member typedefof_vref: FSharp.Compiler.TypedTree.ValRef + + member typeof_info: IntrinsicValRef + + member typeof_vref: FSharp.Compiler.TypedTree.ValRef + + member uint16_checked_info: IntrinsicValRef + + member uint16_operator_info: IntrinsicValRef + + member uint16_tcr: FSharp.Compiler.TypedTree.EntityRef + + member uint16_ty: FSharp.Compiler.TypedTree.TType + + member uint32_checked_info: IntrinsicValRef + + member uint32_operator_info: IntrinsicValRef + + member uint32_tcr: FSharp.Compiler.TypedTree.EntityRef + + member uint32_ty: FSharp.Compiler.TypedTree.TType + + member uint64_checked_info: IntrinsicValRef + + member uint64_operator_info: IntrinsicValRef + + member uint64_tcr: FSharp.Compiler.TypedTree.EntityRef + + member uint64_ty: FSharp.Compiler.TypedTree.TType + + member unativeint_checked_info: IntrinsicValRef + + member unativeint_operator_info: IntrinsicValRef + + member unativeint_ty: FSharp.Compiler.TypedTree.TType + + member unbox_fast_info: IntrinsicValRef + + member unbox_fast_vref: FSharp.Compiler.TypedTree.ValRef + + member unbox_info: IntrinsicValRef + + member unbox_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_addition_info: IntrinsicValRef + + member unchecked_addition_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_defaultof_info: IntrinsicValRef + + member unchecked_defaultof_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_division_info: IntrinsicValRef + + member unchecked_division_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_modulus_info: IntrinsicValRef + + member unchecked_modulus_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_multiply_info: IntrinsicValRef + + member unchecked_multiply_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_subtraction_info: IntrinsicValRef + + member unchecked_subtraction_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_unary_minus_info: IntrinsicValRef + + member unchecked_unary_minus_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_unary_not_vref: FSharp.Compiler.TypedTree.ValRef + + member unchecked_unary_plus_vref: FSharp.Compiler.TypedTree.ValRef + + member unit_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member unit_ty: FSharp.Compiler.TypedTree.TType + + member useReflectionFreeCodeGen: bool + + member valueoption_tcr_canon: FSharp.Compiler.TypedTree.EntityRef + + member valueoption_tcr_nice: FSharp.Compiler.TypedTree.EntityRef + + member voidptr_tcr: FSharp.Compiler.TypedTree.EntityRef + +#if DEBUG +// This global is only used during debug output +val mutable internal global_g: TcGlobals option +#endif From 0e5b954bed75c374f6c8006a2badc33094a9396c Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 1 Aug 2024 12:32:55 +0200 Subject: [PATCH 3/7] Sink: report function domain type (#17470) * Sink: report function domain type * Release notes --- .../release-notes/.FSharp.Compiler.Service/9.0.100.md | 1 + src/Compiler/Checking/Expressions/CheckExpressions.fs | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md index c1ba8b4a6fc..172d864ed76 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md @@ -9,6 +9,7 @@ ### Added * Support for nullable reference types ([PR #15181](https://github.com/dotnet/fsharp/pull/15181)) +* Sink: report function domain type ([PR #17470](https://github.com/dotnet/fsharp/pull/17470)) ### Changed diff --git a/src/Compiler/Checking/Expressions/CheckExpressions.fs b/src/Compiler/Checking/Expressions/CheckExpressions.fs index 2b3d9e7f6c6..be64b075e2c 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckExpressions.fs @@ -5755,8 +5755,8 @@ and TcExprUndelayed (cenv: cenv) (overallTy: OverallTy) env tpenv (synExpr: SynE | SynExpr.Match (spMatch, synInputExpr, synClauses, _m, _trivia) -> TcExprMatch cenv overallTy env tpenv synInputExpr spMatch synClauses - | SynExpr.MatchLambda (isExnMatch, mArg, clauses, spMatch, m) -> - TcExprMatchLambda cenv overallTy env tpenv (isExnMatch, mArg, clauses, spMatch, m) + | SynExpr.MatchLambda (isExnMatch, mFunction, clauses, spMatch, m) -> + TcExprMatchLambda cenv overallTy env tpenv (isExnMatch, mFunction, clauses, spMatch, m) | SynExpr.Assert (x, m) -> TcNonControlFlowExpr env <| fun env -> @@ -6009,12 +6009,13 @@ and TcExprMatch (cenv: cenv) overallTy env tpenv synInputExpr spMatch synClauses // <@ function x -> (x: int) @> // is // Lambda (_arg2, Let (x, _arg2, x)) -and TcExprMatchLambda (cenv: cenv) overallTy env tpenv (isExnMatch, mArg, clauses, spMatch, m) = +and TcExprMatchLambda (cenv: cenv) overallTy env tpenv (isExnMatch, mFunction, clauses, spMatch, m) = let domainTy, resultTy = UnifyFunctionType None cenv env.DisplayEnv m overallTy.Commit - let idv1, idve1 = mkCompGenLocal mArg (cenv.synArgNameGenerator.New()) domainTy + let idv1, idve1 = mkCompGenLocal mFunction (cenv.synArgNameGenerator.New()) domainTy + CallExprHasTypeSink cenv.tcSink (mFunction.StartRange, env.NameEnv, domainTy, env.AccessRights) let envinner = ExitFamilyRegion env let envinner = { envinner with eIsControlFlow = true } - let idv2, matchExpr, tpenv = TcAndPatternCompileMatchClauses m mArg (if isExnMatch then Throw else ThrowIncompleteMatchException) cenv None domainTy (MustConvertTo (false, resultTy)) envinner tpenv clauses + let idv2, matchExpr, tpenv = TcAndPatternCompileMatchClauses m mFunction (if isExnMatch then Throw else ThrowIncompleteMatchException) cenv None domainTy (MustConvertTo (false, resultTy)) envinner tpenv clauses let overallExpr = mkMultiLambda m [idv1] ((mkLet spMatch m idv2 idve1 matchExpr), resultTy) overallExpr, tpenv From 3e2db287ed3311d3a9e4614de3cca7ec543b4aca Mon Sep 17 00:00:00 2001 From: Vlad Zarytovskii Date: Thu, 1 Aug 2024 14:23:50 +0200 Subject: [PATCH 4/7] Update azure-pipelines-PR.yml --- azure-pipelines-PR.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/azure-pipelines-PR.yml b/azure-pipelines-PR.yml index 89e50496e2f..f182f8b9e10 100644 --- a/azure-pipelines-PR.yml +++ b/azure-pipelines-PR.yml @@ -230,7 +230,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -248,7 +248,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true @@ -270,7 +270,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -288,7 +288,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true @@ -310,7 +310,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -328,7 +328,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true @@ -350,7 +350,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -368,7 +368,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true @@ -386,7 +386,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build @@ -404,7 +404,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true @@ -460,7 +460,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build / Test condition: and( ne(variables['_testKind'], 'testIntegration'), ne(variables['System.JobName'], 'transparent_compiler_release') ) @@ -469,7 +469,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp TEST_TRANSPARENT_COMPILER: 1 NativeToolsOnMachine: true displayName: Build / Test Transparent Compiler @@ -479,7 +479,7 @@ stages: env: DOTNET_DbgEnableMiniDump: 1 DOTNET_DbgMiniDumpType: 3 # Triage dump, 1 for mini, 2 for Heap, 3 for triage, 4 for full. Don't use 4 unless you know what you're doing. - DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp + DOTNET_DbgMiniDumpName: $(Build.SourcesDirectory)\artifacts\log\$(_configuration)\$(Build.BuildId)-%e-%p-%t.dmp NativeToolsOnMachine: true displayName: Build / Integration Test continueOnError: true @@ -507,7 +507,7 @@ stages: condition: failed() continueOnError: true inputs: - PathToPublish: '$(Build.SourcesDirectory)\artifacts\dumps\$(_configuration)' + PathToPublish: '$(Build.SourcesDirectory)\artifacts\log\$(_configuration)' ArtifactName: 'Windows $(_configuration) $(_testKind) process dumps' ArtifactType: Container parallel: true From d2d38e3a2a438012cf9023a27c350d4717c13c03 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 1 Aug 2024 15:12:29 +0200 Subject: [PATCH 5/7] Parser: recover on missing union case fields (#17452) * Parser: recover on missing union case fields * Add missing error * Add another test * Release notes * Update xlf --- .../.FSharp.Compiler.Service/9.0.100.md | 1 + src/Compiler/FSComp.txt | 3 +- src/Compiler/pars.fsy | 80 ++++++++++++++----- src/Compiler/xlf/FSComp.txt.cs.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.de.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.es.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.fr.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.it.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.ja.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.ko.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.pl.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.ru.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.tr.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 15 ++-- src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 15 ++-- .../service/data/SyntaxTree/Type/Union 01.fs | 4 + .../data/SyntaxTree/Type/Union 01.fs.bsl | 26 ++++++ .../service/data/SyntaxTree/Type/Union 02.fs | 4 + .../data/SyntaxTree/Type/Union 02.fs.bsl | 41 ++++++++++ .../service/data/SyntaxTree/Type/Union 03.fs | 4 + .../data/SyntaxTree/Type/Union 03.fs.bsl | 43 ++++++++++ .../service/data/SyntaxTree/Type/Union 04.fs | 4 + .../data/SyntaxTree/Type/Union 04.fs.bsl | 50 ++++++++++++ .../service/data/SyntaxTree/Type/Union 05.fs | 4 + .../data/SyntaxTree/Type/Union 05.fs.bsl | 48 +++++++++++ .../service/data/SyntaxTree/Type/Union 06.fs | 4 + .../data/SyntaxTree/Type/Union 06.fs.bsl | 48 +++++++++++ .../service/data/SyntaxTree/Type/Union 07.fs | 5 ++ .../data/SyntaxTree/Type/Union 07.fs.bsl | 45 +++++++++++ 30 files changed, 522 insertions(+), 87 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Type/Union 01.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 02.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 03.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 03.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 04.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 04.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 05.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 05.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 06.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 06.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union 07.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union 07.fs.bsl diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md index 172d864ed76..c4496adae3c 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md @@ -9,6 +9,7 @@ ### Added * Support for nullable reference types ([PR #15181](https://github.com/dotnet/fsharp/pull/15181)) +* Parser: recover on missing union case fields ([#17452](https://github.com/dotnet/fsharp/pull/17452)) * Sink: report function domain type ([PR #17470](https://github.com/dotnet/fsharp/pull/17470)) ### Changed diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index d98cfb61b97..62412a7698a 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1762,7 +1762,7 @@ featureReuseSameFieldsInStructUnions,"Share underlying fields in a [] di 3860,chkStaticMembersOnObjectExpressions,"Object expressions cannot implement interfaces with static abstract members or declare static members." 3861,chkTailCallAttrOnNonRec,"The TailCall attribute should only be applied to recursive functions." 3862,parsStaticMemberImcompleteSyntax,"Incomplete declaration of a static construct. Use 'static let','static do','static member' or 'static val' for declaration." -3863,parsExpectingField,"Expecting record field" +3863,parsExpectingRecordField,"Expecting record field" 3864,tooManyMethodsInDotNetTypeWritingAssembly,"The type '%s' has too many methods. Found: '%d', maximum: '%d'" 3865,parsOnlySimplePatternsAreAllowedInConstructors,"Only simple patterns are allowed in primary constructors" 3866,chkStaticAbstractInterfaceMembers,"A static abstract non-virtual interface member should only be called via type parameter (for example: 'T.%s)." @@ -1775,3 +1775,4 @@ featureParsedHashDirectiveArgumentNonString,"# directives with non-quoted string 3869,featureParsedHashDirectiveUnexpectedInteger,"Unexpected integer literal '%d'." 3869,featureParsedHashDirectiveUnexpectedIdentifier,"Unexpected identifier '%s'." featureEmptyBodiedComputationExpressions,"Support for computation expressions with empty bodies: builder {{ }}" +3870,parsExpectingUnionCaseField,"Expecting union case field" diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 9e19fec1c20..24e876bd6a2 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -2471,7 +2471,7 @@ braceFieldDeclList: { [] } | LBRACE rbrace - { errorR (Error(FSComp.SR.parsExpectingField(), rhs parseState 2)) + { errorR (Error(FSComp.SR.parsExpectingRecordField (), rhs parseState 2)) [] } anonRecdType: @@ -2711,17 +2711,26 @@ attrUnionCaseDecl: { fun (xmlDoc, mBar) -> mkSynUnionCase $1 $2 (SynIdent(mkSynId mBar.EndRange "", None)) (SynUnionCaseKind.Fields []) mBar (xmlDoc, mBar) |> Choice2Of2 } | opt_attributes opt_access unionCaseName OF unionCaseRepr - { mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.Fields $5) (rhs2 parseState 1 5) >> Choice2Of2 } + { let mId = rhs parseState 3 + let fields, mFields = $5 + let mWhole = unionRanges mId mFields + mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.Fields fields) mWhole >> Choice2Of2 } | opt_attributes opt_access unionCaseName unionCaseRepr { errorR (Error(FSComp.SR.parsMissingKeyword("of"), rhs2 parseState 3 4)) - mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.Fields $4) (rhs2 parseState 1 4) >> Choice2Of2 } + let mAttributes = rhs parseState 1 + let fields, mFields = $4 + let mWhole = unionRanges mAttributes mFields + mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.Fields fields) mWhole >> Choice2Of2 } | opt_attributes opt_access OF unionCaseRepr - { let mOf = rhs parseState 3 + { let mAttributes = rhs parseState 1 + let mOf = rhs parseState 3 let mId = mOf.StartRange + let fields, mFields = $4 + let mWhole = unionRanges mAttributes mFields errorR (Error(FSComp.SR.parsMissingUnionCaseName(), mOf)) - mkSynUnionCase $1 $2 (SynIdent(mkSynId mId "", None)) (SynUnionCaseKind.Fields $4) (rhs2 parseState 1 4) >> Choice2Of2 } + mkSynUnionCase $1 $2 (SynIdent(mkSynId mId "", None)) (SynUnionCaseKind.Fields fields) mWhole >> Choice2Of2 } | opt_attributes opt_access OF recover { let mOf = rhs parseState 3 @@ -2733,13 +2742,18 @@ attrUnionCaseDecl: { mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.Fields []) (rhs2 parseState 1 4) >> Choice2Of2 } | opt_attributes opt_access unionCaseName COLON topType - { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning(lhs parseState) - mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.FullType $5) (rhs2 parseState 1 5) >> Choice2Of2 } + { let mAttributes = rhs parseState 1 + let fullType, _ = $5 + let mWhole = unionRanges mAttributes fullType.Range + if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning(lhs parseState) + mkSynUnionCase $1 $2 $3 (SynUnionCaseKind.FullType $5) mWhole >> Choice2Of2 } | opt_attributes opt_access unionCaseName EQUALS atomicExpr { if Option.isSome $2 then errorR(Error(FSComp.SR.parsEnumFieldsCannotHaveVisibilityDeclarations(), rhs parseState 2)) let mEquals = rhs parseState 4 - let mDecl = rhs2 parseState 1 5 + let mAttributes = rhs parseState 1 + let expr, _ = $5 + let mDecl = unionRanges mAttributes expr.Range (fun (xmlDoc, mBar) -> let trivia: SynEnumCaseTrivia = { BarRange = Some mBar; EqualsRange = mEquals } let mDecl = unionRangeWithXmlDoc xmlDoc mDecl @@ -2797,16 +2811,20 @@ firstUnionCaseDeclOfMany: firstUnionCaseDecl: | ident OF unionCaseRepr - { let trivia: SynUnionCaseTrivia = { BarRange = None } + { let fields, mFields = $3 + let trivia: SynUnionCaseTrivia = { BarRange = None } let xmlDoc = grabXmlDoc (parseState, [], 1) - let mDecl = rhs2 parseState 1 3 |> unionRangeWithXmlDoc xmlDoc - Choice2Of2(SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields $3, xmlDoc, None, mDecl, trivia)) } + let mId = rhs parseState 1 + let mDecl = unionRanges mId mFields |> unionRangeWithXmlDoc xmlDoc + Choice2Of2(SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields fields, xmlDoc, None, mDecl, trivia)) } - | unionCaseName COLON topType + | unionCaseName COLON topType { if parseState.LexBuffer.ReportLibraryOnlyFeatures then libraryOnlyWarning(lhs parseState) let trivia: SynUnionCaseTrivia = { BarRange = None } let xmlDoc = grabXmlDoc (parseState, [], 1) - let mDecl = rhs2 parseState 1 3 |> unionRangeWithXmlDoc xmlDoc + let mId = rhs parseState 1 + let fullType, _ = $3 + let mDecl = unionRanges mId fullType.Range |> unionRangeWithXmlDoc xmlDoc Choice2Of2(SynUnionCase([], $1, SynUnionCaseKind.FullType $3, xmlDoc, None, mDecl, trivia)) } | ident OF recover @@ -2818,18 +2836,21 @@ firstUnionCaseDecl: | OF unionCaseRepr { let mOf = rhs parseState 1 let mId = mOf.StartRange + let fields, mFields = $2 errorR (Error(FSComp.SR.parsMissingUnionCaseName(), mOf)) let id = SynIdent(mkSynId mId "", None) let trivia: SynUnionCaseTrivia = { BarRange = None } let xmlDoc = grabXmlDoc (parseState, [], 1) - let mDecl = rhs2 parseState 1 2 |> unionRangeWithXmlDoc xmlDoc - Choice2Of2(SynUnionCase([], id, SynUnionCaseKind.Fields $2, xmlDoc, None, mDecl, trivia)) } + let mDecl = unionRanges mOf mFields |> unionRangeWithXmlDoc xmlDoc + Choice2Of2(SynUnionCase([], id, SynUnionCaseKind.Fields fields, xmlDoc, None, mDecl, trivia)) } | ident EQUALS atomicExpr opt_OBLOCKSEP - { let mEquals = rhs parseState 2 + { let mId = rhs parseState 1 + let mEquals = rhs parseState 2 let trivia: SynEnumCaseTrivia = { BarRange = None; EqualsRange = mEquals } let xmlDoc = grabXmlDoc (parseState, [], 1) - let mDecl = rhs2 parseState 1 3 |> unionRangeWithXmlDoc xmlDoc + let expr, _ = $3 + let mDecl = unionRanges mId expr.Range |> unionRangeWithXmlDoc xmlDoc Choice1Of2(SynEnumCase([], SynIdent($1, None), fst $3, xmlDoc, mDecl, trivia)) } | ident EQUALS recover opt_OBLOCKSEP @@ -2843,10 +2864,26 @@ firstUnionCaseDecl: unionCaseReprElements: | unionCaseReprElement STAR unionCaseReprElements - { $1 :: $3 } + { let mField = rhs parseState 1 + let fields, mFields = $3 + $1 :: fields, unionRanges mField mFields } + + | unionCaseReprElement STAR recover + { let mStar = rhs parseState 2 + let ty = SynType.FromParseError mStar.EndRange + let field = mkSynAnonField (ty, PreXmlDoc.Empty) + [$1; field], rhs2 parseState 1 2 } + + | STAR unionCaseReprElements + { let mStar = rhs parseState 1 + errorR (Error(FSComp.SR.parsExpectingUnionCaseField (), rhs parseState 1)) + let fields, mFields = $2 + let ty = SynType.FromParseError mStar.StartRange + let field = mkSynAnonField (ty, PreXmlDoc.Empty) + field :: fields, unionRanges mStar mFields } | unionCaseReprElement %prec prec_toptuptyptail_prefix - { [$1] } + { [$1], rhs parseState 1 } unionCaseReprElement: | ident COLON appTypeNullableInParens @@ -2872,7 +2909,7 @@ unionCaseReprElement: unionCaseRepr: | braceFieldDeclList { errorR(Deprecated(FSComp.SR.parsConsiderUsingSeparateRecordType(), lhs parseState)) - $1 } + $1, rhs parseState 1 } | unionCaseReprElements { $1 } @@ -2948,7 +2985,8 @@ exconIntro: { SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState, { BarRange = None }) } | ident OF unionCaseRepr - { SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields $3, PreXmlDoc.Empty, None, lhs parseState, { BarRange = None }) } + { let fields, _ = $3 + SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields fields, PreXmlDoc.Empty, None, lhs parseState, { BarRange = None }) } | ident OF recover { SynUnionCase([], SynIdent($1, None), SynUnionCaseKind.Fields [], PreXmlDoc.Empty, None, lhs parseState, { BarRange = None }) } diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 2d6569495fb..dc578af9a99 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -1007,21 +1007,26 @@ Byl očekáván výraz. - - Expecting record field - Očekává se pole záznamu. - - Expecting pattern Očekává se vzorek. + + Expecting record field + Expecting record field + + Expecting type Očekává se typ + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Neúplný znakový literál (příklad: Q) nebo volání kvalifikovaného typu (příklad: T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 05412ee34ff..0d5007fed66 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -1007,21 +1007,26 @@ Ausdruck wird erwartet - - Expecting record field - Datensatzfeld wird erwartet - - Expecting pattern Muster wird erwartet + + Expecting record field + Expecting record field + + Expecting type Typ wird erwartet + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Unvollständiges Zeichenliteral (Beispiel: „Q“) oder qualifizierter Typaufruf (Beispiel: „T.Name“) diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index fc01995a3e7..eee3b33c5c9 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -1007,21 +1007,26 @@ Se espera una expresión - - Expecting record field - Se espera un campo de registro - - Expecting pattern Se espera un patrón + + Expecting record field + Expecting record field + + Expecting type Tipo esperado + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Literal de carácter incompleto (ejemplo: 'Q') o invocación de tipo completo (ejemplo: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index 0210d676034..37b8637fac1 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -1007,21 +1007,26 @@ Expression attendue - - Expecting record field - Champ d’enregistrement attendu - - Expecting pattern Modèle attendu + + Expecting record field + Expecting record field + + Expecting type Type attendu + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Littéral de caractère incomplet (exemple : 'Q') ou appel de type qualifié (exemple : 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index 09fc8de5a9a..45f773a03e8 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -1007,21 +1007,26 @@ Prevista espressione. - - Expecting record field - Previsto campo record - - Expecting pattern Criterio previsto + + Expecting record field + Expecting record field + + Expecting type Previsto tipo + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Valore letterale carattere incompleto (ad esempio: 'Q') o chiamata di tipo qualificato (ad esempio: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index e9a86b84566..c4b21520176 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -1007,21 +1007,26 @@ 式を指定してください - - Expecting record field - レコード フィールドが必要です - - Expecting pattern 必要なパターン + + Expecting record field + Expecting record field + + Expecting type 型が必要です + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) 不完全な文字リテラル (例: 'Q') または修飾型の呼び出し (例: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index 8133d0bd01e..00d19be0919 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -1007,21 +1007,26 @@ 식이 필요함 - - Expecting record field - 레코드 필드 필요 - - Expecting pattern 예상되는 패턴 + + Expecting record field + Expecting record field + + Expecting type 예상 형식 + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) 불완전한 문자 리터럴(예: 'Q') 또는 정규화된 형식 호출(예: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index 626ead02352..f9f8d75e2c0 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -1007,21 +1007,26 @@ Oczekiwanie na wyrażenie - - Expecting record field - Oczekiwanie pola rekordu - - Expecting pattern Oczekiwano wzorca + + Expecting record field + Expecting record field + + Expecting type Oczekiwano typu + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Niekompletny literał znaku (przykład: „Q”) lub wywołanie typu kwalifikowanego (przykład: „T.Name”) diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 06620eb856c..b6ecb582a3d 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -1007,21 +1007,26 @@ Esperando uma expressão - - Expecting record field - Esperando campo de registro - - Expecting pattern Padrão esperado + + Expecting record field + Expecting record field + + Expecting type Esperando tipo + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Literal de caractere incompleto (exemplo: 'Q') ou invocação de tipo qualificado (exemplo: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 722b02ce15f..a55d1afade8 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -1007,21 +1007,26 @@ Ожидается выражение - - Expecting record field - Ожидается поле записи - - Expecting pattern Ожидается шаблон + + Expecting record field + Expecting record field + + Expecting type Требуется тип + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Неполный символьный литерал (например: "Q") или вызов квалифицированного типа (например: "T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 12f8cfeeb77..da224bfc0ee 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -1007,21 +1007,26 @@ İfade bekleniyor - - Expecting record field - Kayıt alanı bekleniyor - - Expecting pattern Desen bekleniyor + + Expecting record field + Expecting record field + + Expecting type Tür bekleniyor + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) Eksik karakter değişmez değeri (örnek: 'Q') veya tam tür çağrısı (örnek: 'T.Name) diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index caca4c82014..26b945a8541 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -1007,21 +1007,26 @@ 应为表达式 - - Expecting record field - 应为记录字段 - - Expecting pattern 预期模式 + + Expecting record field + Expecting record field + + Expecting type 预期类型 + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) 字符文本不完整(示例: "Q")或限定类型调用(示例: "T.Name") diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index fe208053fc5..16d8255e6aa 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -1007,21 +1007,26 @@ 必須是運算式 - - Expecting record field - 必須是記錄欄位 - - Expecting pattern 必須是模式 + + Expecting record field + Expecting record field + + Expecting type 必須是類型 + + Expecting union case field + Expecting union case field + + Incomplete character literal (example: 'Q') or qualified type invocation (example: 'T.Name) 不完整的字元文字 (範例: 'Q') 或限定類型調用 (範例: 'T.Name) diff --git a/tests/service/data/SyntaxTree/Type/Union 01.fs b/tests/service/data/SyntaxTree/Type/Union 01.fs new file mode 100644 index 00000000000..ded50da8c59 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 01.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A diff --git a/tests/service/data/SyntaxTree/Type/Union 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 01.fs.bsl new file mode 100644 index 00000000000..d652bfba1e6 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 01.fs.bsl @@ -0,0 +1,26 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 01.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), Fields [], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,7), { BarRange = Some (4,4--4,5) })], + (4,4--4,7)), (4,4--4,7)), [], None, (3,5--4,7), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,7))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/Union 02.fs b/tests/service/data/SyntaxTree/Type/Union 02.fs new file mode 100644 index 00000000000..2642c3aa9f7 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 02.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of int * int diff --git a/tests/service/data/SyntaxTree/Type/Union 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 02.fs.bsl new file mode 100644 index 00000000000..55d2c0c07e6 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 02.fs.bsl @@ -0,0 +1,41 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 02.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,14), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,17), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,17--4,20), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,20), { BarRange = Some (4,4--4,5) })], + (4,4--4,20)), (4,4--4,20)), [], None, (3,5--4,20), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,20))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,20), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/Union 03.fs b/tests/service/data/SyntaxTree/Type/Union 03.fs new file mode 100644 index 00000000000..65f7681501c --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 03.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of int * diff --git a/tests/service/data/SyntaxTree/Type/Union 03.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 03.fs.bsl new file mode 100644 index 00000000000..2906039ff99 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 03.fs.bsl @@ -0,0 +1,43 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 03.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,14), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, FromParseError (4,16--4,16), + false, PreXmlDocEmpty, None, (4,16--4,16), + { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,16), { BarRange = Some (4,4--4,5) })], + (4,4--4,16)), (4,4--4,16)), [], None, (3,5--4,16), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,16))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,16), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,0)-(5,0) parse error Unexpected syntax or possible incorrect indentation: this token is offside of context started at position (4:5). Try indenting this further. +To continue using non-conforming indentation, pass the '--strict-indentation-' flag to the compiler, or set the language version to F# 7. +(5,0)-(5,0) parse error Incomplete structured construct at or before this point in union case diff --git a/tests/service/data/SyntaxTree/Type/Union 04.fs b/tests/service/data/SyntaxTree/Type/Union 04.fs new file mode 100644 index 00000000000..84494f97bef --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 04.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of int * int * diff --git a/tests/service/data/SyntaxTree/Type/Union 04.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 04.fs.bsl new file mode 100644 index 00000000000..65be844f376 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 04.fs.bsl @@ -0,0 +1,50 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 04.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,14), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,17), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,17--4,20), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, FromParseError (4,22--4,22), + false, PreXmlDocEmpty, None, (4,22--4,22), + { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,22), { BarRange = Some (4,4--4,5) })], + (4,4--4,22)), (4,4--4,22)), [], None, (3,5--4,22), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,22))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,22), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,0)-(5,0) parse error Unexpected syntax or possible incorrect indentation: this token is offside of context started at position (4:5). Try indenting this further. +To continue using non-conforming indentation, pass the '--strict-indentation-' flag to the compiler, or set the language version to F# 7. +(5,0)-(5,0) parse error Incomplete structured construct at or before this point in union case diff --git a/tests/service/data/SyntaxTree/Type/Union 05.fs b/tests/service/data/SyntaxTree/Type/Union 05.fs new file mode 100644 index 00000000000..4cdd073d671 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 05.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of int * * int diff --git a/tests/service/data/SyntaxTree/Type/Union 05.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 05.fs.bsl new file mode 100644 index 00000000000..36eb5dae412 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 05.fs.bsl @@ -0,0 +1,48 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 05.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,14), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, FromParseError (4,17--4,17), + false, PreXmlDocEmpty, None, (4,17--4,17), + { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,19), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,19--4,22), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,22), { BarRange = Some (4,4--4,5) })], + (4,4--4,22)), (4,4--4,22)), [], None, (3,5--4,22), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,22))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,22), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,17)-(4,18) parse error Expecting union case field diff --git a/tests/service/data/SyntaxTree/Type/Union 06.fs b/tests/service/data/SyntaxTree/Type/Union 06.fs new file mode 100644 index 00000000000..66bba9135ab --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 06.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of * int * int diff --git a/tests/service/data/SyntaxTree/Type/Union 06.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 06.fs.bsl new file mode 100644 index 00000000000..90b09522783 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 06.fs.bsl @@ -0,0 +1,48 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 06.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, FromParseError (4,11--4,11), + false, PreXmlDocEmpty, None, (4,11--4,11), + { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,13), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,13--4,16), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,19), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,19--4,22), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,22), { BarRange = Some (4,4--4,5) })], + (4,4--4,22)), (4,4--4,22)), [], None, (3,5--4,22), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,22))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,22), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,11)-(4,12) parse error Expecting union case field diff --git a/tests/service/data/SyntaxTree/Type/Union 07.fs b/tests/service/data/SyntaxTree/Type/Union 07.fs new file mode 100644 index 00000000000..096dc43834c --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 07.fs @@ -0,0 +1,5 @@ +module Module + +type U = + | A of int * + | B diff --git a/tests/service/data/SyntaxTree/Type/Union 07.fs.bsl b/tests/service/data/SyntaxTree/Type/Union 07.fs.bsl new file mode 100644 index 00000000000..2f0f76e6131 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union 07.fs.bsl @@ -0,0 +1,45 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union 07.fs", false, QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,14), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, FromParseError (4,16--4,16), + false, PreXmlDocEmpty, None, (4,16--4,16), + { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,16), { BarRange = Some (4,4--4,5) }); + SynUnionCase + ([], SynIdent (B, None), Fields [], + PreXmlDoc ((5,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (5,6--5,7), { BarRange = Some (5,4--5,5) })], + (4,4--5,7)), (4,4--5,7)), [], None, (3,5--5,7), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--5,7))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--5,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,4)-(5,5) parse error Unexpected symbol '|' in union case From d8e2f21729d4bced94265c9a5e52e2bdba40117a Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 2 Aug 2024 15:30:19 +0200 Subject: [PATCH 6/7] Parser: recover on missing union case field types (#17455) * Parser: recover on missing union case field types * Release notes --- .../.FSharp.Compiler.Service/9.0.100.md | 3 +- src/Compiler/pars.fsy | 28 ++++++++---- .../data/SyntaxTree/Type/Union - Field 01.fs | 4 ++ .../SyntaxTree/Type/Union - Field 01.fs.bsl | 35 +++++++++++++++ .../data/SyntaxTree/Type/Union - Field 02.fs | 4 ++ .../SyntaxTree/Type/Union - Field 02.fs.bsl | 36 ++++++++++++++++ .../data/SyntaxTree/Type/Union - Field 03.fs | 4 ++ .../SyntaxTree/Type/Union - Field 03.fs.bsl | 43 +++++++++++++++++++ 8 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 01.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 01.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 02.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 02.fs.bsl create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 03.fs create mode 100644 tests/service/data/SyntaxTree/Type/Union - Field 03.fs.bsl diff --git a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md index c4496adae3c..99c251d76c2 100644 --- a/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md +++ b/docs/release-notes/.FSharp.Compiler.Service/9.0.100.md @@ -9,7 +9,8 @@ ### Added * Support for nullable reference types ([PR #15181](https://github.com/dotnet/fsharp/pull/15181)) -* Parser: recover on missing union case fields ([#17452](https://github.com/dotnet/fsharp/pull/17452)) +* Parser: recover on missing union case fields (PR [#17452](https://github.com/dotnet/fsharp/pull/17452)) +* Parser: recover on missing union case field types (PR [#17455](https://github.com/dotnet/fsharp/pull/17455)) * Sink: report function domain type ([PR #17470](https://github.com/dotnet/fsharp/pull/17470)) ### Changed diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 24e876bd6a2..0088142917f 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -168,6 +168,7 @@ let parse_error_rich = Some(fun (ctxt: ParseErrorContext<_>) -> %type argExpr %type declExprBlock %type headBindingPattern +%type appTypeNullableInParens %type atomTypeNonAtomicDeprecated %type atomicExprAfterType %type typedSequentialExprBlock @@ -2883,27 +2884,35 @@ unionCaseReprElements: field :: fields, unionRanges mStar mFields } | unionCaseReprElement %prec prec_toptuptyptail_prefix - { [$1], rhs parseState 1 } + { [$1], $1.Range } unionCaseReprElement: | ident COLON appTypeNullableInParens - { let xmlDoc = grabXmlDoc(parseState, [], 1) - let mWhole = rhs2 parseState 1 3 |> unionRangeWithXmlDoc xmlDoc + { let xmlDoc = grabXmlDoc (parseState, [], 1) + let mId = rhs parseState 1 + let mWhole = unionRanges mId $3.Range |> unionRangeWithXmlDoc xmlDoc mkSynNamedField ($1, $3, xmlDoc, mWhole) } + | ident COLON recover + { let xmlDoc = grabXmlDoc (parseState, [], 1) + let mColon = rhs parseState 2 + let ty = SynType.FromParseError mColon.EndRange + let mWhole = rhs2 parseState 1 2 |> unionRangeWithXmlDoc xmlDoc + mkSynNamedField ($1, ty, xmlDoc, mWhole) } + | appTypeNullableInParens - { let xmlDoc = grabXmlDoc(parseState, [], 1) + { let xmlDoc = grabXmlDoc (parseState, [], 1) mkSynAnonField ($1, xmlDoc) } | ident COLON invalidUseOfAppTypeFunction - { let xmlDoc = grabXmlDoc(parseState, [], 1) + { let xmlDoc = grabXmlDoc (parseState, [], 1) let mWhole = rhs2 parseState 1 3 |> unionRangeWithXmlDoc xmlDoc - reportParseErrorAt ($3 : SynType).Range (FSComp.SR.tcUnexpectedFunTypeInUnionCaseField()) + reportParseErrorAt ($3: SynType).Range (FSComp.SR.tcUnexpectedFunTypeInUnionCaseField ()) mkSynNamedField ($1, $3, xmlDoc, mWhole) } | invalidUseOfAppTypeFunction - { let xmlDoc = grabXmlDoc(parseState, [], 1) - reportParseErrorAt ($1 : SynType).Range (FSComp.SR.tcUnexpectedFunTypeInUnionCaseField()) + { let xmlDoc = grabXmlDoc (parseState, [], 1) + reportParseErrorAt ($1: SynType).Range (FSComp.SR.tcUnexpectedFunTypeInUnionCaseField ()) mkSynAnonField ($1, xmlDoc) } unionCaseRepr: @@ -5981,11 +5990,13 @@ invalidUseOfAppTypeFunction: { let mArrow = rhs parseState 2 let m = unionRanges (rhs2 parseState 1 2) $3.Range SynType.Fun($1, $3, m, { ArrowRange = mArrow }) } + | appTypeWithoutNull RARROW recover { let mArrow = rhs parseState 2 let ty = SynType.FromParseError(mArrow.EndRange) let m = rhs2 parseState 1 2 SynType.Fun($1, ty, m, { ArrowRange = mArrow }) } + | appTypeWithoutNull RARROW RARROW invalidUseOfAppTypeFunction { let mArrow1 = rhs parseState 2 let mArrow2 = rhs parseState 3 @@ -5994,6 +6005,7 @@ invalidUseOfAppTypeFunction: let m1 = unionRanges $1.Range $4.Range let m2 = unionRanges mArrow2 $4.Range SynType.Fun($1, SynType.Fun(ty, $4, m2, { ArrowRange = mArrow2 }), m1, { ArrowRange = mArrow1 }) } + | appTypeWithoutNull RARROW appTypeWithoutNull { let mArrow = rhs parseState 2 let m = rhs2 parseState 1 3 diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 01.fs b/tests/service/data/SyntaxTree/Type/Union - Field 01.fs new file mode 100644 index 00000000000..2f91c36c262 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 01.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of i: int diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 01.fs.bsl b/tests/service/data/SyntaxTree/Type/Union - Field 01.fs.bsl new file mode 100644 index 00000000000..bb78f6b332f --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 01.fs.bsl @@ -0,0 +1,35 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union - Field 01.fs", false, QualifiedNameOfFile Module, [], + [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, Some i, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,17), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,17), { BarRange = Some (4,4--4,5) })], + (4,4--4,17)), (4,4--4,17)), [], None, (3,5--4,17), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,17))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,17), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 02.fs b/tests/service/data/SyntaxTree/Type/Union - Field 02.fs new file mode 100644 index 00000000000..2539d6ed648 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 02.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of i: diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 02.fs.bsl b/tests/service/data/SyntaxTree/Type/Union - Field 02.fs.bsl new file mode 100644 index 00000000000..4d3b58b4440 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 02.fs.bsl @@ -0,0 +1,36 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union - Field 02.fs", false, QualifiedNameOfFile Module, [], + [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, Some i, FromParseError (4,13--4,13), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,13), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,13), { BarRange = Some (4,4--4,5) })], + (4,4--4,13)), (4,4--4,13)), [], None, (3,5--4,13), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,13))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(5,0)-(5,0) parse error Incomplete structured construct at or before this point in union case diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 03.fs b/tests/service/data/SyntaxTree/Type/Union - Field 03.fs new file mode 100644 index 00000000000..7c8092dcf64 --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 03.fs @@ -0,0 +1,4 @@ +module Module + +type U = + | A of i: * int diff --git a/tests/service/data/SyntaxTree/Type/Union - Field 03.fs.bsl b/tests/service/data/SyntaxTree/Type/Union - Field 03.fs.bsl new file mode 100644 index 00000000000..378ecc0220d --- /dev/null +++ b/tests/service/data/SyntaxTree/Type/Union - Field 03.fs.bsl @@ -0,0 +1,43 @@ +ImplFile + (ParsedImplFileInput + ("/root/Type/Union - Field 03.fs", false, QualifiedNameOfFile Module, [], + [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Types + ([SynTypeDefn + (SynComponentInfo + ([], None, [], [U], + PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector), + false, None, (3,5--3,6)), + Simple + (Union + (None, + [SynUnionCase + ([], SynIdent (A, None), + Fields + [SynField + ([], false, Some i, FromParseError (4,13--4,13), + false, + PreXmlDoc ((4,11), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,11--4,13), { LeadingKeyword = None + MutableKeyword = None }); + SynField + ([], false, None, + LongIdent (SynLongIdent ([int], [], [None])), + false, + PreXmlDoc ((4,16), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,16--4,19), { LeadingKeyword = None + MutableKeyword = None })], + PreXmlDoc ((4,4), FSharp.Compiler.Xml.XmlDocCollector), + None, (4,6--4,19), { BarRange = Some (4,4--4,5) })], + (4,4--4,19)), (4,4--4,19)), [], None, (3,5--4,19), + { LeadingKeyword = Type (3,0--3,4) + EqualsRange = Some (3,7--3,8) + WithKeyword = None })], (3,0--4,19))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,19), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,14)-(4,15) parse error Unexpected symbol '*' in union case From 4a7a0f9c463fbab47ce718c8a7cb5f01e4445182 Mon Sep 17 00:00:00 2001 From: Hampus Linderstam <70235638+hampussle@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:12:39 +0200 Subject: [PATCH 7/7] Fix incorrect example result in list module documentation for 'fold2'. (#17475) Co-authored-by: Petr --- src/FSharp.Core/list.fsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/FSharp.Core/list.fsi b/src/FSharp.Core/list.fsi index 5393fd14439..e14fe7eb447 100644 --- a/src/FSharp.Core/list.fsi +++ b/src/FSharp.Core/list.fsi @@ -821,7 +821,7 @@ module List = /// | Tails, Tails -> acc + 1 /// | _ -> acc) /// - /// Evaluates to 1. Note acc is a commonly used abbreviation for "accumulator". + /// Evaluates to 2. Note acc is a commonly used abbreviation for "accumulator". /// [] val fold2<'T1,'T2,'State> : folder:('State -> 'T1 -> 'T2 -> 'State) -> state:'State -> list1:'T1 list -> list2:'T2 list -> 'State