From b869e16bab9b41dba4a53a2c6fb90a39c895983a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2019 17:15:13 -0700 Subject: [PATCH 001/146] Update dependencies from https://github.com/dotnet/arcade build 20190731.19 (#7320) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19381.19 --- eng/Version.Details.xml | 4 +- eng/common/init-tools-native.sh | 4 +- eng/common/native/install-cmake-test.sh | 117 ++++++++++++++++++++++++ eng/common/native/install-cmake.sh | 2 +- eng/common/templates/job/job.yml | 6 +- global.json | 2 +- 6 files changed, 128 insertions(+), 7 deletions(-) create mode 100755 eng/common/native/install-cmake-test.sh diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 92b380533f..e94e911d91 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - def377f94747dac91482aad67b33a1c011ffc770 + 48787606d809963cc800151cbfbefe0a74ae74b4 diff --git a/eng/common/init-tools-native.sh b/eng/common/init-tools-native.sh index 5f2e77f448..4dafaaca13 100755 --- a/eng/common/init-tools-native.sh +++ b/eng/common/init-tools-native.sh @@ -70,8 +70,7 @@ function ReadGlobalJsonNativeTools { # Only extract the contents of the object. local native_tools_list=$(echo $native_tools_section | awk -F"[{}]" '{print $2}') native_tools_list=${native_tools_list//[\" ]/} - native_tools_list=${native_tools_list//,/$'\n'} - native_tools_list="$(echo -e "${native_tools_list}" | tr -d '[[:space:]]')" + native_tools_list=$( echo "$native_tools_list" | sed 's/\s//g' | sed 's/,/\n/g' ) local old_IFS=$IFS while read -r line; do @@ -108,6 +107,7 @@ else installer_command+=" --baseuri $base_uri" installer_command+=" --installpath $install_bin" installer_command+=" --version $tool_version" + echo $installer_command if [[ $force = true ]]; then installer_command+=" --force" diff --git a/eng/common/native/install-cmake-test.sh b/eng/common/native/install-cmake-test.sh new file mode 100755 index 0000000000..53ddf4e686 --- /dev/null +++ b/eng/common/native/install-cmake-test.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash + +source="${BASH_SOURCE[0]}" +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +. $scriptroot/common-library.sh + +base_uri= +install_path= +version= +clean=false +force=false +download_retries=5 +retry_wait_time_seconds=30 + +while (($# > 0)); do + lowerI="$(echo $1 | awk '{print tolower($0)}')" + case $lowerI in + --baseuri) + base_uri=$2 + shift 2 + ;; + --installpath) + install_path=$2 + shift 2 + ;; + --version) + version=$2 + shift 2 + ;; + --clean) + clean=true + shift 1 + ;; + --force) + force=true + shift 1 + ;; + --downloadretries) + download_retries=$2 + shift 2 + ;; + --retrywaittimeseconds) + retry_wait_time_seconds=$2 + shift 2 + ;; + --help) + echo "Common settings:" + echo " --baseuri Base file directory or Url wrom which to acquire tool archives" + echo " --installpath Base directory to install native tool to" + echo " --clean Don't install the tool, just clean up the current install of the tool" + echo " --force Force install of tools even if they previously exist" + echo " --help Print help and exit" + echo "" + echo "Advanced settings:" + echo " --downloadretries Total number of retry attempts" + echo " --retrywaittimeseconds Wait time between retry attempts in seconds" + echo "" + exit 0 + ;; + esac +done + +tool_name="cmake-test" +tool_os=$(GetCurrentOS) +tool_folder=$(echo $tool_os | awk '{print tolower($0)}') +tool_arch="x86_64" +tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" +tool_install_directory="$install_path/$tool_name/$version" +tool_file_path="$tool_install_directory/$tool_name_moniker/bin/$tool_name" +shim_path="$install_path/$tool_name.sh" +uri="${base_uri}/$tool_folder/$tool_name/$tool_name_moniker.tar.gz" + +# Clean up tool and installers +if [[ $clean = true ]]; then + echo "Cleaning $tool_install_directory" + if [[ -d $tool_install_directory ]]; then + rm -rf $tool_install_directory + fi + + echo "Cleaning $shim_path" + if [[ -f $shim_path ]]; then + rm -rf $shim_path + fi + + tool_temp_path=$(GetTempPathFileName $uri) + echo "Cleaning $tool_temp_path" + if [[ -f $tool_temp_path ]]; then + rm -rf $tool_temp_path + fi + + exit 0 +fi + +# Install tool +if [[ -f $tool_file_path ]] && [[ $force = false ]]; then + echo "$tool_name ($version) already exists, skipping install" + exit 0 +fi + +DownloadAndExtract $uri $tool_install_directory $force $download_retries $retry_wait_time_seconds + +if [[ $? != 0 ]]; then + echo "Installation failed" >&2 + exit 1 +fi + +# Generate Shim +# Always rewrite shims so that we are referencing the expected version +NewScriptShim $shim_path $tool_file_path true + +if [[ $? != 0 ]]; then + echo "Shim generation failed" >&2 + exit 1 +fi + +exit 0 \ No newline at end of file diff --git a/eng/common/native/install-cmake.sh b/eng/common/native/install-cmake.sh index 293af6017d..5f1a182fa9 100755 --- a/eng/common/native/install-cmake.sh +++ b/eng/common/native/install-cmake.sh @@ -69,7 +69,7 @@ tool_name_moniker="$tool_name-$version-$tool_os-$tool_arch" tool_install_directory="$install_path/$tool_name/$version" tool_file_path="$tool_install_directory/$tool_name_moniker/bin/$tool_name" shim_path="$install_path/$tool_name.sh" -uri="${base_uri}/$tool_folder/cmake/$tool_name_moniker.tar.gz" +uri="${base_uri}/$tool_folder/$tool_name/$tool_name_moniker.tar.gz" # Clean up tool and installers if [[ $clean = true ]]; then diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 1814e0ab61..8db456bb7f 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -37,6 +37,9 @@ parameters: # Optional: Enable publishing to the build asset registry enablePublishBuildAssets: false + # Optional: Prevent gather/push manifest from executing when using publishing pipelines + enablePublishUsingPipelines: false + # Optional: Include PublishTestResults task enablePublishTestResults: false @@ -187,7 +190,7 @@ jobs: continueOnError: true condition: always() - - ${{ if and(eq(parameters.enablePublishBuildAssets, true), ne(variables['_PublishUsingPipelines'], 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - ${{ if and(eq(parameters.enablePublishBuildAssets, true), ne(parameters.enablePublishUsingPipelines, 'true'), eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - task: CopyFiles@2 displayName: Gather Asset Manifests inputs: @@ -195,6 +198,7 @@ jobs: TargetFolder: '$(Build.StagingDirectory)/AssetManifests' continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), eq(variables['_DotNetPublishToBlobFeed'], 'true')) + - task: PublishBuildArtifacts@1 displayName: Push Asset Manifests inputs: diff --git a/global.json b/global.json index 341cf08499..0a08d8518b 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19380.3", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19381.19", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 3e7cdd559c6d5729b1a0482256e3af87816d7f69 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Fri, 2 Aug 2019 02:15:22 +0100 Subject: [PATCH 002/146] debug formatting (#7196) * debug formatting * whitespace * whitespace * Update DetupleArgs.fs --- src/absil/ilreflect.fs | 2 + src/absil/ilwrite.fs | 1 + src/fsharp/ConstraintSolver.fs | 107 ++++++++++++++++++++++-------- src/fsharp/DetupleArgs.fs | 16 +++-- src/fsharp/FindUnsolved.fs | 2 + src/fsharp/IlxGen.fs | 19 +++++- src/fsharp/Optimizer.fs | 4 ++ src/fsharp/PostInferenceChecks.fs | 21 +++++- src/fsharp/TypeChecker.fs | 2 +- src/fsharp/autobox.fs | 2 + src/ilx/EraseClosures.fs | 14 +++- 11 files changed, 153 insertions(+), 37 deletions(-) diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index 404ebf81b0..152b2bf54d 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -327,6 +327,8 @@ type cenv = generatePdb: bool resolveAssemblyRef: (ILAssemblyRef -> Choice option) } + override x.ToString() = "" + /// Convert an Abstract IL type reference to Reflection.Emit System.Type value. // This ought to be an adequate substitute for this whole function, but it needs // to be thoroughly tested. diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 66d2dd9a66..47aa56664d 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -605,6 +605,7 @@ type cenv = member cenv.GetCode() = cenv.codeChunks.Close() + override x.ToString() = "" let FindOrAddSharedRow (cenv: cenv) tbl x = cenv.GetTable(tbl).FindOrAddSharedEntry x diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index 4f00fd73ed..188eba19cb 100644 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -64,10 +64,10 @@ let compgenId = mkSynId range0 unassignedTyparName let NewCompGenTypar (kind, rigid, staticReq, dynamicReq, error) = NewTypar(kind, rigid, Typar(compgenId, staticReq, true), error, dynamicReq, [], false, false) -let anon_id m = mkSynId m unassignedTyparName +let AnonTyparId m = mkSynId m unassignedTyparName let NewAnonTypar (kind, m, rigid, var, dyn) = - NewTypar (kind, rigid, Typar(anon_id m, var, true), false, dyn, [], false, false) + NewTypar (kind, rigid, Typar(AnonTyparId m, var, true), false, dyn, [], false, false) let NewNamedInferenceMeasureVar (_m, rigid, var, id) = NewTypar(TyparKind.Measure, rigid, Typar(id, var, false), false, TyparDynamicReq.No, [], false, false) @@ -104,6 +104,7 @@ let FreshenAndFixupTypars m rigid fctps tinst tpsorig = tps, renaming, tinst let FreshenTypeInst m tpsorig = FreshenAndFixupTypars m TyparRigidity.Flexible [] [] tpsorig + let FreshMethInst m fctps tinst tpsorig = FreshenAndFixupTypars m TyparRigidity.Flexible fctps tinst tpsorig let FreshenTypars m tpsorig = @@ -126,62 +127,95 @@ let FreshenMethInfo m (minfo: MethInfo) = [] /// Information about the context of a type equation. type ContextInfo = + /// No context was given. | NoContext + /// The type equation comes from an IF expression. | IfExpression of range + /// The type equation comes from an omitted else branch. | OmittedElseBranch of range + /// The type equation comes from a type check of the result of an else branch. | ElseBranchResult of range + /// The type equation comes from the verification of record fields. | RecordFields + /// The type equation comes from the verification of a tuple in record fields. | TupleInRecordFields + /// The type equation comes from a list or array constructor | CollectionElement of bool * range + /// The type equation comes from a return in a computation expression. + | ReturnInComputationExpression + /// The type equation comes from a yield in a computation expression. | YieldInComputationExpression + /// The type equation comes from a runtime type test. | RuntimeTypeTest of bool + /// The type equation comes from an downcast where a upcast could be used. | DowncastUsedInsteadOfUpcast of bool + /// The type equation comes from a return type of a pattern match clause (not the first clause). | FollowingPatternMatchClause of range + /// The type equation comes from a pattern match guard. | PatternMatchGuard of range + /// The type equation comes from a sequence expression. | SequenceExpression of TType -exception ConstraintSolverTupleDiffLengths of displayEnv: DisplayEnv * TType list * TType list * range * range -exception ConstraintSolverInfiniteTypes of displayEnv: DisplayEnv * contextInfo: ContextInfo * TType * TType * range * range -exception ConstraintSolverTypesNotInEqualityRelation of displayEnv: DisplayEnv * TType * TType * range * range * ContextInfo +exception ConstraintSolverTupleDiffLengths of displayEnv: DisplayEnv * TType list * TType list * range * range + +exception ConstraintSolverInfiniteTypes of displayEnv: DisplayEnv * contextInfo: ContextInfo * TType * TType * range * range + +exception ConstraintSolverTypesNotInEqualityRelation of displayEnv: DisplayEnv * TType * TType * range * range * ContextInfo + exception ConstraintSolverTypesNotInSubsumptionRelation of displayEnv: DisplayEnv * TType * TType * range * range -exception ConstraintSolverMissingConstraint of displayEnv: DisplayEnv * Tast.Typar * Tast.TyparConstraint * range * range -exception ConstraintSolverError of string * range * range -exception ConstraintSolverRelatedInformation of string option * range * exn -exception ErrorFromApplyingDefault of tcGlobals: TcGlobals * displayEnv: DisplayEnv * Tast.Typar * TType * exn * range -exception ErrorFromAddingTypeEquation of tcGlobals: TcGlobals * displayEnv: DisplayEnv * TType * TType * exn * range +exception ConstraintSolverMissingConstraint of displayEnv: DisplayEnv * Tast.Typar * Tast.TyparConstraint * range * range + +exception ConstraintSolverError of string * range * range + +exception ConstraintSolverRelatedInformation of string option * range * exn + +exception ErrorFromApplyingDefault of tcGlobals: TcGlobals * displayEnv: DisplayEnv * Tast.Typar * TType * exn * range + +exception ErrorFromAddingTypeEquation of tcGlobals: TcGlobals * displayEnv: DisplayEnv * TType * TType * exn * range + exception ErrorsFromAddingSubsumptionConstraint of tcGlobals: TcGlobals * displayEnv: DisplayEnv * TType * TType * exn * ContextInfo * range -exception ErrorFromAddingConstraint of displayEnv: DisplayEnv * exn * range -exception PossibleOverload of displayEnv: DisplayEnv * string * exn * range -exception UnresolvedOverloading of displayEnv: DisplayEnv * exn list * string * range -exception UnresolvedConversionOperator of displayEnv: DisplayEnv * TType * TType * range + +exception ErrorFromAddingConstraint of displayEnv: DisplayEnv * exn * range + +exception PossibleOverload of displayEnv: DisplayEnv * string * exn * range + +exception UnresolvedOverloading of displayEnv: DisplayEnv * exn list * string * range + +exception UnresolvedConversionOperator of displayEnv: DisplayEnv * TType * TType * range let GetPossibleOverloads amap m denv (calledMethGroup: (CalledMeth<_> * exn) list) = - calledMethGroup |> List.map (fun (cmeth, e) -> PossibleOverload(denv, NicePrint.stringOfMethInfo amap m denv cmeth.Method, e, m)) + calledMethGroup |> List.map (fun (cmeth, e) -> + PossibleOverload(denv, NicePrint.stringOfMethInfo amap m denv cmeth.Method, e, m)) type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) type ConstraintSolverState = { g: TcGlobals + amap: Import.ImportMap + InfoReader: InfoReader + + /// The function used to freshen values we encounter during trait constraint solving TcVal: TcValF + /// This table stores all unsolved, ungeneralized trait constraints, indexed by free type variable. /// That is, there will be one entry in this table for each free type variable in /// each outstanding, unsolved, ungeneralized trait constraint. Constraints are removed from the table and resolved @@ -196,20 +230,29 @@ type ConstraintSolverState = InfoReader = infoReader TcVal = tcVal } - type ConstraintSolverEnv = { SolverState: ConstraintSolverState + eContextInfo: ContextInfo + MatchingOnly: bool + m: range + EquivEnv: TypeEquivEnv + DisplayEnv: DisplayEnv } + member csenv.InfoReader = csenv.SolverState.InfoReader + member csenv.g = csenv.SolverState.g + member csenv.amap = csenv.SolverState.amap + override csenv.ToString() = " @ " + csenv.m.ToString() + let MakeConstraintSolverEnv contextInfo css m denv = { SolverState = css m = m @@ -219,11 +262,6 @@ let MakeConstraintSolverEnv contextInfo css m denv = EquivEnv = TypeEquivEnv.Empty DisplayEnv = denv } - -//------------------------------------------------------------------------- -// Occurs check -//------------------------------------------------------------------------- - /// Check whether a type variable occurs in the r.h.s. of a type, e.g. to catch /// infinite equations such as /// 'a = list<'a> @@ -287,9 +325,13 @@ let isDecimalTy g ty = typeEquivAux EraseMeasures g g.decimal_ty ty let IsNonDecimalNumericOrIntegralEnumType g ty = isIntegerOrIntegerEnumTy g ty || isFpTy g ty + let IsNumericOrIntegralEnumType g ty = IsNonDecimalNumericOrIntegralEnumType g ty || isDecimalTy g ty + let IsNonDecimalNumericType g ty = isIntegerTy g ty || isFpTy g ty + let IsNumericType g ty = IsNonDecimalNumericType g ty || isDecimalTy g ty + let IsRelationalType g ty = IsNumericType g ty || isStringTy g ty || isCharTy g ty || isBoolTy g ty // Get measure of type, float<_> or float32<_> or decimal<_> but not float=float<1> or float32=float32<1> or decimal=decimal<1> @@ -386,8 +428,11 @@ let ShowAccessDomain ad = // Solve exception NonRigidTypar of displayEnv: DisplayEnv * string option * range * TType * TType * range + exception LocallyAbortOperationThatFailsToResolveOverload + exception LocallyAbortOperationThatLosesAbbrevs + let localAbortD = ErrorD LocallyAbortOperationThatLosesAbbrevs /// Return true if we would rather unify this variable v1 := v2 than vice versa @@ -652,7 +697,6 @@ let NormalizeExponentsInTypeScheme uvars ty = SubstMeasure v (Measure.RationalPower (Measure.Var v', DivRational OneRational expGcd)) v') - // We normalize unit-of-measure-polymorphic type schemes. There // are three reasons for doing this: // (1) to present concise and consistent type schemes to the programmer @@ -732,8 +776,6 @@ let rec SolveTyparEqualsType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optio // Record a entry in the undo trace if one is provided trace.Exec (fun () -> r.typar_solution <- Some ty) (fun () -> r.typar_solution <- None) - (* dprintf "setting typar %d to type %s at %a\n" r.Stamp ((DebugPrint.showType ty)) outputRange m; *) - // Only solve constraints if this is not an error var if r.IsFromError then () else // Check to see if this type variable is relevant to any trait constraints. @@ -745,15 +787,17 @@ let rec SolveTyparEqualsType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optio | _ -> failwith "SolveTyparEqualsType" } - /// Apply the constraints on 'typar' to the type 'ty' and solveTypMeetsTyparConstraints (csenv: ConstraintSolverEnv) ndeep m2 trace ty (r: Typar) = trackErrors { let g = csenv.g + // Propagate compat flex requirements from 'tp' to 'ty' do! SolveTypIsCompatFlex csenv trace r.IsCompatFlex ty + // Propagate dynamic requirements from 'tp' to 'ty' do! SolveTypDynamicReq csenv trace r.DynamicReq ty + // Propagate static requirements from 'tp' to 'ty' do! SolveTypStaticReq csenv trace r.StaticReq ty @@ -899,6 +943,7 @@ and SolveTypeSubsumesType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optional let amap = csenv.amap let aenv = csenv.EquivEnv let denv = csenv.DisplayEnv + match sty1, sty2 with | TType_var tp1, _ -> match aenv.EquivTypars.TryFind tp1 with @@ -914,15 +959,19 @@ and SolveTypeSubsumesType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optional | TType_tuple (tupInfo1, l1), TType_tuple (tupInfo2, l2) -> if evalTupInfoIsStruct tupInfo1 <> evalTupInfoIsStruct tupInfo2 then ErrorD (ConstraintSolverError(FSComp.SR.tcTupleStructMismatch(), csenv.m, m2)) else SolveTypeEqualsTypeEqns csenv ndeep m2 trace cxsln l1 l2 (* nb. can unify since no variance *) + | TType_anon (anonInfo1, l1), TType_anon (anonInfo2, l2) -> SolveAnonInfoEqualsAnonInfo csenv m2 anonInfo1 anonInfo2 ++ (fun () -> SolveTypeEqualsTypeEqns csenv ndeep m2 trace cxsln l1 l2) (* nb. can unify since no variance *) + | TType_fun (d1, r1), TType_fun (d2, r2) -> SolveFunTypeEqn csenv ndeep m2 trace cxsln d1 d2 r1 r2 (* nb. can unify since no variance *) + | TType_measure ms1, TType_measure ms2 -> UnifyMeasures csenv trace ms1 ms2 // Enforce the identities float=float<1>, float32=float32<1> and decimal=decimal<1> | (_, TType_app (tc2, [ms])) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty1 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) -> SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ms (TType_measure Measure.One) + | (TType_app (tc2, [ms]), _) when (tc2.IsMeasureableReprTycon && typeEquiv csenv.g sty2 (reduceTyconRefMeasureableOrProvided csenv.g tc2 [ms])) -> SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ms (TType_measure Measure.One) @@ -973,6 +1022,7 @@ and SolveTypeSubsumesType (csenv: ConstraintSolverEnv) ndeep m2 (trace: Optional let ty2arg = destArrayTy g ty2 SolveTypeEqualsTypeKeepAbbrevsWithCxsln csenv ndeep m2 trace cxsln ty1arg ty2arg | _ -> error(InternalError("destArrayTy", m)) + | _ -> // D :> Head<_> --> C :> Head<_> for the // first interface or super-class C supported by D which @@ -991,7 +1041,6 @@ and SolveTypeSubsumesTypeKeepAbbrevs csenv ndeep m2 trace cxsln ty1 ty2 = // Solve and record non-equality constraints //------------------------------------------------------------------------- - and SolveTyparSubtypeOfType (csenv: ConstraintSolverEnv) ndeep m2 trace tp ty1 = let g = csenv.g if isObjTy g ty1 then CompleteD @@ -1052,7 +1101,7 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload | _ -> do! ErrorD (ConstraintSolverError(FSComp.SR.csExpectedArguments(), m, m2)) // Trait calls are only supported on pseudo type (variables) for e in tys do - do! SolveTypStaticReq csenv trace HeadTypeStaticReq e + do! SolveTypStaticReq csenv trace HeadTypeStaticReq e let argtys = if memFlags.IsInstance then List.tail argtys else argtys @@ -1108,14 +1157,18 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 (mkAppTy tcref [TType_measure ms2]) do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1, if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) return TTraitBuiltIn + | _ -> + match GetMeasureOfType g argty2 with | Some (tcref, ms2) -> let ms1 = freshMeasure () do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty1 (mkAppTy tcref [TType_measure ms1]) do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty (mkAppTy tcref [TType_measure (Measure.Prod(ms1, if nm = "op_Multiply" then ms2 else Measure.Inv ms2))]) return TTraitBuiltIn + | _ -> + do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace argty2 argty1 do! SolveTypeEqualsTypeKeepAbbrevs csenv ndeep m2 trace rty argty1 return TTraitBuiltIn diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index 8ae41acb31..b15bae8f24 100644 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -644,17 +644,26 @@ let hasTransfrom penv f = Zmap.tryFind f penv.transforms *) type env = - { eg : TcGlobals - prefix : string - m : Range.range } + { + eg: TcGlobals + + prefix: string + + m: Range.range + } + + override __.ToString() = "" let suffixE env s = {env with prefix = env.prefix + s} + let rangeE env m = {env with m = m} let push b bs = b :: bs + let pushL xs bs = xs@bs let newLocal env ty = mkCompGenLocal env.m env.prefix ty + let newLocalN env i ty = mkCompGenLocal env.m (env.prefix + string i) ty let noEffectExpr env bindings x = @@ -712,7 +721,6 @@ and collapseArgs env bindings n (callPattern) args = | _ts :: _tss, [] -> internalError "collapseArgs: CallPattern longer than callsite args. REPORT BUG" - //------------------------------------------------------------------------- // pass - app fixup //------------------------------------------------------------------------- diff --git a/src/fsharp/FindUnsolved.fs b/src/fsharp/FindUnsolved.fs index ac64aa6c1d..d11a128417 100644 --- a/src/fsharp/FindUnsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -21,6 +21,8 @@ type cenv = denv: DisplayEnv mutable unsolved: Typars } + override x.ToString() = "" + /// Walk types, collecting type variables let accTy cenv _env ty = let normalizedTy = tryNormalizeMeasureInType cenv.g ty diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 6b66a6a8ab..5e61742fd9 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -253,6 +253,8 @@ type cenv = delayedGenMethods: Queue unit> } + override x.ToString() = "" + let mkTypeOfExpr cenv m ilty = let g = cenv.g @@ -771,17 +773,26 @@ and NamedLocalIlxClosureInfo = | NamedLocalIlxClosureInfoGenerator of (IlxGenEnv -> IlxClosureInfo) | NamedLocalIlxClosureInfoGenerated of IlxClosureInfo + override __.ToString() = "" + /// Indicates the overall representation decisions for all the elements of a namespace of module and ModuleStorage = - { Vals: Lazy> - SubModules: Lazy> } + { + Vals: Lazy> + + SubModules: Lazy> + } + + override __.ToString() = "" /// Indicate whether a call to the value can be implemented as /// a branch. At the moment these are only used for generating branch calls back to /// the entry label of the method currently being generated when a direct tailcall is /// made in the method itself. and BranchCallItem = + | BranchCallClosure of ArityInfo + | BranchCallMethod of // Argument counts for compiled form of F# method or value ArityInfo * @@ -793,6 +804,8 @@ and BranchCallItem = int * // num obj args int + + override __.ToString() = "" /// Represents a place we can branch to and Mark = @@ -837,6 +850,8 @@ and IlxGenEnv = isInLoop: bool } + override __.ToString() = "" + let SetIsInLoop isInLoop eenv = if eenv.isInLoop = isInLoop then eenv else { eenv with isInLoop = isInLoop } diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index ecc24b9131..cfa1a9a49d 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -380,6 +380,8 @@ type cenv = casApplied : Dictionary } + override x.ToString() = "" + type IncrementalOptimizationEnv = { /// An identifier to help with name generation latestBoundId: Ident option @@ -415,6 +417,8 @@ type IncrementalOptimizationEnv = localExternalVals = LayeredMap.Empty globalModuleInfos = LayeredMap.Empty } + override x.ToString() = "" + //------------------------------------------------------------------------- // IsPartialExprVal - is the expr fully known? //------------------------------------------------------------------------- diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index b6a286c5d7..d6ad0cdf64 100644 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -93,7 +93,10 @@ type env = returnScope : int /// Are we in an app expression (Expr.App)? - isInAppExpr: bool } + isInAppExpr: bool + } + + override __.ToString() = "" let BindTypar env (tp: Typar) = { env with @@ -183,23 +186,39 @@ let CombineLimits limits = type cenv = { boundVals: Dictionary // really a hash set + limitVals: Dictionary + mutable potentialUnboundUsesOfVals: StampMap + mutable anonRecdTypes: StampMap + g: TcGlobals + amap: Import.ImportMap + /// For reading metadata infoReader: InfoReader + internalsVisibleToPaths : CompilationPath list + denv: DisplayEnv + viewCcu : CcuThunk + reportErrors: bool + isLastCompiland : bool*bool + isInternalTestSpanStackReferring: bool + // outputs mutable usesQuotations : bool + mutable entryPointGiven: bool } + override x.ToString() = "" + /// Check if the value is an argument of a function let IsValArgument env (v: Val) = env.argVals.ContainsVal v diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 70bb0f6b21..7610c4f209 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -534,7 +534,7 @@ type cenv = conditionalDefines = conditionalDefines isInternalTestSpanStackReferring = isInternalTestSpanStackReferring } - override __.ToString() = "cenv(...)" + override __.ToString() = "" let CopyAndFixupTypars m rigid tpsorig = ConstraintSolver.FreshenAndFixupTypars m rigid [] [] tpsorig diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs index da6b5c1d64..8c7036e72c 100644 --- a/src/fsharp/autobox.fs +++ b/src/fsharp/autobox.fs @@ -18,6 +18,8 @@ type cenv = { g: TcGlobals amap: Import.ImportMap } + override x.ToString() = "" + /// Find all the mutable locals that escape a method, function or lambda expression let DecideEscapes syntacticArgs body = let cantBeFree v = diff --git a/src/ilx/EraseClosures.fs b/src/ilx/EraseClosures.fs index 3ba574b9ba..ca0dbfcdf8 100644 --- a/src/ilx/EraseClosures.fs +++ b/src/ilx/EraseClosures.fs @@ -116,12 +116,22 @@ let mkFuncTypeRef n = [IlxSettings.ilxNamespace () + ".OptimizedClosures"], "FSharpFunc`"+ string (n + 1)) type cenv = - { ilg:ILGlobals + { + ilg:ILGlobals + tref_Func: ILTypeRef[] + mkILTyFuncTy: ILType + addFieldGeneratedAttrs: ILFieldDef -> ILFieldDef + addFieldNeverAttrs: ILFieldDef -> ILFieldDef - addMethodGeneratedAttrs: ILMethodDef -> ILMethodDef } + + addMethodGeneratedAttrs: ILMethodDef -> ILMethodDef + } + + override __.ToString() = "" + let addMethodGeneratedAttrsToTypeDef cenv (tdef: ILTypeDef) = tdef.With(methods = (tdef.Methods.AsList |> List.map (fun md -> md |> cenv.addMethodGeneratedAttrs) |> mkILMethods)) From 3a479d8601ddc8d0e7c25b41db71f825b62b9b8f Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Fri, 2 Aug 2019 04:39:22 +0200 Subject: [PATCH 003/146] test output (#7289) --- tests/fsharp/Compiler/CompilerAssert.fs | 27 ++++++++++++++++--------- tests/fsharpqa/Source/Simple/env.lst | 1 - tests/fsharpqa/Source/Simple/hellow.fs | 7 ------- tests/fsharpqa/Source/test.lst | 1 - 4 files changed, 17 insertions(+), 19 deletions(-) delete mode 100644 tests/fsharpqa/Source/Simple/env.lst delete mode 100644 tests/fsharpqa/Source/Simple/hellow.fs diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index c663e9b9c2..4c11d90ecd 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -110,7 +110,7 @@ let main argv = 0""" #if !NETCOREAPP OtherOptions = [|"--preferreduilang:en-US";|] #else - OtherOptions = + OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) Array.append [|"--preferreduilang:en-US"; "--targetprofile:netcore"; "--noframework"|] assemblies #endif @@ -175,12 +175,12 @@ let main argv = 0""" let TypeCheckWithErrorsAndOptions options (source: string) expectedTypeErrors = lock gate <| fun () -> - let parseResults, fileAnswer = + let parseResults, fileAnswer = checker.ParseAndCheckFileInProject( "test.fs", 0, SourceText.ofString source, - { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) + { defaultProjectOptions with OtherOptions = Array.append options defaultProjectOptions.OtherOptions}) |> Async.RunSynchronously Assert.IsEmpty(parseResults.Errors, sprintf "Parse errors: %A" parseResults.Errors) @@ -189,7 +189,7 @@ let main argv = 0""" | FSharpCheckFileAnswer.Aborted _ -> Assert.Fail("Type Checker Aborted") | FSharpCheckFileAnswer.Succeeded(typeCheckResults) -> - let errors = + let errors = typeCheckResults.Errors |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) @@ -234,7 +234,7 @@ let main argv = 0""" pInfo.RedirectStandardError <- true pInfo.UseShellExecute <- false - + let p = Process.Start(pInfo) p.WaitForExit() @@ -247,13 +247,13 @@ let main argv = 0""" ) let CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = - compile false source (fun (errors, outputFilePath) -> + compile false source (fun (errors, outputFilePath) -> if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors) f (ILVerifier outputFilePath) ) - + let RunScript (source: string) (expectedErrorMessages: string list) = lock gate <| fun () -> // Intialize output and input streams @@ -271,7 +271,7 @@ let main argv = 0""" let fsiConfig = FsiEvaluationSession.GetDefaultConfiguration() use fsiSession = FsiEvaluationSession.Create(fsiConfig, allArgs, inStream, outStream, errStream, collectible = true) - + let ch, errors = fsiSession.EvalInteractionNonThrowing source let errorMessages = ResizeArray() @@ -297,7 +297,7 @@ let main argv = 0""" Assert.True(parseResults.ParseHadErrors) - let errors = + let errors = parseResults.Errors |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) @@ -310,4 +310,11 @@ let main argv = 0""" Assert.AreEqual(expectedErrorNumber, info.ErrorNumber, "expectedErrorNumber") Assert.AreEqual(expectedErrorRange, (info.StartLineAlternate, info.StartColumn + 1, info.EndLineAlternate, info.EndColumn + 1), "expectedErrorRange") Assert.AreEqual(expectedErrorMsg, info.Message, "expectedErrorMsg") - ) \ No newline at end of file + ) + + [] + let ``hello world``() = + CompileExeAndRun + """ +(printfn "Hello, world."; exit 0) + """ \ No newline at end of file diff --git a/tests/fsharpqa/Source/Simple/env.lst b/tests/fsharpqa/Source/Simple/env.lst deleted file mode 100644 index b6c57be84f..0000000000 --- a/tests/fsharpqa/Source/Simple/env.lst +++ /dev/null @@ -1 +0,0 @@ -PRI0 SOURCE=hellow.fs # HelloW \ No newline at end of file diff --git a/tests/fsharpqa/Source/Simple/hellow.fs b/tests/fsharpqa/Source/Simple/hellow.fs deleted file mode 100644 index e2d89fde3e..0000000000 --- a/tests/fsharpqa/Source/Simple/hellow.fs +++ /dev/null @@ -1,7 +0,0 @@ -// - -//< Date: Fri, 2 Aug 2019 04:39:43 +0200 Subject: [PATCH 004/146] Move WrongSyntaxInForLoop test (#7297) * Move WrongSyntaxInForLoop test * fix test --- tests/fsharp/Compiler/CompilerAssert.fs | 4 ++-- .../ErrorMessages/WrongSyntaxInForLoop.fs | 21 +++++++++++++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../Warnings/EqualsInsteadOfInInForLoop.fs | 7 ------- tests/fsharpqa/Source/Warnings/env.lst | 1 - 5 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs delete mode 100644 tests/fsharpqa/Source/Warnings/EqualsInsteadOfInInForLoop.fs diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 4c11d90ecd..9438fce758 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -108,7 +108,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US";|] + OtherOptions = [|"--preferreduilang:en-US"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) @@ -301,7 +301,7 @@ let main argv = 0""" parseResults.Errors |> Array.distinctBy (fun e -> e.Severity, e.ErrorNumber, e.StartLineAlternate, e.StartColumn, e.EndLineAlternate, e.EndColumn, e.Message) - Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Type check errors: %A" parseResults.Errors) + Assert.AreEqual(Array.length expectedParseErrors, errors.Length, sprintf "Parse errors: %A" parseResults.Errors) Array.zip errors expectedParseErrors |> Array.iter (fun (info, expectedError) -> diff --git a/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs b/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs new file mode 100644 index 0000000000..7be1e78981 --- /dev/null +++ b/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.SourceCodeServices + +[] +module ``Wrong syntax in for loop`` = + + [] + let ``Equals instead of in``() = + CompilerAssert.ParseWithErrors + """ +module X +for i = 0 .. 100 do + () + +exit 0 + """ + [|FSharpErrorSeverity.Error, 3215, (3, 7, 3, 8), "Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead?" |] diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index f15dc14585..51cf0b3606 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -46,6 +46,7 @@ + diff --git a/tests/fsharpqa/Source/Warnings/EqualsInsteadOfInInForLoop.fs b/tests/fsharpqa/Source/Warnings/EqualsInsteadOfInInForLoop.fs deleted file mode 100644 index 4100e205a5..0000000000 --- a/tests/fsharpqa/Source/Warnings/EqualsInsteadOfInInForLoop.fs +++ /dev/null @@ -1,7 +0,0 @@ -// #Warnings -//Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead? - -for i = 0 .. 100 do - () - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/env.lst b/tests/fsharpqa/Source/Warnings/env.lst index 275959c695..fd3de1f961 100644 --- a/tests/fsharpqa/Source/Warnings/env.lst +++ b/tests/fsharpqa/Source/Warnings/env.lst @@ -1,6 +1,5 @@ SOURCE=WrongNumericLiteral.fs # WrongNumericLiteral.fs SOURCE=FS0988AtEndOfFile.fs # FS0988AtEndOfFile.fs - SOURCE=EqualsInsteadOfInInForLoop.fs # EqualsInsteadOfInInForLoop.fs SOURCE=DontWarnExternalFunctionAsUnused.fs SCFLAGS="--warnon:1182 --warnaserror+" # DontWarnExternalFunctionAsUnused.fs SOURCE=SuggestTypesInModule.fs # SuggestTypesInModule.fs SOURCE=SuggestGenericType.fs # SuggestGenericType.fs From 31388f7710031e7c834faea406346158f9a13ad2 Mon Sep 17 00:00:00 2001 From: Sergey Tihon Date: Fri, 2 Aug 2019 05:41:47 +0300 Subject: [PATCH 005/146] Moved CodeGen/EmittedIL/LiteralValue over to NUnit (#7291) * Moved CodeGen/EmittedIL/LiteralValue over to NUnit * Expected IL simplified to test one thing and to be runtime independent --- .../CodeGen/EmittedIL/LiteralValue.fs | 28 +++++++ tests/fsharp/Compiler/ILChecker.fs | 1 + tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../EmittedIL/LiteralValue/LiteralValue.fs | 6 -- .../LiteralValue/LiteralValue.il.bsl | 81 ------------------- .../CodeGen/EmittedIL/LiteralValue/env.lst | 1 - 6 files changed, 30 insertions(+), 88 deletions(-) create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/LiteralValue.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/env.lst diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/LiteralValue.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/LiteralValue.fs new file mode 100644 index 0000000000..7431bd0397 --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/LiteralValue.fs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open FSharp.Compiler.UnitTests +open NUnit.Framework + +[] +module ``Literal Value`` = + + [] + let ``Literal Value``() = + CompilerAssert.CompileLibraryAndVerifyIL + """ +module LiteralValue + +[] +let x = 7 + +[] +let main _ = + 0 + """ + (fun verifier -> verifier.VerifyIL [ + """ +.field public static literal int32 x = int32(0x00000007) + """ + ]) diff --git a/tests/fsharp/Compiler/ILChecker.fs b/tests/fsharp/Compiler/ILChecker.fs index ac6873942c..efc180145e 100644 --- a/tests/fsharp/Compiler/ILChecker.fs +++ b/tests/fsharp/Compiler/ILChecker.fs @@ -54,6 +54,7 @@ module ILChecker = |> filterSpecialComment expectedIL + |> List.map (fun (ilCode: string) -> ilCode.Trim() ) |> List.iter (fun (ilCode: string) -> let expectedLines = ilCode.Split('\n') let startIndex = textNoComments.IndexOf(expectedLines.[0]) diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 51cf0b3606..9caaea5ac5 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -33,6 +33,7 @@ + diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.fs deleted file mode 100644 index cca0b9e0e2..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.fs +++ /dev/null @@ -1,6 +0,0 @@ -[] -let x = 7 - -[] -let main argv = - 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.il.bsl deleted file mode 100644 index 32a104642e..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/LiteralValue.il.bsl +++ /dev/null @@ -1,81 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.5.22220.0 - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:3:0 -} -.assembly LiteralValue -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.LiteralValue -{ - // Offset: 0x00000000 Length: 0x00000274 - // WARNING: managed resource file FSharpSignatureData.test created -} -.mresource public FSharpOptimizationData.LiteralValue -{ - // Offset: 0x00000278 Length: 0x0000006F - // WARNING: managed resource file FSharpOptimizationData.test created -} -.module LiteralValue.exe - // MVID: {5AA663EB-D9C1-2E4E-A745-0383EB63A65A} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02BF0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed LiteralValue - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .field public static literal int32 x = int32(0x00000007) - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.LiteralAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .method public static int32 main(string[] argv) cil managed - { - .entrypoint - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 2 (0x2) - .maxstack 8 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 6,6 : 5,6 'D:\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\LiteralValue\\LiteralValue.fs' - IL_0000: ldc.i4.0 - IL_0001: ret - } // end of method LiteralValue::main - -} // end of class LiteralValue - -.class private abstract auto ansi sealed ''.$LiteralValue - extends [mscorlib]System.Object -{ -} // end of class ''.$LiteralValue - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** -// WARNING: Created Win32 resource file test.res diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/env.lst deleted file mode 100644 index 5566c4d1da..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/LiteralValue/env.lst +++ /dev/null @@ -1 +0,0 @@ - SOURCE=LiteralValue.fs SCFLAGS="-g --test:LiteralValue --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LiteralValue.exe" # LiteralValue.fs - \ No newline at end of file From 7c7a87b9003f7c9bbfedd598b48803c75c6edbce Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Fri, 2 Aug 2019 08:08:20 +0200 Subject: [PATCH 006/146] Activate suggestions in unit tests and move some tests (#7251) * Moved Suggestion Tests over to NUnit * Try to activate suggestions in unit tests * Fix suggestion tests * Fix suggestion tests * Fix suggestion tests * Fix suggestion tests --- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- .../Compiler/ErrorMessages/ClassesTests.fs | 2 +- .../ErrorMessages/ConstructorTests.fs | 2 +- .../ErrorMessages/DontSuggestTests.fs | 2 +- .../ErrorMessages/NameResolutionTests.fs | 10 +- .../ErrorMessages/SuggestionsTests.fs | 320 ++++++++++++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../Source/Warnings/FieldSuggestion.fs | 10 - .../Warnings/SuggestArrayModuleFunctions.fs | 9 - .../Source/Warnings/SuggestAsyncModule.fs | 9 - .../Source/Warnings/SuggestAttributes.fs | 13 - .../SuggestDoubleBacktickIdentifiers.fs | 11 - .../Warnings/SuggestDoubleBacktickUnions.fs | 14 - .../Source/Warnings/SuggestFieldsInCtor.fs | 13 - .../Source/Warnings/SuggestGenericType.fs | 9 - .../Source/Warnings/SuggestMethods.fs | 16 - .../Source/Warnings/SuggestModules.fs | 12 - .../Source/Warnings/SuggestNamespaces.fs | 8 - .../Source/Warnings/SuggestRecordLabels.fs | 11 - .../SuggestRecordTypeForRQARecords.fs | 13 - .../Source/Warnings/SuggestToUseIndexer.fs | 14 - .../Source/Warnings/SuggestTypeParameters.fs | 14 - .../Source/Warnings/SuggestTypesInModule.fs | 8 - .../Warnings/SuggestTypesInNamespace.fs | 10 - .../Warnings/SuggestTypesInNamespaceVS.fs | 7 - .../Source/Warnings/SuggestUnionCases.fs | 12 - .../Warnings/SuggestUnionTypeForRQAUnions.fs | 12 - .../Warnings/SuggestUnionsInPatternMatch.fs | 17 - tests/fsharpqa/Source/Warnings/env.lst | 21 -- 29 files changed, 330 insertions(+), 272 deletions(-) create mode 100644 tests/fsharp/Compiler/ErrorMessages/SuggestionsTests.fs delete mode 100644 tests/fsharpqa/Source/Warnings/FieldSuggestion.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestArrayModuleFunctions.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestAsyncModule.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestAttributes.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickIdentifiers.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickUnions.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestGenericType.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestMethods.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestModules.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestNamespaces.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestRecordLabels.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestRecordTypeForRQARecords.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestToUseIndexer.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestTypeParameters.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestTypesInModule.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestTypesInNamespace.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestTypesInNamespaceVS.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestUnionCases.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestUnionTypeForRQAUnions.fs delete mode 100644 tests/fsharpqa/Source/Warnings/SuggestUnionsInPatternMatch.fs diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 9438fce758..ccf8f0bd97 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -28,7 +28,7 @@ type ILVerifier (dllFilePath: string) = [] module CompilerAssert = - let checker = FSharpChecker.Create() + let checker = FSharpChecker.Create(suggestNamesForErrors=true) let private config = TestFramework.initializeSuite () diff --git a/tests/fsharp/Compiler/ErrorMessages/ClassesTests.fs b/tests/fsharp/Compiler/ErrorMessages/ClassesTests.fs index 1ce10cb708..8fa8856d54 100644 --- a/tests/fsharp/Compiler/ErrorMessages/ClassesTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/ClassesTests.fs @@ -88,7 +88,7 @@ let x = } """ [| - FSharpErrorSeverity.Error, 767, (8, 14, 8, 34), "The member 'Function' does not correspond to any abstract or virtual method available to override or implement." + FSharpErrorSeverity.Error, 767, (8, 14, 8, 34), "The member 'Function' does not correspond to any abstract or virtual method available to override or implement. Maybe you want one of the following:\r\n MyFunction" FSharpErrorSeverity.Error, 17, (8, 19, 8, 27), "The member 'Function : 'a * 'b -> unit' does not have the correct type to override any given virtual method" FSharpErrorSeverity.Error, 366, (7, 3, 9, 4), "No implementation was given for those members: \r\n\t'abstract member IInterface.MyFunction : int32 * int32 -> unit'\r\n\t'abstract member IInterface.SomeOtherFunction : int32 * int32 -> unit'\r\nNote that all interface members must be implemented and listed under an appropriate 'interface' declaration, e.g. 'interface ... with member ...'." FSharpErrorSeverity.Error, 783, (7, 9, 7, 19), "At least one override did not correctly implement its corresponding abstract member" diff --git a/tests/fsharp/Compiler/ErrorMessages/ConstructorTests.fs b/tests/fsharp/Compiler/ErrorMessages/ConstructorTests.fs index 97aa66e60a..d03747d8da 100644 --- a/tests/fsharp/Compiler/ErrorMessages/ConstructorTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/ConstructorTests.fs @@ -47,7 +47,7 @@ let p = Age = 18) """ [| - FSharpErrorSeverity.Error, 39, (7, 12, 7, 16), "The value or constructor 'Name' is not defined." + FSharpErrorSeverity.Error, 39, (7, 12, 7, 16), "The value or constructor 'Name' is not defined. Maybe you want one of the following:\r\n nan" FSharpErrorSeverity.Warning, 20, (7, 12, 7, 25), "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'." FSharpErrorSeverity.Error, 39, (8, 12, 8, 15), "The value or constructor 'Age' is not defined." FSharpErrorSeverity.Error, 501, (7, 5, 8, 21), "The object constructor 'Person' takes 0 argument(s) but is here given 1. The required signature is 'new : unit -> Person'. If some of the arguments are meant to assign values to properties, consider separating those arguments with a comma (',')." diff --git a/tests/fsharp/Compiler/ErrorMessages/DontSuggestTests.fs b/tests/fsharp/Compiler/ErrorMessages/DontSuggestTests.fs index 0e5a4f1955..cf2e040fd2 100644 --- a/tests/fsharp/Compiler/ErrorMessages/DontSuggestTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/DontSuggestTests.fs @@ -17,7 +17,7 @@ let _ = Path.GetFullPath "images" FSharpErrorSeverity.Error 39 (2, 9, 2, 13) - "The value, namespace, type or module 'Path' is not defined." + "The value, namespace, type or module 'Path' is not defined. Maybe you want one of the following:\r\n Math" [] let ``Dont Suggest When Things Are Open``() = diff --git a/tests/fsharp/Compiler/ErrorMessages/NameResolutionTests.fs b/tests/fsharp/Compiler/ErrorMessages/NameResolutionTests.fs index 70def908d1..77ee538ec7 100644 --- a/tests/fsharp/Compiler/ErrorMessages/NameResolutionTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/NameResolutionTests.fs @@ -6,8 +6,8 @@ open NUnit.Framework open FSharp.Compiler.SourceCodeServices [] -module NameResolutionTests = - +module NameResolutionTests = + [] let FieldNotInRecord () = CompilerAssert.TypeCheckSingleError @@ -24,7 +24,7 @@ let r:F = { Size=3; Height=4; Wall=1 } FSharpErrorSeverity.Error 1129 (9, 31, 9, 35) - "The record type 'F' does not contain a label 'Wall'." + "The record type 'F' does not contain a label 'Wall'. Maybe you want one of the following:\r\n Wallis" [] let RecordFieldProposal () = @@ -36,10 +36,10 @@ type C = { Wheels:int } type D = { Size:int; Height:int; Walls:int } type E = { Unknown:string } type F = { Wallis:int; Size:int; Height:int; } - + let r = { Size=3; Height=4; Wall=1 } """ FSharpErrorSeverity.Error 39 (9, 29, 9, 33) - "The record label 'Wall' is not defined." \ No newline at end of file + "The record label 'Wall' is not defined. Maybe you want one of the following:\r\n Walls\r\n Wallis" \ No newline at end of file diff --git a/tests/fsharp/Compiler/ErrorMessages/SuggestionsTests.fs b/tests/fsharp/Compiler/ErrorMessages/SuggestionsTests.fs new file mode 100644 index 0000000000..4ce8c48185 --- /dev/null +++ b/tests/fsharp/Compiler/ErrorMessages/SuggestionsTests.fs @@ -0,0 +1,320 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.SourceCodeServices + +[] +module Suggestions = + + [] + let ``Field Suggestion`` () = + CompilerAssert.TypeCheckSingleError + """ +type Person = { Name : string; } + +let x = { Person.Names = "Isaac" } + """ + FSharpErrorSeverity.Error + 39 + (4, 18, 4, 23) + "The field, constructor or member 'Names' is not defined. Maybe you want one of the following:\r\n Name" + + + [] + let ``Suggest Array Module Functions`` () = + CompilerAssert.TypeCheckSingleError + """ +let f = + Array.blt + """ + FSharpErrorSeverity.Error + 39 + (3, 11, 3, 14) + "The value, constructor, namespace or type 'blt' is not defined. Maybe you want one of the following:\r\n blit" + + + [] + let ``Suggest Async Module`` () = + CompilerAssert.TypeCheckSingleError + """ +let f = + Asnc.Sleep 1000 + """ + FSharpErrorSeverity.Error + 39 + (3, 5, 3, 9) + "The value, namespace, type or module 'Asnc' is not defined. Maybe you want one of the following:\r\n Async\r\n async\r\n asin\r\n snd" + + + [] + let ``Suggest Attribute`` () = + CompilerAssert.TypeCheckSingleError + """ +[] +type MyClass<'Bar>() = + abstract M<'T> : 'T -> 'T + abstract M2<'T> : 'T -> 'Bar + """ + FSharpErrorSeverity.Error + 39 + (2, 3, 2, 15) + "The type 'AbstractClas' is not defined. Maybe you want one of the following:\r\n AbstractClass\r\n AbstractClassAttribute" + + + [] + let ``Suggest Double Backtick Identifiers`` () = + CompilerAssert.TypeCheckSingleError + """ +module N = + let ``longer name`` = "hallo" + +let x = N.``longe name`` + """ + FSharpErrorSeverity.Error + 39 + (5, 11, 5, 25) + "The value, constructor, namespace or type 'longe name' is not defined. Maybe you want one of the following:\r\n longer name" + + + [] + let ``Suggest Double Backtick Unions`` () = + CompilerAssert.TypeCheckSingleError + """ +module N = + type MyUnion = + | ``My Case1`` + | Case2 + +open N + +let x = N.MyUnion.``My Case2`` + """ + FSharpErrorSeverity.Error + 39 + (9, 19, 9,31) + "The field, constructor or member 'My Case2' is not defined. Maybe you want one of the following:\r\n My Case1\r\n Case2" + + + [] + let ``Suggest Fields In Constructor`` () = + CompilerAssert.TypeCheckSingleError + """ +type MyClass() = + member val MyProperty = "" with get, set + member val MyProperty2 = "" with get, set + member val ABigProperty = "" with get, set + +let c = MyClass(Property = "") + """ + FSharpErrorSeverity.Error + 495 + (7, 17, 7, 25) + "The object constructor 'MyClass' has no argument or settable return property 'Property'. The required signature is new : unit -> MyClass. Maybe you want one of the following:\r\n MyProperty\r\n MyProperty2\r\n ABigProperty" + + + [] + let ``Suggest Generic Type`` () = + CompilerAssert.TypeCheckSingleError + """ +type T = System.Collections.Generic.Dictionary + """ + FSharpErrorSeverity.Error + 39 + (2, 48, 2, 53) + "The type 'int11' is not defined. Maybe you want one of the following:\r\n int16\r\n int16`1\r\n int8\r\n uint16\r\n int" + + + [] + let ``Suggest Methods`` () = + CompilerAssert.TypeCheckSingleError + """ +module Test2 = + type D() = + + static let x = 1 + + member x.Method1() = 10 + + D.Method2() + """ + FSharpErrorSeverity.Error + 39 + (9, 7, 9, 14) + "The field, constructor or member 'Method2' is not defined. Maybe you want one of the following:\r\n Method1" + + + [] + let ``Suggest Modules`` () = + CompilerAssert.TypeCheckSingleError + """ +module Collections = + + let f () = printfn "%s" "Hello" + +open Collectons + """ + FSharpErrorSeverity.Error + 39 + (6, 6, 6, 16) + "The namespace or module 'Collectons' is not defined. Maybe you want one of the following:\r\n Collections" + + + [] + let ``Suggest Namespaces`` () = + CompilerAssert.TypeCheckSingleError + """ +open System.Collectons + """ + FSharpErrorSeverity.Error + 39 + (2, 13, 2, 23) + "The namespace 'Collectons' is not defined." + + + [] + let ``Suggest Record Labels`` () = + CompilerAssert.TypeCheckSingleError + """ +type MyRecord = { Hello: int; World: bool} + +let r = { Hello = 2 ; World = true} + +let x = r.ello + """ + FSharpErrorSeverity.Error + 39 + (6, 11, 6, 15) + "The field, constructor or member 'ello' is not defined. Maybe you want one of the following:\r\n Hello" + + + [] + let ``Suggest Record Type for RequireQualifiedAccess Records`` () = + CompilerAssert.TypeCheckSingleError + """ +[] +type MyRecord = { + Field1: string + Field2: int +} + +let r = { Field1 = "hallo"; Field2 = 1 } + """ + FSharpErrorSeverity.Error + 39 + (8, 11, 8, 17) + "The record label 'Field1' is not defined. Maybe you want one of the following:\r\n MyRecord.Field1" + + + [] + let ``Suggest To Use Indexer`` () = + CompilerAssert.TypeCheckWithErrors + """ +let d = [1,1] |> dict +let y = d[1] + +let z = d[|1|] + +let f() = d +let a = (f())[1] + """ + [| + FSharpErrorSeverity.Error, 3217, (3, 9, 3, 10), "This value is not a function and cannot be applied. Did you intend to access the indexer via d.[index] instead?" + FSharpErrorSeverity.Error, 3, (5, 9, 5, 10), "This value is not a function and cannot be applied." + FSharpErrorSeverity.Error, 3217, (8, 10, 8, 13), "This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.[index] instead?" + |] + + + [] + let ``Suggest Type Parameters`` () = + CompilerAssert.TypeCheckSingleError + """ +[] +type MyClass<'Bar>() = + abstract M<'T> : 'T -> 'T + abstract M2<'T> : 'T -> 'Bar + abstract M3<'T> : 'T -> 'B + """ + FSharpErrorSeverity.Error + 39 + (6, 28, 6, 30) + "The type parameter 'B is not defined." + + + [] + let ``Suggest Types in Module`` () = + CompilerAssert.TypeCheckSingleError + """ +let x : System.Collections.Generic.Lst = ResizeArray() + """ + FSharpErrorSeverity.Error + 39 + (2, 36, 2, 39) + "The type 'Lst' is not defined in 'System.Collections.Generic'. Maybe you want one of the following:\r\n List\r\n IList\r\n List`1" + + [] + let ``Suggest Types in Namespace`` () = + CompilerAssert.TypeCheckSingleError + """ +let x = System.DateTie.MaxValue + """ + FSharpErrorSeverity.Error + 39 + (2, 16, 2, 23) + "The value, constructor, namespace or type 'DateTie' is not defined. Maybe you want one of the following:\r\n DateTime\r\n DateTimeKind\r\n DateTimeOffset\r\n Data" + + + [] + let ``Suggest Union Cases`` () = + CompilerAssert.TypeCheckSingleError + """ +type MyUnion = +| ASimpleCase +| AnotherCase of int + +let u = MyUnion.AntherCase + """ + FSharpErrorSeverity.Error + 39 + (6, 17, 6, 27) + "The field, constructor or member 'AntherCase' is not defined. Maybe you want one of the following:\r\n AnotherCase" + + + [] + let ``Suggest Union Type for RequireQualifiedAccess Unions`` () = + CompilerAssert.TypeCheckSingleError + """ +[] +type MyUnion = +| MyCase1 +| MyCase2 of string + +let x : MyUnion = MyCase1 + """ + FSharpErrorSeverity.Error + 39 + (7, 19, 7, 26) + "The value or constructor 'MyCase1' is not defined. Maybe you want one of the following:\r\n MyUnion.MyCase1" + + + [] + let ``Suggest Unions in PatternMatch`` () = + CompilerAssert.TypeCheckSingleError + """ +[] +type MyUnion = +| Case1 +| Case2 + +let y = MyUnion.Case1 + +let x = + match y with + | MyUnion.Cas1 -> 1 + | _ -> 2 + """ + FSharpErrorSeverity.Error + 39 + (11, 15, 11, 19) + "The field, constructor or member 'Cas1' is not defined. Maybe you want one of the following:\r\n Case1\r\n Case2" \ No newline at end of file diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 9caaea5ac5..be61880350 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -47,6 +47,7 @@ + diff --git a/tests/fsharpqa/Source/Warnings/FieldSuggestion.fs b/tests/fsharpqa/Source/Warnings/FieldSuggestion.fs deleted file mode 100644 index 6931f36f98..0000000000 --- a/tests/fsharpqa/Source/Warnings/FieldSuggestion.fs +++ /dev/null @@ -1,10 +0,0 @@ -// #Warnings -// -//Maybe you want one of the following: -//Name - -type Person = { Name : string; } - -let x = { Person.Names = "Isaac" } - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestArrayModuleFunctions.fs b/tests/fsharpqa/Source/Warnings/SuggestArrayModuleFunctions.fs deleted file mode 100644 index 68f770f09c..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestArrayModuleFunctions.fs +++ /dev/null @@ -1,9 +0,0 @@ -// #Warnings -//The value, constructor, namespace or type 'blt' is not defined. -//Maybe you want one of the following:\s+blit - -let f = - Array.blt - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestAsyncModule.fs b/tests/fsharpqa/Source/Warnings/SuggestAsyncModule.fs deleted file mode 100644 index 75048b4ffd..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestAsyncModule.fs +++ /dev/null @@ -1,9 +0,0 @@ -// #Warnings -// The value, namespace, type or module 'Asnc' is not defined. -//Maybe you want one of the following:\s+Async,?\s+async,?\s+asin - -let f = - Asnc.Sleep 1000 - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestAttributes.fs b/tests/fsharpqa/Source/Warnings/SuggestAttributes.fs deleted file mode 100644 index f4df053a2f..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestAttributes.fs +++ /dev/null @@ -1,13 +0,0 @@ -// #Warnings -//The type 'AbstractClas' is not defined. -//Maybe you want one of the following: -//'AbstractClass -//'AbstractClassAttribute - -[] -type MyClass<'Bar>() = - abstract M<'T> : 'T -> 'T - abstract M2<'T> : 'T -> 'Bar - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickIdentifiers.fs b/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickIdentifiers.fs deleted file mode 100644 index 7edca8f460..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickIdentifiers.fs +++ /dev/null @@ -1,11 +0,0 @@ -// #Warnings -//The value, constructor, namespace or type 'longe name' is not defined. -//Maybe you want one of the following:\s+longer name - -module N = - let ``longer name`` = "hallo" - -let x = N.``longe name`` - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickUnions.fs b/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickUnions.fs deleted file mode 100644 index 20e97c8dd0..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestDoubleBacktickUnions.fs +++ /dev/null @@ -1,14 +0,0 @@ -// #Warnings -//The field, constructor or member 'My Case2' is not defined. -//Maybe you want one of the following:\s+My Case1,?\s+Case2 - - -module N = - type MyUnion = - | ``My Case1`` - | Case2 - - -open N - -let x = N.MyUnion.``My Case2`` \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs b/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs deleted file mode 100644 index 7d7e986084..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestFieldsInCtor.fs +++ /dev/null @@ -1,13 +0,0 @@ -// #Warnings -//The object constructor 'MyClass' has no argument or settable return property 'Property'. -//Maybe you want one of the following: -//MyProperty - -type MyClass() = - member val MyProperty = "" with get, set - member val MyProperty2 = "" with get, set - member val ABigProperty = "" with get, set - -let c = MyClass(Property = "") - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestGenericType.fs b/tests/fsharpqa/Source/Warnings/SuggestGenericType.fs deleted file mode 100644 index 3add97611a..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestGenericType.fs +++ /dev/null @@ -1,9 +0,0 @@ -// #Warnings -//The type 'int11' is not defined -//Maybe you want one of the following: -//int16 -//int - -type T = System.Collections.Generic.Dictionary - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestMethods.fs b/tests/fsharpqa/Source/Warnings/SuggestMethods.fs deleted file mode 100644 index 76b4a0539a..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestMethods.fs +++ /dev/null @@ -1,16 +0,0 @@ -// #Warnings -//The field, constructor or member 'Method2' is not defined. -//Maybe you want one of the following: -//Method1 - -module Test2 = - type D() = - - static let x = 1 - - member x.Method1() = 10 - - - D.Method2() - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestModules.fs b/tests/fsharpqa/Source/Warnings/SuggestModules.fs deleted file mode 100644 index c5026f5059..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestModules.fs +++ /dev/null @@ -1,12 +0,0 @@ -// #Warnings -//The namespace or module 'Collectons' is not defined -//Maybe you want one of the following: -//Collections - -module Collections = - - let f () = printfn "%s" "Hello" - -open Collectons - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestNamespaces.fs b/tests/fsharpqa/Source/Warnings/SuggestNamespaces.fs deleted file mode 100644 index dc469b1641..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestNamespaces.fs +++ /dev/null @@ -1,8 +0,0 @@ -// #Warnings -//The namespace 'Collectons' is not defined -//Maybe you want one of the following: -//Collections - -open System.Collectons - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestRecordLabels.fs b/tests/fsharpqa/Source/Warnings/SuggestRecordLabels.fs deleted file mode 100644 index 724f311d6a..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestRecordLabels.fs +++ /dev/null @@ -1,11 +0,0 @@ -// #Warnings -//The field, constructor or member 'ello' is not defined. -//Maybe you want one of the following:\s+Hello - -type MyRecord = { Hello: int; World: bool} - -let r = { Hello = 2 ; World = true} - -let x = r.ello - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestRecordTypeForRQARecords.fs b/tests/fsharpqa/Source/Warnings/SuggestRecordTypeForRQARecords.fs deleted file mode 100644 index 9cf4b1984e..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestRecordTypeForRQARecords.fs +++ /dev/null @@ -1,13 +0,0 @@ -// #Warnings -//The record label 'Field1' is not defined. -//Maybe you want one of the following:\s+MyRecord.Field1 - -[] -type MyRecord = { - Field1: string - Field2: int -} - -let r = { Field1 = "hallo"; Field2 = 1 } - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestToUseIndexer.fs b/tests/fsharpqa/Source/Warnings/SuggestToUseIndexer.fs deleted file mode 100644 index 6ca91a819f..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestToUseIndexer.fs +++ /dev/null @@ -1,14 +0,0 @@ -// #Warnings -//This value is not a function and cannot be applied. Did you intend to access the indexer via d.\[index\] instead? -//This value is not a function and cannot be applied.$ -//This expression is not a function and cannot be applied. Did you intend to access the indexer via expr.\[index\] instead? - -let d = [1,1] |> dict -let y = d[1] - -let z = d[|1|] - -let f() = d -let a = (f())[1] - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestTypeParameters.fs b/tests/fsharpqa/Source/Warnings/SuggestTypeParameters.fs deleted file mode 100644 index 47b15597e1..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestTypeParameters.fs +++ /dev/null @@ -1,14 +0,0 @@ -// #Warnings -//The type parameter 'B is not defined -//Maybe you want one of the following: -//'Bar -//'T - -[] -type MyClass<'Bar>() = - abstract M<'T> : 'T -> 'T - abstract M2<'T> : 'T -> 'Bar - abstract M3<'T> : 'T -> 'B - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestTypesInModule.fs b/tests/fsharpqa/Source/Warnings/SuggestTypesInModule.fs deleted file mode 100644 index 1c5f50ebd6..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestTypesInModule.fs +++ /dev/null @@ -1,8 +0,0 @@ -// #Warnings -//The type 'Lst' is not defined in 'System.Collections.Generic' -//Maybe you want one of the following: -//List - -let x : System.Collections.Generic.Lst = ResizeArray() - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespace.fs b/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespace.fs deleted file mode 100644 index 978b1c559b..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespace.fs +++ /dev/null @@ -1,10 +0,0 @@ -// #Warnings -//The value, constructor, namespace or type 'DateTie' is not defined -//Maybe you want one of the following: -//DateTime -//DateTimeKind -//DateTimeOffset - -let x = System.DateTie.MaxValue - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespaceVS.fs b/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespaceVS.fs deleted file mode 100644 index 675e799ede..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestTypesInNamespaceVS.fs +++ /dev/null @@ -1,7 +0,0 @@ -// #Warnings -//The value, constructor, namespace or type 'DateTie' is not defined -//Maybe you want one of the following:\s+DateTime,?\s+DateTimeKind,?\s+DateTimeOffset - -let x = System.DateTie.MaxValue - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestUnionCases.fs b/tests/fsharpqa/Source/Warnings/SuggestUnionCases.fs deleted file mode 100644 index 4079dbe84b..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestUnionCases.fs +++ /dev/null @@ -1,12 +0,0 @@ -// #Warnings -//The field, constructor or member 'AntherCase' is not defined. -//Maybe you want one of the following:\s+AnotherCase - -type MyUnion = -| ASimpleCase -| AnotherCase of int - -let u = MyUnion.AntherCase - - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestUnionTypeForRQAUnions.fs b/tests/fsharpqa/Source/Warnings/SuggestUnionTypeForRQAUnions.fs deleted file mode 100644 index c8e71aa57a..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestUnionTypeForRQAUnions.fs +++ /dev/null @@ -1,12 +0,0 @@ -// #Warnings -//The value or constructor 'MyCase1' is not defined. -//Maybe you want one of the following:\s+MyUnion.MyCase1 - -[] -type MyUnion = -| MyCase1 -| MyCase2 of string - -let x : MyUnion = MyCase1 - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/SuggestUnionsInPatternMatch.fs b/tests/fsharpqa/Source/Warnings/SuggestUnionsInPatternMatch.fs deleted file mode 100644 index 3d4264c750..0000000000 --- a/tests/fsharpqa/Source/Warnings/SuggestUnionsInPatternMatch.fs +++ /dev/null @@ -1,17 +0,0 @@ -// #Warnings -//The field, constructor or member 'Cas1' is not defined. -//Maybe you want one of the following:\s+Case1 - -[] -type MyUnion = -| Case1 -| Case2 - -let y = MyUnion.Case1 - -let x = - match y with - | MyUnion.Cas1 -> 1 - | _ -> 2 - -exit 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/env.lst b/tests/fsharpqa/Source/Warnings/env.lst index fd3de1f961..4ec3bc285c 100644 --- a/tests/fsharpqa/Source/Warnings/env.lst +++ b/tests/fsharpqa/Source/Warnings/env.lst @@ -1,27 +1,6 @@ SOURCE=WrongNumericLiteral.fs # WrongNumericLiteral.fs SOURCE=FS0988AtEndOfFile.fs # FS0988AtEndOfFile.fs SOURCE=DontWarnExternalFunctionAsUnused.fs SCFLAGS="--warnon:1182 --warnaserror+" # DontWarnExternalFunctionAsUnused.fs - SOURCE=SuggestTypesInModule.fs # SuggestTypesInModule.fs - SOURCE=SuggestGenericType.fs # SuggestGenericType.fs - SOURCE=SuggestTypeParameters.fs # SuggestTypeParameters.fs - SOURCE=SuggestNamespaces.fs # SuggestNamespaces.fs - SOURCE=SuggestModules.fs # SuggestModules.fs - SOURCE=SuggestMethods.fs # SuggestMethods.fs - SOURCE=SuggestAttributes.fs # SuggestAttributes.fs - SOURCE=SuggestUnionsInPatternMatch.fs SCFLAGS="--vserrors" # SuggestUnionsInPatternMatch.fs - SOURCE=SuggestUnionTypeForRQAUnions.fs SCFLAGS="--vserrors" # SuggestUnionTypeForRQAUnions.fs - SOURCE=SuggestRecordTypeForRQARecords.fs SCFLAGS="--vserrors" # SuggestRecordTypeForRQARecords.fs - SOURCE=SuggestRecordLabels.fs SCFLAGS="--vserrors" # SuggestRecordLabels.fs - SOURCE=SuggestUnionCases.fs SCFLAGS="--vserrors" # SuggestUnionCases.fs - SOURCE=SuggestArrayModuleFunctions.fs SCFLAGS="--vserrors" # SuggestArrayModuleFunctions.fs - SOURCE=SuggestTypesInNamespace.fs # SuggestTypesInNamespace.fs - SOURCE=SuggestTypesInNamespaceVS.fs SCFLAGS="--vserrors" # SuggestTypesInNamespaceVS.fs - SOURCE=SuggestAsyncModule.fs SCFLAGS="--vserrors" # SuggestAsyncModule.fs - SOURCE=SuggestDoubleBacktickIdentifiers.fs SCFLAGS="--vserrors" # SuggestDoubleBacktickIdentifiers.fs - SOURCE=SuggestDoubleBacktickUnions.fs SCFLAGS="--vserrors" # SuggestDoubleBacktickUnions.fs SOURCE=MissingExpressionAfterLet.fs # MissingExpressionAfterLet.fs - SOURCE=SuggestFieldsInCtor.fs # SuggestFieldsInCtor.fs - SOURCE=FieldSuggestion.fs # FieldSuggestion.fs - SOURCE=SuggestToUseIndexer.fs # SuggestToUseIndexer.fs SOURCE=Repro1548.fs SCFLAGS="-r:Repro1548.dll" # Repro1548.fs SOURCE=ModuleAbbreviationsArePrivate.fs From 73e4f1836e67468715f91437ec8fbc6fef309bae Mon Sep 17 00:00:00 2001 From: Steffen Forkmann Date: Fri, 2 Aug 2019 18:09:57 +0200 Subject: [PATCH 007/146] "Dont warn external function as unused" test moved (#7341) --- .../ErrorMessages/WarnExpressionTests.fs | 25 +++++++++++++++++++ .../DontWarnExternalFunctionAsUnused.fs | 19 -------------- tests/fsharpqa/Source/Warnings/env.lst | 1 - 3 files changed, 25 insertions(+), 20 deletions(-) delete mode 100644 tests/fsharpqa/Source/Warnings/DontWarnExternalFunctionAsUnused.fs diff --git a/tests/fsharp/Compiler/ErrorMessages/WarnExpressionTests.fs b/tests/fsharp/Compiler/ErrorMessages/WarnExpressionTests.fs index 557aa81a4d..4ed147e916 100644 --- a/tests/fsharp/Compiler/ErrorMessages/WarnExpressionTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/WarnExpressionTests.fs @@ -206,3 +206,28 @@ let changeProperty() = 20 (10, 5, 10, 23) "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to set a value to a property, then use the '<-' operator e.g. 'x.Property2 <- expression'." + + + [] + let ``Dont warn external function as unused``() = + CompilerAssert.Pass + """ +open System +open System.Runtime.InteropServices + +module Test = + + [] + extern int32 ExtractIconEx(string szFileName, int nIconIndex,IntPtr[] phiconLarge, IntPtr[] phiconSmall,uint32 nIcons) + + [] + extern int DestroyIcon(IntPtr hIcon) + +[] +let main _argv = + let _ = Test.DestroyIcon IntPtr.Zero + + let _ = Test.ExtractIconEx("", 0, [| |], [| |], 0u) + + 0 + """ diff --git a/tests/fsharpqa/Source/Warnings/DontWarnExternalFunctionAsUnused.fs b/tests/fsharpqa/Source/Warnings/DontWarnExternalFunctionAsUnused.fs deleted file mode 100644 index 5465fc836b..0000000000 --- a/tests/fsharpqa/Source/Warnings/DontWarnExternalFunctionAsUnused.fs +++ /dev/null @@ -1,19 +0,0 @@ -// -open System -open System.Runtime.InteropServices - -module Test = - - [] - extern int32 ExtractIconEx(string szFileName, int nIconIndex,IntPtr[] phiconLarge, IntPtr[] phiconSmall,uint32 nIcons) - - [] - extern int DestroyIcon(IntPtr hIcon) - -[] -let main _argv = - let _ = Test.DestroyIcon IntPtr.Zero - - let _ = Test.ExtractIconEx("", 0, [| |], [| |], 0u) - - 0 \ No newline at end of file diff --git a/tests/fsharpqa/Source/Warnings/env.lst b/tests/fsharpqa/Source/Warnings/env.lst index 4ec3bc285c..4d6ba629e1 100644 --- a/tests/fsharpqa/Source/Warnings/env.lst +++ b/tests/fsharpqa/Source/Warnings/env.lst @@ -1,6 +1,5 @@ SOURCE=WrongNumericLiteral.fs # WrongNumericLiteral.fs SOURCE=FS0988AtEndOfFile.fs # FS0988AtEndOfFile.fs - SOURCE=DontWarnExternalFunctionAsUnused.fs SCFLAGS="--warnon:1182 --warnaserror+" # DontWarnExternalFunctionAsUnused.fs SOURCE=MissingExpressionAfterLet.fs # MissingExpressionAfterLet.fs SOURCE=Repro1548.fs SCFLAGS="-r:Repro1548.dll" # Repro1548.fs SOURCE=ModuleAbbreviationsArePrivate.fs From 4286c6aa94072deea487712891234f3445106ccc Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2019 11:43:00 -0700 Subject: [PATCH 008/146] Update dependencies from https://github.com/dotnet/arcade build 20190801.23 (#7342) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19401.23 --- eng/Version.Details.xml | 4 ++-- .../templates/post-build/channels/internal-servicing.yml | 6 +++--- .../templates/post-build/channels/public-dev-release.yml | 6 +++--- .../templates/post-build/channels/public-release.yml | 6 +++--- .../post-build/channels/public-validation-release.yml | 2 +- eng/common/tools.ps1 | 9 ++++++++- eng/common/tools.sh | 6 +++++- global.json | 2 +- 8 files changed, 26 insertions(+), 15 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e94e911d91..ba0cbcb94f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 48787606d809963cc800151cbfbefe0a74ae74b4 + 941d6497356e00ea6b2bc35a22a67f4ecf988fd6 diff --git a/eng/common/templates/post-build/channels/internal-servicing.yml b/eng/common/templates/post-build/channels/internal-servicing.yml index 12fd2b4653..dc065ab308 100644 --- a/eng/common/templates/post-build/channels/internal-servicing.yml +++ b/eng/common/templates/post-build/channels/internal-servicing.yml @@ -13,7 +13,7 @@ stages: - job: displayName: Symbol Publishing dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.InternalServicing_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) variables: - group: DotNet-Symbol-Server-Pats pool: @@ -46,7 +46,7 @@ stages: value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.InternalServicing_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: @@ -126,7 +126,7 @@ stages: - job: displayName: Symbol Availability dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.InternalServicing_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index b0f085b142..771dcf4ef8 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -13,7 +13,7 @@ stages: - job: displayName: Symbol Publishing dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_30_Channel_Id)) variables: - group: DotNet-Symbol-Server-Pats pool: @@ -46,7 +46,7 @@ stages: value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: @@ -123,7 +123,7 @@ stages: - job: displayName: Symbol Availability dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicDevRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/public-release.yml index 4c63fb43f0..00108bd3f8 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/public-release.yml @@ -13,7 +13,7 @@ stages: - job: displayName: Symbol Publishing dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) variables: - group: DotNet-Symbol-Server-Pats pool: @@ -46,7 +46,7 @@ stages: value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: @@ -126,7 +126,7 @@ stages: - job: displayName: Symbol Availability dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index 1089ac5fa6..f64184da9f 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -17,7 +17,7 @@ stages: value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] - name: IsStableBuild value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], variables.PublicValidationRelease_30_Channel_Id) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicValidationRelease_30_Channel_Id)) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 8fe2b11ad2..9c12b1b4fd 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -39,6 +39,10 @@ # installed on the machine instead of downloading one. [bool]$useInstalledDotNetCli = if (Test-Path variable:useInstalledDotNetCli) { $useInstalledDotNetCli } else { $true } +# Enable repos to use a particular version of the on-line dotnet-install scripts. +# default URL: https://dot.net/v1/dotnet-install.ps1 +[string]$dotnetInstallScriptVersion = if (Test-Path variable:dotnetInstallScriptVersion) { $dotnetInstallScriptVersion } else { "v1" } + # True to use global NuGet cache instead of restoring packages to repository-local directory. [bool]$useGlobalNuGetCache = if (Test-Path variable:useGlobalNuGetCache) { $useGlobalNuGetCache } else { !$ci } @@ -159,7 +163,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot - Invoke-WebRequest "https://dot.net/v1/dotnet-install.ps1" -OutFile $installScript + Invoke-WebRequest "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" -OutFile $installScript } return $installScript @@ -518,6 +522,9 @@ function MSBuild-Core() { if ($warnAsError) { $cmdArgs += " /warnaserror /p:TreatWarningsAsErrors=true" } + else { + $cmdArgs += " /p:TreatWarningsAsErrors=false" + } foreach ($arg in $args) { if ($arg -ne $null -and $arg.Trim() -ne "") { diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 738bb5669d..3af9be6157 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -45,6 +45,10 @@ warn_as_error=${warn_as_error:-true} # installed on the machine instead of downloading one. use_installed_dotnet_cli=${use_installed_dotnet_cli:-true} +# Enable repos to use a particular version of the on-line dotnet-install scripts. +# default URL: https://dot.net/v1/dotnet-install.sh +dotnetInstallScriptVersion=${dotnetInstallScriptVersion:-'v1'} + # True to use global NuGet cache instead of restoring packages to repository-local directory. if [[ "$ci" == true ]]; then use_global_nuget_cache=${use_global_nuget_cache:-false} @@ -195,7 +199,7 @@ function InstallDotNet { function GetDotNetInstallScript { local root=$1 local install_script="$root/dotnet-install.sh" - local install_script_url="https://dot.net/v1/dotnet-install.sh" + local install_script_url="https://dot.net/$dotnetInstallScriptVersion/dotnet-install.sh" if [[ ! -a "$install_script" ]]; then mkdir -p "$root" diff --git a/global.json b/global.json index 0a08d8518b..f4f794adc6 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19381.19", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19401.23", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 2990429bea8a41248aba76d0fec76b9e947c11ee Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 3 Aug 2019 11:31:01 -0700 Subject: [PATCH 009/146] Update dependencies from https://github.com/dotnet/arcade build 20190802.16 (#7351) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19402.16 --- eng/Version.Details.xml | 4 +- .../post-build/channels/netcore-dev-5.yml | 148 ++++++++++++++++++ .../channels/netcore-tools-latest.yml | 148 ++++++++++++++++++ .../templates/post-build/common-variables.yml | 8 + .../templates/post-build/darc-gather-drop.yml | 2 +- .../templates/post-build/post-build.yml | 8 + .../templates/post-build/promote-build.yml | 2 +- global.json | 2 +- 8 files changed, 317 insertions(+), 5 deletions(-) create mode 100644 eng/common/templates/post-build/channels/netcore-dev-5.yml create mode 100644 eng/common/templates/post-build/channels/netcore-tools-latest.yml diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ba0cbcb94f..fffe234f24 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 941d6497356e00ea6b2bc35a22a67f4ecf988fd6 + d8457f6ba527aef165ff6fb0aded44bf8123ce83 diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml new file mode 100644 index 0000000000..f2b0cfb269 --- /dev/null +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -0,0 +1,148 @@ +parameters: + enableSymbolValidation: true + +stages: +- stage: NetCore_Dev5_Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: .NET Core 5 Dev Channel + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Artifacts + inputs: + downloadType: specific files + matchingPattern: "*Artifacts*" + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:Configuration=Release + + - job: + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - group: DotNet-Blob-Feed + - group: AzureDevOps-Artifact-Feeds-Pats + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Add Assets Location + env: + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ChannelId=$(NetCore_5_Dev_Channel_Id) + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + + - task: NuGetCommand@2 + displayName: Publish Packages to AzDO Feed + condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') + inputs: + command: push + vstsFeed: $(AzDoFeedName) + packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg + publishVstsFeed: $(AzDoFeedName) + + - task: PowerShell@2 + displayName: Publish Blobs to AzDO Feed + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 + arguments: -FeedName $(AzDoFeedName) + -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) + enabled: false + + +- stage: NetCore_Dev5_PublishValidation + displayName: Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: + - job: + displayName: Symbol Availability + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Check Symbol Availability + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) + + - template: ../darc-gather-drop.yml + parameters: + ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml new file mode 100644 index 0000000000..fd6c09b227 --- /dev/null +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -0,0 +1,148 @@ +parameters: + enableSymbolValidation: true + +stages: +- stage: NetCore_Tools_Latest_Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: .NET Tools - Latest + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Artifacts + inputs: + downloadType: specific files + matchingPattern: "*Artifacts*" + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:Configuration=Release + + - job: + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - group: DotNet-Blob-Feed + - group: AzureDevOps-Artifact-Feeds-Pats + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Add Assets Location + env: + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ChannelId=$(NetCore_Tools_Latest_Channel_Id) + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + + - task: NuGetCommand@2 + displayName: Publish Packages to AzDO Feed + condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') + inputs: + command: push + vstsFeed: $(AzDoFeedName) + packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg + publishVstsFeed: $(AzDoFeedName) + + - task: PowerShell@2 + displayName: Publish Blobs to AzDO Feed + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 + arguments: -FeedName $(AzDoFeedName) + -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) + enabled: false + + +- stage: NetCore_Tools_Latest_PublishValidation + displayName: Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: + - job: + displayName: Symbol Availability + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Check Symbol Availability + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) + + - template: ../darc-gather-drop.yml + parameters: + ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index bd0bc5e4da..52a74487fd 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -5,10 +5,18 @@ variables: - name: PublicDevRelease_30_Channel_Id value: 3 + # .NET Core 5 Dev + - name: NetCore_5_Dev_Channel_Id + value: 131 + # .NET Tools - Validation - name: PublicValidationRelease_30_Channel_Id value: 9 + # .NET Tools - Latest + - name: NetCore_Tools_Latest_Channel_Id + value: 2 + # .NET Core 3.0 Internal Servicing - name: InternalServicing_30_Channel_Id value: 184 diff --git a/eng/common/templates/post-build/darc-gather-drop.yml b/eng/common/templates/post-build/darc-gather-drop.yml index f4e3bfcf5c..3268ccaa55 100644 --- a/eng/common/templates/post-build/darc-gather-drop.yml +++ b/eng/common/templates/post-build/darc-gather-drop.yml @@ -5,7 +5,7 @@ jobs: - job: gatherDrop displayName: Gather Drop dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], ${{ parameters.ChannelId }}) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.ChannelId }})) variables: - name: BARBuildId value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 0872db4ed9..33db50ce26 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -83,10 +83,18 @@ stages: parameters: additionalParameters: ${{ parameters.SDLValidationParameters.params }} +- template: \eng\common\templates\post-build\channels\netcore-dev-5.yml + parameters: + enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + - template: \eng\common\templates\post-build\channels\public-dev-release.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} +- template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml + parameters: + enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + - template: \eng\common\templates\post-build\channels\public-validation-release.yml - template: \eng\common\templates\post-build\channels\public-release.yml diff --git a/eng/common/templates/post-build/promote-build.yml b/eng/common/templates/post-build/promote-build.yml index 9387c583b3..6b479c3b82 100644 --- a/eng/common/templates/post-build/promote-build.yml +++ b/eng/common/templates/post-build/promote-build.yml @@ -5,7 +5,7 @@ jobs: - job: displayName: Promote Build dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], ${{ parameters.ChannelId }}) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', ${{ parameters.ChannelId }})) variables: - name: BARBuildId value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] diff --git a/global.json b/global.json index f4f794adc6..6897ff9d70 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19401.23", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19402.16", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 5a387b6058ebf591eda3ae4e385f59b4e4d3488a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2019 11:18:28 -0700 Subject: [PATCH 010/146] [master] Update dependencies from dotnet/arcade (#7355) * Update dependencies from https://github.com/dotnet/arcade build 20190803.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19403.1 * Update dependencies from https://github.com/dotnet/arcade build 20190804.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19404.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index fffe234f24..813969ce5f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - d8457f6ba527aef165ff6fb0aded44bf8123ce83 + b1c2f33f0cef32d1df6e7f388017fd6761d3fcad diff --git a/global.json b/global.json index 6897ff9d70..8ffd380808 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19402.16", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19404.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From fc75bb2ea1a33055a0db880668bf008cdb461b21 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2019 09:09:32 -0700 Subject: [PATCH 011/146] Update dependencies from https://github.com/dotnet/arcade build 20190805.9 (#7360) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19405.9 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 813969ce5f..c9996fa71f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - b1c2f33f0cef32d1df6e7f388017fd6761d3fcad + 44ccf0f527de559b07f9ad955a47ec97f03f2146 diff --git a/global.json b/global.json index 8ffd380808..f9f09157ec 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19404.1", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19405.9", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 87cd2df119bbbdb94b79f5f0b0800e170bb9983e Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 6 Aug 2019 10:56:58 -0700 Subject: [PATCH 012/146] Cambridge test suite - minor issues (#7353) * Fix test case race * Tell test suite to use netcore2.1 and compilerassert to use the required framework version * netcore3 the lot --- tests/fsharp/Compiler/CompilerAssert.fs | 4 ++-- tests/fsharp/single-test.fs | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index ccf8f0bd97..f1d4f38014 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -139,10 +139,10 @@ let main argv = 0""" File.WriteAllText (runtimeConfigFilePath, """ { "runtimeOptions": { - "tfm": "netcoreapp2.1", + "tfm": "netcoreapp3.0", "framework": { "name": "Microsoft.NETCore.App", - "version": "2.1.0" + "version": "3.0.0-preview6-27804-01" } } } diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs index 26b257d944..7a5b50f385 100644 --- a/tests/fsharp/single-test.fs +++ b/tests/fsharp/single-test.fs @@ -3,6 +3,7 @@ open System open System.IO open System.Diagnostics +open System.Threading open NUnit.Framework open TestFramework @@ -93,7 +94,7 @@ let generateOverrides = // Arguments: // pc = ProjectConfiguration // outputType = OutputType.Exe, OutputType.Library or OutputType.Script -// targetFramework optimize = "net472" OR NETCOREAPP2.1 etc ... +// targetFramework optimize = "net472" OR NETCOREAPP3.0 etc ... // optimize = true or false // configuration = "Release" or "Debug" // @@ -214,12 +215,12 @@ let singleTestBuildAndRunCore cfg copyFiles p = let extraSources = ["testlib.fsi";"testlib.fs";"test.mli";"test.ml";"test.fsi";"test.fs";"test2.fsi";"test2.fs";"test.fsx";"test2.fsx"] let utilitySources = [__SOURCE_DIRECTORY__ ++ "coreclr_utilities.fs"] let referenceItems = if String.IsNullOrEmpty(copyFiles) then [] else [copyFiles] - let framework = "netcoreapp2.0" + let framework = "netcoreapp3.0" // Arguments: // outputType = OutputType.Exe, OutputType.Library or OutputType.Script // compilerType = "coreclr" or "net40" - // targetFramework optimize = "net472" OR NETCOREAPP2.1 etc ... + // targetFramework optimize = "net472" OR NETCOREAPP3.0 etc ... // optimize = true or false let executeSingleTestBuildAndRun outputType compilerType targetFramework optimize = let mutable result = false @@ -227,7 +228,7 @@ let singleTestBuildAndRunCore cfg copyFiles p = let mutable result = "" lock lockObj <| (fun () -> let rec loop () = - let dir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()) + let dir = Path.Combine(Path.GetTempPath(), "FSharp.Cambridge", Path.GetRandomFileName() + "."+ Thread.CurrentThread.ManagedThreadId.ToString()) if Directory.Exists(dir) then loop () else @@ -292,8 +293,8 @@ let singleTestBuildAndRunCore cfg copyFiles p = printfn "Filename: %s" projectFileName match p with - | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp2.0" true - | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "netcoreapp2.0" true + | FSC_CORECLR -> executeSingleTestBuildAndRun OutputType.Exe "coreclr" "netcoreapp3.0" true + | FSI_CORECLR -> executeSingleTestBuildAndRun OutputType.Script "coreclr" "netcoreapp3.0" true #if !FSHARP_SUITE_DRIVES_CORECLR_TESTS | FSC_OPT_PLUS_DEBUG -> executeSingleTestBuildAndRun OutputType.Exe "net40" "net472" true From ea485070ac944c801956333bdbf7b3da85c3cbca Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2019 09:27:16 -0700 Subject: [PATCH 013/146] Update dependencies from https://github.com/dotnet/arcade build 20190806.7 (#7364) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19406.7 --- eng/Version.Details.xml | 4 ++-- eng/common/templates/post-build/post-build.yml | 1 + global.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index c9996fa71f..7e04a39de9 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 44ccf0f527de559b07f9ad955a47ec97f03f2146 + c155e609f88491128e1a66d09f413062f3344d4b diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 33db50ce26..aba0b0fcaf 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -52,6 +52,7 @@ stages: filePath: eng\common\sdk-task.ps1 arguments: -task SigningValidation -restore -msbuildEngine dotnet /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' + /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' /p:Configuration=Release - ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}: diff --git a/global.json b/global.json index f9f09157ec..c6130250f1 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19405.9", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19406.7", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 6a648d8bceb011000b1a7c7151af227b1347c5c8 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 8 Aug 2019 05:28:14 +0300 Subject: [PATCH 014/146] Make DoesIdentifierNeedQuotation public (#7365) --- src/fsharp/lexhelp.fs | 2 +- src/fsharp/lexhelp.fsi | 1 + src/fsharp/service/ServiceLexing.fs | 1 + src/fsharp/service/ServiceLexing.fsi | 3 +++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index fb66ac5f85..6a9a6430cb 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -351,7 +351,7 @@ module Keywords = | _ -> IdentifierToken args lexbuf s - let inline private DoesIdentifierNeedQuotation (s : string) : bool = + let DoesIdentifierNeedQuotation (s : string) : bool = not (String.forall IsIdentifierPartCharacter s) // if it has funky chars || s.Length > 0 && (not(IsIdentifierFirstCharacter s.[0])) // or if it starts with a non-(letter-or-underscore) || keywordTable.ContainsKey s // or if it's a language keyword like "type" diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi index 0ccb18d0db..f75ecd392d 100644 --- a/src/fsharp/lexhelp.fsi +++ b/src/fsharp/lexhelp.fsi @@ -69,6 +69,7 @@ exception IndentationProblem of string * Range.range module Keywords = val KeywordOrIdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token val IdentifierToken : lexargs -> UnicodeLexing.Lexbuf -> string -> Parser.token + val DoesIdentifierNeedQuotation : string -> bool val QuoteIdentifierIfNeeded : string -> string val NormalizeIdentifierBackticks : string -> string val keywordNames : string list diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index a03c1deeff..b59dad3586 100644 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -784,6 +784,7 @@ type FSharpSourceTokenizer(defineConstants: string list, filename: string option module Keywords = open FSharp.Compiler.Lexhelp.Keywords + let DoesIdentifierNeedQuotation s = DoesIdentifierNeedQuotation s let QuoteIdentifierIfNeeded s = QuoteIdentifierIfNeeded s let NormalizeIdentifierBackticks s = NormalizeIdentifierBackticks s let KeywordsWithDescription = keywordsWithDescription diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 84fa2e571a..85e18f171c 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -243,6 +243,9 @@ module internal TestExpose = val TokenInfo : Parser.token -> (FSharpTokenColorKind * FSharpTokenCharKind * FSharpTokenTriggerClass) module Keywords = + /// Checks if adding backticks to identifier is needed. + val DoesIdentifierNeedQuotation : string -> bool + /// Add backticks if the identifier is a keyword. val QuoteIdentifierIfNeeded : string -> string From f24310da37e6375f88a534abf94e0561bc59b42a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2019 09:01:15 -0700 Subject: [PATCH 015/146] Update dependencies from https://github.com/dotnet/arcade build 20190807.9 (#7368) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19407.9 --- eng/Version.Details.xml | 4 ++-- eng/common/templates/job/execute-sdl.yml | 2 ++ global.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7e04a39de9..7f2a151da6 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c155e609f88491128e1a66d09f413062f3344d4b + 77597ba7f484bef24368d966b7fe91fe38ec973b diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index f657a4dc91..91621cf88f 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -10,6 +10,8 @@ jobs: displayName: Run SDL tool variables: - group: DotNet-VSTS-Bot + pool: + name: Hosted VS2017 steps: - checkout: self clean: true diff --git a/global.json b/global.json index c6130250f1..914aa37a7d 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19406.7", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19407.9", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 5f35d4e653d39bf5a5d8a18ac576f97eabe6c368 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 8 Aug 2019 14:35:19 -0700 Subject: [PATCH 016/146] update build definition to use stages (#7361) * update build definition to use stages * disable arcade NuGet package validation --- .vsts-signed.yaml | 253 +++++++++++--------- azure-pipelines.yml | 552 +++++++++++++++++++++++--------------------- 2 files changed, 423 insertions(+), 382 deletions(-) diff --git a/.vsts-signed.yaml b/.vsts-signed.yaml index ed30cb74ef..13afde5aab 100644 --- a/.vsts-signed.yaml +++ b/.vsts-signed.yaml @@ -11,117 +11,144 @@ variables: #- name: SkipTests # defaultValue: false -jobs: -- job: Full_Signed - pool: - name: VSEng-MicroBuildVS2019 - timeoutInMinutes: 300 - variables: - BuildConfiguration: 'Release' - steps: - - # Install Signing Plugin - - task: ms-vseng.MicroBuildTasks.30666190-6959-11e5-9f96-f56098202fef.MicroBuildSigningPlugin@1 - displayName: Install Signing Plugin - inputs: - signType: real - esrpSigning: true - condition: and(succeeded(), ne(variables['SignType'], '')) - - # Build - - script: eng\CIBuild.cmd - -configuration $(BuildConfiguration) - -testAll - -officialSkipTests $(SkipTests) - /p:OfficialBuildId=$(BUILD.BUILDNUMBER) - /p:VisualStudioDropName=$(VisualStudioDropName) - /p:DotNetSignType=$(SignType) - /p:DotNetPublishToBlobFeed=true - /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) - /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json - /p:PublishToSymbolServer=true - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - displayName: Build - - # Publish logs - - task: PublishBuildArtifacts@1 - displayName: Publish Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\log\$(BuildConfiguration)' - ArtifactName: 'Build Diagnostic Files' - publishLocation: Container - continueOnError: true - condition: succeededOrFailed() - - # Publish test results - - task: PublishBuildArtifacts@1 - displayName: Publish Test Results - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults' - ArtifactName: 'Test Results' - publishLocation: Container - continueOnError: true - condition: and(succeededOrFailed(), ne(variables['SkipTests'], 'true')) - - # Upload VSTS Drop - - task: ms-vseng.MicroBuildTasks.4305a8de-ba66-4d8b-b2d1-0dc4ecbbf5e8.MicroBuildUploadVstsDropFolder@1 - displayName: Upload VSTS Drop - inputs: - DropName: $(VisualStudioDropName) - DropFolder: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\Insertion' - condition: succeeded() - - # Publish an artifact that the RoslynInsertionTool is able to find by its name. - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact VSSetup - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\Insertion' - ArtifactName: 'VSSetup' - condition: succeeded() - - # Archive NuGet packages to DevOps. - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Packages - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(BuildConfiguration)' - ArtifactName: 'Packages' - condition: succeeded() - - # Publish nightly package to ADO - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Nightly - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\VisualFSharpFull.vsix' - ArtifactName: 'Nightly' - condition: succeeded() - - # Package publish - - task: PublishBuildArtifacts@1 - displayName: Push Asset Manifests - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(BuildConfiguration)/AssetManifest' - ArtifactName: AssetManifests - continueOnError: true - condition: succeeded() - - # Publish native PDBs for archiving - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Symbols - inputs: - PathtoPublish: '$(Build.SourcesDirectory)/artifacts/SymStore/$(BuildConfiguration)' - ArtifactName: NativeSymbols - condition: succeeded() - - # Execute cleanup tasks - - task: ms-vseng.MicroBuildTasks.521a94ea-9e68-468a-8167-6dcf361ea776.MicroBuildCleanup@1 - displayName: Execute cleanup tasks - condition: succeededOrFailed() - -- template: /eng/common/templates/job/publish-build-assets.yml - parameters: - dependsOn: - - Full_Signed +stages: +- stage: build + displayName: Build + + jobs: + - job: Full_Signed pool: - vmImage: windows-2019 - enablePublishBuildArtifacts: true + name: VSEng-MicroBuildVS2019 + timeoutInMinutes: 300 + variables: + BuildConfiguration: 'Release' + steps: + + # Install Signing Plugin + - task: ms-vseng.MicroBuildTasks.30666190-6959-11e5-9f96-f56098202fef.MicroBuildSigningPlugin@1 + displayName: Install Signing Plugin + inputs: + signType: real + esrpSigning: true + condition: and(succeeded(), ne(variables['SignType'], '')) + + # Build + - script: eng\CIBuild.cmd + -configuration $(BuildConfiguration) + -testAll + -officialSkipTests $(SkipTests) + /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + /p:VisualStudioDropName=$(VisualStudioDropName) + /p:DotNetSignType=$(SignType) + /p:DotNetPublishToBlobFeed=true + /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + /p:PublishToSymbolServer=true + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + displayName: Build + + # Publish logs + - task: PublishBuildArtifacts@1 + displayName: Publish Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\log\$(BuildConfiguration)' + ArtifactName: 'Build Diagnostic Files' + publishLocation: Container + continueOnError: true + condition: succeededOrFailed() + + # Publish test results + - task: PublishBuildArtifacts@1 + displayName: Publish Test Results + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults' + ArtifactName: 'Test Results' + publishLocation: Container + continueOnError: true + condition: and(succeededOrFailed(), ne(variables['SkipTests'], 'true')) + + # Upload VSTS Drop + - task: ms-vseng.MicroBuildTasks.4305a8de-ba66-4d8b-b2d1-0dc4ecbbf5e8.MicroBuildUploadVstsDropFolder@1 + displayName: Upload VSTS Drop + inputs: + DropName: $(VisualStudioDropName) + DropFolder: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\Insertion' + condition: succeeded() + + # Publish an artifact that the RoslynInsertionTool is able to find by its name. + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact VSSetup + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\Insertion' + ArtifactName: 'VSSetup' + condition: succeeded() + + # Archive NuGet packages to DevOps. + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Packages + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(BuildConfiguration)' + ArtifactName: 'Packages' + condition: succeeded() + + # Publish nightly package to ADO + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Nightly + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(BuildConfiguration)\VisualFSharpFull.vsix' + ArtifactName: 'Nightly' + condition: succeeded() + + # Package publish + - task: PublishBuildArtifacts@1 + displayName: Push Asset Manifests + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/log/$(BuildConfiguration)/AssetManifest' + ArtifactName: AssetManifests + continueOnError: true + condition: succeeded() + + # Publish PackageArtifacts for Arcade verification + - task: PublishBuildArtifacts@1 + displayName: Publish PackageArtifacts + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(BuildConfiguration)\Shipping' + ArtifactName: 'PackageArtifacts' + condition: succeeded() + + # Publish BlobArtifacts for Arcade verification + - task: PublishBuildArtifacts@1 + displayName: Publish BlobArtifacts + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(BuildConfiguration)\Shipping' + ArtifactName: 'BlobArtifacts' + condition: succeeded() + + # Publish native PDBs for archiving + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Symbols + inputs: + PathtoPublish: '$(Build.SourcesDirectory)/artifacts/SymStore/$(BuildConfiguration)' + ArtifactName: NativeSymbols + condition: succeeded() + + # Execute cleanup tasks + - task: ms-vseng.MicroBuildTasks.521a94ea-9e68-468a-8167-6dcf361ea776.MicroBuildCleanup@1 + displayName: Execute cleanup tasks + condition: succeededOrFailed() + + - template: /eng/common/templates/job/publish-build-assets.yml + parameters: + dependsOn: + - Full_Signed + pool: + vmImage: windows-2019 + enablePublishBuildArtifacts: true + +- template: eng/common/templates/post-build/post-build.yml + parameters: + # NuGet validation currently fails due to the `` field of the package being set to `Microsoft and F# Software Foundation` instead of just `Microsoft` + enableNugetValidation: false + # Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved. + enableSymbolValidation: false diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 87306e5c60..cf9279949d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -28,285 +28,299 @@ variables: #- name: SkipTests # defaultValue: false -jobs: +stages: +- stage: build + displayName: Build + jobs: -#---------------------------------------------------------------------------------------------------------------------# -# Signed build # -#---------------------------------------------------------------------------------------------------------------------# -- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - template: /eng/common/templates/jobs/jobs.yml - parameters: - enableMicrobuild: true - enablePublishBuildArtifacts: true - enablePublishTestResults: false - enablePublishBuildAssets: true - enablePublishUsingPipelines: $(_PublishUsingPipelines) - enableTelemetry: true - helixRepo: dotnet/fsharp - jobs: - - job: Full_Signed - pool: - name: NetCoreInternal-Int-Pool - queue: buildpool.windows.10.amd64.vs2019 - timeoutInMinutes: 300 - variables: - - group: DotNet-Blob-Feed - - group: DotNet-Symbol-Server-Pats - - name: _SignType - value: Real - - name: _DotNetPublishToBlobFeed - value: true - steps: - - checkout: self - clean: true - - script: eng\CIBuild.cmd - -configuration $(_BuildConfig) - -prepareMachine - -testAll - -officialSkipTests $(SkipTests) - /p:SignType=$(_SignType) - /p:DotNetSignType=$(_SignType) - /p:MicroBuild_SigningEnabled=true - /p:OverridePackageSource=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json - /p:TeamName=$(_TeamName) - /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) - /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json - /p:DotNetPublishToBlobFeed=true - /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) - /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) - /p:OfficialBuildId=$(BUILD.BUILDNUMBER) - /p:PublishToSymbolServer=true - /p:VisualStudioDropName=$(VisualStudioDropName) - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'NUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' - continueOnError: true - condition: ne(variables['SkipTests'], 'true') - - task: PublishBuildArtifacts@1 - displayName: Publish Test Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults\$(_BuildConfig)' - ArtifactName: 'Test Logs' - publishLocation: Container - continueOnError: true - condition: ne(variables['SkipTests'], 'true') - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Packages - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(_BuildConfig)' - ArtifactName: 'Packages' - condition: succeeded() - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact VSSetup - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\Insertion' - ArtifactName: 'VSSetup' - condition: succeeded() - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Nightly - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpFull.vsix' - ArtifactName: 'Nightly' - condition: succeeded() - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact Symbols - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\SymStore\$(_BuildConfig)' - ArtifactName: 'NativeSymbols' - condition: succeeded() + #-------------------------------------------------------------------------------------------------------------------# + # Signed build # + #-------------------------------------------------------------------------------------------------------------------# + - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: /eng/common/templates/jobs/jobs.yml + parameters: + enableMicrobuild: true + enablePublishBuildArtifacts: true + enablePublishTestResults: false + enablePublishBuildAssets: true + enablePublishUsingPipelines: $(_PublishUsingPipelines) + enableTelemetry: true + helixRepo: dotnet/fsharp + jobs: + - job: Full_Signed + pool: + name: NetCoreInternal-Pool + queue: buildpool.windows.10.amd64.vs2019 + timeoutInMinutes: 300 + variables: + - group: DotNet-Blob-Feed + - group: DotNet-Symbol-Server-Pats + - name: _SignType + value: Real + - name: _DotNetPublishToBlobFeed + value: true + steps: + - checkout: self + clean: true + - script: eng\CIBuild.cmd + -configuration $(_BuildConfig) + -prepareMachine + -testAll + -officialSkipTests $(SkipTests) + /p:SignType=$(_SignType) + /p:DotNetSignType=$(_SignType) + /p:MicroBuild_SigningEnabled=true + /p:OverridePackageSource=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + /p:TeamName=$(_TeamName) + /p:DotNetPublishBlobFeedKey=$(dotnetfeed-storage-access-key-1) + /p:DotNetPublishBlobFeedUrl=https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json + /p:DotNetPublishToBlobFeed=true + /p:DotNetPublishUsingPipelines=$(_PublishUsingPipelines) + /p:DotNetArtifactsCategory=$(_DotNetArtifactsCategory) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:OfficialBuildId=$(BUILD.BUILDNUMBER) + /p:PublishToSymbolServer=true + /p:VisualStudioDropName=$(VisualStudioDropName) + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + continueOnError: true + condition: ne(variables['SkipTests'], 'true') + - task: PublishBuildArtifacts@1 + displayName: Publish Test Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults\$(_BuildConfig)' + ArtifactName: 'Test Logs' + publishLocation: Container + continueOnError: true + condition: ne(variables['SkipTests'], 'true') + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Packages + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\packages\$(_BuildConfig)' + ArtifactName: 'Packages' + condition: succeeded() + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact VSSetup + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\Insertion' + ArtifactName: 'VSSetup' + condition: succeeded() + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Nightly + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\VisualFSharpFull.vsix' + ArtifactName: 'Nightly' + condition: succeeded() + - task: PublishBuildArtifacts@1 + displayName: Publish Artifact Symbols + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\SymStore\$(_BuildConfig)' + ArtifactName: 'NativeSymbols' + condition: succeeded() -#---------------------------------------------------------------------------------------------------------------------# -# PR builds # -#---------------------------------------------------------------------------------------------------------------------# -- ${{ if eq(variables['System.TeamProject'], 'public') }}: - - template: /eng/common/templates/jobs/jobs.yml - parameters: - enableMicrobuild: true - enablePublishBuildArtifacts: true - enablePublishTestResults: false - enablePublishBuildAssets: true - enablePublishUsingPipelines: $(_PublishUsingPipelines) - enableTelemetry: true - helixRepo: dotnet/fsharp - jobs: + #-------------------------------------------------------------------------------------------------------------------# + # PR builds # + #-------------------------------------------------------------------------------------------------------------------# + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/jobs/jobs.yml + parameters: + enableMicrobuild: true + enablePublishBuildArtifacts: true + enablePublishTestResults: false + enablePublishBuildAssets: true + enablePublishUsingPipelines: $(_PublishUsingPipelines) + enableTelemetry: true + helixRepo: dotnet/fsharp + jobs: - # Windows - - job: Windows - pool: - vmImage: windows-2019 - timeoutInMinutes: 120 - strategy: - maxParallel: 4 - matrix: - desktop_release: - _configuration: Release - _testKind: testDesktop - coreclr_release: - _configuration: Release - _testKind: testCoreclr - fsharpqa_release: - _configuration: Release - _testKind: testFSharpQA - vs_release: - _configuration: Release - _testKind: testVs - steps: - - checkout: self - clean: true - - script: eng\CIBuild.cmd -configuration $(_configuration) -$(_testKind) - displayName: Build / Test - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'NUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_configuration)' - continueOnError: true - condition: ne(variables['_testKind'], 'testFSharpQA') - - task: PublishBuildArtifacts@1 - displayName: Publish Test Logs - inputs: - PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults\$(_configuration)' - ArtifactName: 'Windows $(_configuration) $(_testKind) test logs' - publishLocation: Container - continueOnError: true - condition: eq(variables['_testKind'], 'testFSharpQA') + # Windows + - job: Windows + pool: + vmImage: windows-2019 + timeoutInMinutes: 120 + strategy: + maxParallel: 4 + matrix: + desktop_release: + _configuration: Release + _testKind: testDesktop + coreclr_release: + _configuration: Release + _testKind: testCoreclr + fsharpqa_release: + _configuration: Release + _testKind: testFSharpQA + vs_release: + _configuration: Release + _testKind: testVs + steps: + - checkout: self + clean: true + - script: eng\CIBuild.cmd -configuration $(_configuration) -$(_testKind) + displayName: Build / Test + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_configuration)' + continueOnError: true + condition: ne(variables['_testKind'], 'testFSharpQA') + - task: PublishBuildArtifacts@1 + displayName: Publish Test Logs + inputs: + PathtoPublish: '$(Build.SourcesDirectory)\artifacts\TestResults\$(_configuration)' + ArtifactName: 'Windows $(_configuration) $(_testKind) test logs' + publishLocation: Container + continueOnError: true + condition: eq(variables['_testKind'], 'testFSharpQA') - # Linux - - job: Linux - pool: - vmImage: ubuntu-16.04 - variables: - - name: _SignType - value: Test - steps: - - checkout: self - clean: true - - script: ./eng/cibuild.sh --configuration $(_BuildConfig) --testcoreclr - displayName: Build / Test - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'NUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' - continueOnError: true - condition: always() + # Linux + - job: Linux + pool: + vmImage: ubuntu-16.04 + variables: + - name: _SignType + value: Test + steps: + - checkout: self + clean: true + - script: ./eng/cibuild.sh --configuration $(_BuildConfig) --testcoreclr + displayName: Build / Test + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + continueOnError: true + condition: always() - # MacOS - - job: MacOS - pool: - vmImage: macOS-10.13 - variables: - - name: _SignType - value: Test - steps: - - checkout: self - clean: true - - script: ./eng/cibuild.sh --configuration $(_BuildConfig) --testcoreclr - displayName: Build / Test - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'NUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' - continueOnError: true - condition: always() + # MacOS + - job: MacOS + pool: + vmImage: macOS-10.13 + variables: + - name: _SignType + value: Test + steps: + - checkout: self + clean: true + - script: ./eng/cibuild.sh --configuration $(_BuildConfig) --testcoreclr + displayName: Build / Test + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + continueOnError: true + condition: always() - # Source Build Linux - - job: SourceBuild_Linux - pool: - vmImage: ubuntu-16.04 - steps: - - checkout: self - clean: true - - script: ./eng/cibuild.sh --configuration Release /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true - displayName: Build + # Source Build Linux + - job: SourceBuild_Linux + pool: + vmImage: ubuntu-16.04 + steps: + - checkout: self + clean: true + - script: ./eng/cibuild.sh --configuration Release /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true + displayName: Build - # Source Build Windows - - job: SourceBuild_Windows - pool: - vmImage: windows-2019 - steps: - - checkout: self - clean: true - - script: eng\CIBuild.cmd -configuration Release -noSign /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true - displayName: Build + # Source Build Windows + - job: SourceBuild_Windows + pool: + vmImage: windows-2019 + steps: + - checkout: self + clean: true + - script: eng\CIBuild.cmd -configuration Release -noSign /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true + displayName: Build - # Up-to-date - - job: UpToDate_Windows - pool: - vmImage: windows-2019 - steps: - - checkout: self - clean: true - - task: PowerShell@2 - displayName: Run up-to-date build check - inputs: - filePath: eng\tests\UpToDate.ps1 - arguments: -configuration $(_BuildConfig) -ci -binaryLog + # Up-to-date + - job: UpToDate_Windows + pool: + vmImage: windows-2019 + steps: + - checkout: self + clean: true + - task: PowerShell@2 + displayName: Run up-to-date build check + inputs: + filePath: eng\tests\UpToDate.ps1 + arguments: -configuration $(_BuildConfig) -ci -binaryLog -#---------------------------------------------------------------------------------------------------------------------# -# FCS builds # -#---------------------------------------------------------------------------------------------------------------------# + #-------------------------------------------------------------------------------------------------------------------# + # FCS builds # + #-------------------------------------------------------------------------------------------------------------------# -- ${{ if eq(variables['System.TeamProject'], 'public') }}: - - template: /eng/common/templates/jobs/jobs.yml - parameters: - enableMicrobuild: true - enablePublishTestResults: false - enablePublishBuildAssets: true - enablePublishUsingPipelines: false - enableTelemetry: true - helixRepo: dotnet/fsharp - jobs: + - ${{ if eq(variables['System.TeamProject'], 'public') }}: + - template: /eng/common/templates/jobs/jobs.yml + parameters: + enableMicrobuild: true + enablePublishTestResults: false + enablePublishBuildAssets: true + enablePublishUsingPipelines: false + enableTelemetry: true + helixRepo: dotnet/fsharp + jobs: - - job: Windows_FCS - pool: - vmImage: windows-2019 - variables: - - name: _SignType - value: Test - steps: - - checkout: self - clean: true - - script: fcs\build.cmd TestAndNuget - displayName: Build / Test - - task: PublishTestResults@2 - displayName: Publish Test Results - inputs: - testResultsFormat: 'NUnit' - testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/Release' - continueOnError: true - condition: always() + - job: Windows_FCS + pool: + vmImage: windows-2019 + variables: + - name: _SignType + value: Test + steps: + - checkout: self + clean: true + - script: fcs\build.cmd TestAndNuget + displayName: Build / Test + - task: PublishTestResults@2 + displayName: Publish Test Results + inputs: + testResultsFormat: 'NUnit' + testResultsFiles: '*.xml' + searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/Release' + continueOnError: true + condition: always() - - job: Linux_FCS - pool: - vmImage: ubuntu-16.04 - variables: - - name: _SignType - value: Test - steps: - - checkout: self - clean: true - - script: ./fcs/build.sh Build - displayName: Build + - job: Linux_FCS + pool: + vmImage: ubuntu-16.04 + variables: + - name: _SignType + value: Test + steps: + - checkout: self + clean: true + - script: ./fcs/build.sh Build + displayName: Build - - job: MacOS_FCS - pool: - vmImage: macOS-10.13 - variables: - - name: _SignType - value: Test - steps: - - checkout: self - clean: true - - script: ./fcs/build.sh Build - displayName: Build + - job: MacOS_FCS + pool: + vmImage: macOS-10.13 + variables: + - name: _SignType + value: Test + steps: + - checkout: self + clean: true + - script: ./fcs/build.sh Build + displayName: Build + +#---------------------------------------------------------------------------------------------------------------------# +# Post Build # +#---------------------------------------------------------------------------------------------------------------------# +- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: eng/common/templates/post-build/post-build.yml + parameters: + # NuGet validation currently fails due to the `` field of the package being set to `Microsoft and F# Software Foundation` instead of just `Microsoft` + enableNugetValidation: false + # Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved. + enableSymbolValidation: false From d070d1774fd61b59fef9f31dec5582a0269a6b3d Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 8 Aug 2019 16:58:20 -0700 Subject: [PATCH 017/146] Netcoreapp3 (#7359) * Use netcoresdk 3.0 * Use appdomain and load context * temp * Execute in appdomain, or assemblyloadcontext * fscore * linux * Try to publish test logs from Linux/MacOS * Copy paste error * netcoreapp3 * feedback --- NuGet.config | 8 ++ eng/Build.ps1 | 6 +- eng/build.sh | 2 +- .../FSharp.Compiler.LanguageServer.fsproj | 4 +- .../FSharp.Build.UnitTests.fsproj | 4 +- ...p.Compiler.LanguageServer.UnitTests.fsproj | 4 +- .../FSharp.Compiler.UnitTests.fsproj | 4 +- .../FSharp.Core.UnitTests.fsproj | 4 +- .../ListModule2.fs | 19 +---- .../NUnitFrameworkShims.fs | 3 +- tests/fsharp/Compiler/CompilerAssert.fs | 85 +++++++++---------- .../BasicGrammarElements/BasicConstants.fs | 35 ++++---- .../ConstraintSolver/MemberConstraints.fs | 9 +- .../ConstraintSolver/PrimitiveConstraints.fs | 26 +++--- .../ErrorMessages/AssignmentErrorTests.fs | 2 - .../ErrorMessages/WrongSyntaxInForLoop.fs | 2 - .../Warnings/AssignmentWarningTests.fs | 10 --- tests/fsharp/FSharpSuite.Tests.fsproj | 5 +- tests/fsharp/core/pinvoke/test.fsx | 50 +++++++---- tests/fsharp/single-test.fs | 3 +- tests/fsharp/tests.fs | 23 +---- 21 files changed, 141 insertions(+), 167 deletions(-) diff --git a/NuGet.config b/NuGet.config index a8664a73c5..02fa667590 100644 --- a/NuGet.config +++ b/NuGet.config @@ -22,6 +22,14 @@ + + + + + + + + diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 1372df4e5f..75f0178b7d 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -174,7 +174,7 @@ function BuildSolution() { $officialBuildId = if ($official) { $env:BUILD_BUILDNUMBER } else { "" } $toolsetBuildProj = InitializeToolset $quietRestore = !$ci - $testTargetFrameworks = if ($testCoreClr) { "netcoreapp2.1" } else { "" } + $testTargetFrameworks = if ($testCoreClr) { "netcoreapp3.0" } else { "" } # Do not set the property to true explicitly, since that would override value projects might set. $suppressExtensionDeployment = if (!$deployExtensions) { "/p:DeployExtension=false" } else { "" } @@ -309,7 +309,7 @@ try { Prepare-TempDir EnablePreviewSdks - # enable us to build netcoreapp2.1 binaries + # enable us to build netcoreapp2.1 product binaries $global:_DotNetInstallDir = Join-Path $RepoRoot ".dotnet" InstallDotNetSdk $global:_DotNetInstallDir $GlobalJson.tools.dotnet InstallDotNetSdk $global:_DotNetInstallDir "2.1.503" @@ -332,7 +332,7 @@ try { } $desktopTargetFramework = "net472" - $coreclrTargetFramework = "netcoreapp2.1" + $coreclrTargetFramework = "netcoreapp3.0" if ($testDesktop -and -not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework diff --git a/eng/build.sh b/eng/build.sh index fceb485349..e806856c55 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -269,7 +269,7 @@ InstallDotNetSdk $_InitializeDotNetCli 2.1.503 BuildSolution if [[ "$test_core_clr" == true ]]; then - coreclrtestframework=netcoreapp2.1 + coreclrtestframework=netcoreapp3.0 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index 48e2c5104a..fd6e517e54 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -4,8 +4,8 @@ Exe .exe - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 true Implements the Language Server Protocol (LSP) for F#. true diff --git a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj index 7c6ea79b38..37b5c713e9 100644 --- a/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj +++ b/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 Library true nunit diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj b/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj index a9df8d199e..c457b9e563 100644 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj @@ -2,8 +2,8 @@ - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 Library true nunit diff --git a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj index 27bf5b2d07..be4e9125a2 100644 --- a/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj +++ b/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 Library true nunit diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 24a2132e9c..53370ffb7b 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -3,8 +3,8 @@ - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 Library FSharp.Core.UnitTests diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs index 1f049fbad8..283cdbe588 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs @@ -94,35 +94,22 @@ type ListModule02() = // string List let funcStr x y z = x + y + z - let resultStr = List.map3 funcStr ["A";"B";"C";"D"] ["a";"b";"c";"d"] ["1";"2";"3";"4"] + let resultStr = List.map3 funcStr ["A";"B";"C";"D"] ["a";"b";"c";"d"] ["1";"2";"3";"4"] Assert.AreEqual(["Aa1";"Bb2";"Cc3";"Dd4"], resultStr) - + // lists of different length let shortList = [1] let longerList = [1; 2] CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList shortList longerList |> ignore) CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList longerList shortList |> ignore) CheckThrowsArgumentException (fun () -> List.map3 funcInt shortList shortList longerList |> ignore) - - // exception message checking - let expectedMessage = - "The lists had different lengths.\n" + - sprintf " list1.Length = %i, list2.Length = %i, list3.Length = %i" shortList.Length shortList.Length longerList.Length + - Environment.NewLine + "Parameter name: list1, list2, list3" - let ex = Assert.Throws(typeof, - (fun () -> List.map3 funcInt shortList shortList longerList |> ignore)) - Assert.AreEqual(expectedMessage, ex.Message) // empty List let resultEpt = List.map3 funcInt List.empty List.empty List.empty Assert.AreEqual(List.empty, resultEpt) - - () - [] - member this.Collect() = - // integer List + member this.Collect() = // integer List let funcInt x = match x with | _ when x % 3 = 0 -> [999;999] diff --git a/tests/FSharp.Core.UnitTests/NUnitFrameworkShims.fs b/tests/FSharp.Core.UnitTests/NUnitFrameworkShims.fs index 4ec5b9e9c8..8b0eec34fe 100644 --- a/tests/FSharp.Core.UnitTests/NUnitFrameworkShims.fs +++ b/tests/FSharp.Core.UnitTests/NUnitFrameworkShims.fs @@ -5,11 +5,10 @@ namespace NUnit.Framework open System open System.Collections.Generic open System.Linq - #if XUNIT open Xunit -(* The threading tests under XUnit seem prone to be verey Flakey *) +(* The threading tests under XUnit seem prone to be very Flakey *) [] do () diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index f1d4f38014..9510b0ec05 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -6,10 +6,13 @@ open System open System.IO open System.Text open System.Diagnostics +open System.Reflection open FSharp.Compiler.Text open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Interactive.Shell - +#if FX_NO_APP_DOMAINS +open System.Runtime.Loader +#endif open NUnit.Framework open System.Reflection.Emit @@ -32,7 +35,6 @@ module CompilerAssert = let private config = TestFramework.initializeSuite () - // Do a one time dotnet sdk build to compute the proper set of reference assemblies to pass to the compiler #if !NETCOREAPP #else @@ -41,7 +43,8 @@ module CompilerAssert = Exe - netcoreapp2.1 + netcoreapp3.0 + true @@ -62,7 +65,7 @@ let main argv = 0""" let mutable output = "" let mutable errors = "" let mutable cleanUp = true - let projectDirectory = Path.Combine(Path.GetTempPath(), "netcoreapp2.1", Path.GetRandomFileName()) + let projectDirectory = Path.Combine(Path.GetTempPath(), "CompilerAssert", Path.GetRandomFileName()) try try Directory.CreateDirectory(projectDirectory) |> ignore @@ -102,6 +105,37 @@ let main argv = 0""" try Directory.Delete(projectDirectory) with | _ -> () #endif +#if FX_NO_APP_DOMAINS + let executeBuiltApp assembly = + let ctxt = AssemblyLoadContext("ContextName", true) + try + let asm = ctxt.LoadFromAssemblyPath(assembly) + let entryPoint = asm.EntryPoint + (entryPoint.Invoke(Unchecked.defaultof, [||])) |> ignore + finally + ctxt.Unload() +#else + type Worker () = + inherit MarshalByRefObject() + + member __.ExecuteTestCase assemblyPath = + let asm = Assembly.LoadFrom(assemblyPath) + let entryPoint = asm.EntryPoint + (entryPoint.Invoke(Unchecked.defaultof, [||])) |> ignore + + let pathToThisDll = Assembly.GetExecutingAssembly().CodeBase + + let adSetup = + let setup = new System.AppDomainSetup () + setup.PrivateBinPath <- pathToThisDll + setup + + let executeBuiltApp assembly = + let ad = AppDomain.CreateDomain((Guid()).ToString(), null, adSetup) + let worker = (ad.CreateInstanceFromAndUnwrap(pathToThisDll, typeof.FullName)) :?> Worker + worker.ExecuteTestCase assembly |>ignore +#endif + let private defaultProjectOptions = { ProjectFileName = "Z:\\test.fsproj" @@ -130,24 +164,8 @@ let main argv = 0""" lock gate <| fun () -> let inputFilePath = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then ".exe" else ".dll") - let runtimeConfigFilePath = Path.ChangeExtension (outputFilePath, ".runtimeconfig.json") - let fsCoreDllPath = config.FSCOREDLLPATH - let tmpFsCoreFilePath = Path.Combine (Path.GetDirectoryName(outputFilePath), Path.GetFileName(fsCoreDllPath)) try - File.Copy (fsCoreDllPath , tmpFsCoreFilePath, true) File.WriteAllText (inputFilePath, source) - File.WriteAllText (runtimeConfigFilePath, """ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.0.0-preview6-27804-01" - } - } -} - """) - let args = defaultProjectOptions.OtherOptions |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] @@ -158,8 +176,6 @@ let main argv = 0""" finally try File.Delete inputFilePath with | _ -> () try File.Delete outputFilePath with | _ -> () - try File.Delete runtimeConfigFilePath with | _ -> () - try File.Delete tmpFsCoreFilePath with | _ -> () let Pass (source: string) = lock gate <| fun () -> @@ -224,26 +240,7 @@ let main argv = 0""" if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors) - let pInfo = ProcessStartInfo () -#if NETCOREAPP - pInfo.FileName <- config.DotNetExe - pInfo.Arguments <- outputExe -#else - pInfo.FileName <- outputExe -#endif - - pInfo.RedirectStandardError <- true - pInfo.UseShellExecute <- false - - let p = Process.Start(pInfo) - - p.WaitForExit() - let errors = p.StandardError.ReadToEnd () - if not (String.IsNullOrWhiteSpace errors) then - Assert.Fail errors - - if p.ExitCode <> 0 then - Assert.Fail(sprintf "Program exited with exit code %d" p.ExitCode) + executeBuiltApp outputExe ) let CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = @@ -288,7 +285,7 @@ let main argv = 0""" (expectedErrorMessages, errorMessages) ||> Seq.iter2 (fun expectedErrorMessage errorMessage -> Assert.AreEqual(expectedErrorMessage, errorMessage) - ) + ) let ParseWithErrors (source: string) expectedParseErrors = let sourceFileName = "test.fs" @@ -316,5 +313,5 @@ let main argv = 0""" let ``hello world``() = CompileExeAndRun """ -(printfn "Hello, world."; exit 0) +(printfn "Hello, world.") """ \ No newline at end of file diff --git a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs index 9bae494656..aaceee8db7 100644 --- a/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs +++ b/tests/fsharp/Compiler/Conformance/BasicGrammarElements/BasicConstants.fs @@ -59,7 +59,8 @@ let socialSecurityNumber = 999_99_9999L if socialSecurityNumber <> 999999999L then failwith "Wrong parsing" if creditCardNumber <> 1234567890123456L then failwith "Wrong parsing" -exit 0 +printfn "%A" socialSecurityNumber +printfn "%A" creditCardNumber """ [] @@ -68,7 +69,7 @@ exit 0 """ let pi = 3.14_15F if pi <> 3.1415F then failwith "Wrong parsing" -exit 0 +printfn "%A" pi """ [] @@ -77,7 +78,7 @@ exit 0 """ let hexBytes = 0xFF_EC_DE_5E if hexBytes <> 0xFFECDE5E then failwith "Wrong parsing" -exit 0 +printfn "%A" hexBytes """ @@ -87,7 +88,7 @@ exit 0 """ let hexWords = 0xCAFE_BABE if hexWords <> 0xCAFEBABE then failwith "Wrong parsing" -exit 0 +printfn "%A" hexWords """ [] @@ -96,7 +97,7 @@ exit 0 """ let maxLong = 0x7fff_ffff_ffff_ffffL if maxLong <> 0x7fffffffffffffffL then failwith "Wrong parsing" -exit 0 +printfn "%A" maxLong """ [] @@ -105,7 +106,7 @@ exit 0 """ let nybbles = 0b0010_0101 if nybbles <> 0b00100101 then failwith "Wrong parsing" -exit 0 +printfn "%A" nybbles """ [] @@ -114,7 +115,7 @@ exit 0 """ let bytes = 0b11010010_01101001_10010100_10010010 if bytes <> 0b11010010011010011001010010010010 then failwith "Wrong parsing" -exit 0 +printfn "%A" bytes """ [] @@ -123,7 +124,7 @@ exit 0 """ let x2 = 5_2 if x2 <> 52 then failwith "Wrong parsing" -exit 0 +printfn "%A" x2 """ [] @@ -132,7 +133,7 @@ exit 0 """ let x4 = 5_______2 if x4 <> 52 then failwith "Wrong parsing" -exit 0 +printfn "%A" x4 """ [] @@ -142,7 +143,7 @@ exit 0 let x7 = 0x5_2 if x7 <> 0x52 then failwith "Wrong parsing" -exit 0 +printfn "%A" x7 """ [] @@ -151,8 +152,8 @@ exit 0 """ let x9 = 0_52 if x9 <> 052 then failwith "Wrong parsing" -exit 0 - """ +printfn "%A" x9 + """ [] let ``int with single underscore after leteral with leading zero ``() = @@ -160,8 +161,8 @@ exit 0 """ let x10 = 05_2 if x10 <> 052 then failwith "Wrong parsing" -exit 0 - """ +printfn "%A" x10 + """ [] let ``int with single underscore after octo leteral ``() = @@ -169,9 +170,5 @@ exit 0 """ let x14 = 0o5_2 if x14 <> 0o52 then failwith "Wrong parsing" -exit 0 +printfn "%A" x14 """ - - - - diff --git a/tests/fsharp/Compiler/ConstraintSolver/MemberConstraints.fs b/tests/fsharp/Compiler/ConstraintSolver/MemberConstraints.fs index d422c9b31f..c7a67e7838 100644 --- a/tests/fsharp/Compiler/ConstraintSolver/MemberConstraints.fs +++ b/tests/fsharp/Compiler/ConstraintSolver/MemberConstraints.fs @@ -26,10 +26,11 @@ let y = Foo(3) --> Foo(4) let x2 = Foo(3) + 4 let y2 = Foo(3) + Foo(4) -if x.Val <> 7 then exit 1 -if y.Val <> 7 then exit 1 -if x2.Val <> 7 then exit 1 -if y2.Val <> 7 then exit 1 +if x.Val <> 7 then failwith "x.Val <> 7" +elif y.Val <> 7 then failwith "y.Val <> 7" +elif x2.Val <> 7 then failwith "x2.Val <> 7" +elif y2.Val <> 7 then failwith "x.Val <> 7" +else () """ [] diff --git a/tests/fsharp/Compiler/ConstraintSolver/PrimitiveConstraints.fs b/tests/fsharp/Compiler/ConstraintSolver/PrimitiveConstraints.fs index fbfedfb550..0b61ffbb96 100644 --- a/tests/fsharp/Compiler/ConstraintSolver/PrimitiveConstraints.fs +++ b/tests/fsharp/Compiler/ConstraintSolver/PrimitiveConstraints.fs @@ -29,8 +29,9 @@ let test2 (x : Bar) = (x.Value, x.Value2) let f = new Foo(128) let b = new Bar(256) -if test1 f <> 128 then exit 1 -if test2 b <> (-1, 256) then exit 1 +if test1 f <> 128 then failwith "test1 f <> 128" +elif test2 b <> (-1, 256) then failwith "test2 b <> (-1, 256)" +else () """ [] @@ -58,9 +59,10 @@ let f = new Foo(128) let b = new Bar(256) let r = new Ram(314) -if test f <> (128, "Foo") then exit 1 -if test b <> (-1, "Bar") then exit 1 -if test r <> (10, "Ram") then exit 1 +if test f <> (128, "Foo") then failwith "test f <> (128, 'Foo')" +elif test b <> (-1, "Bar") then failwith "test b <> (-1, 'Bar')" +elif test r <> (10, "Ram") then failwith "test r <> (10, 'Ram')" +else () """ [] @@ -72,17 +74,15 @@ let inline isNull<'a when 'a : null> (x : 'a) = | null -> "is null" | _ -> (x :> obj).ToString() -let runTest = +let runTest = // Wrapping in try block to work around FSB 1989 try - if isNull null <> "is null" then exit 1 - if isNull "F#" <> "F#" then exit 1 - true - with _ -> exit 1 + if isNull null <> "is null" then failwith "isNull null <> is null" + if isNull "F#" <> "F#" then failwith "isNull F# <> F#" + () + with _ -> reraise() -if runTest <> true then exit 1 - -exit 0 +runTest """ [] diff --git a/tests/fsharp/Compiler/ErrorMessages/AssignmentErrorTests.fs b/tests/fsharp/Compiler/ErrorMessages/AssignmentErrorTests.fs index 51b75dd87d..c3cc42e43c 100644 --- a/tests/fsharp/Compiler/ErrorMessages/AssignmentErrorTests.fs +++ b/tests/fsharp/Compiler/ErrorMessages/AssignmentErrorTests.fs @@ -14,8 +14,6 @@ module ``Errors assigning to mutable objects`` = """ let x = 10 x <- 20 - -exit 0 """ FSharpErrorSeverity.Error 27 diff --git a/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs b/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs index 7be1e78981..860e6ca55c 100644 --- a/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs +++ b/tests/fsharp/Compiler/ErrorMessages/WrongSyntaxInForLoop.fs @@ -15,7 +15,5 @@ module ``Wrong syntax in for loop`` = module X for i = 0 .. 100 do () - -exit 0 """ [|FSharpErrorSeverity.Error, 3215, (3, 7, 3, 8), "Unexpected symbol '=' in expression. Did you intend to use 'for x in y .. z do' instead?" |] diff --git a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs index 2a0d15d8f8..533d4c4344 100644 --- a/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs +++ b/tests/fsharp/Compiler/Warnings/AssignmentWarningTests.fs @@ -18,8 +18,6 @@ let y = "hello" let changeX() = x = 20 y = "test" - -exit 0 """ FSharpErrorSeverity.Warning 20 @@ -36,8 +34,6 @@ let y = "hello" let changeX() = x = 20 y = "test" - -exit 0 """ FSharpErrorSeverity.Warning 20 @@ -56,8 +52,6 @@ let y = "hello" let changeProperty() = z.Enabled = true y = "test" - -exit 0 """ FSharpErrorSeverity.Warning 20 @@ -78,8 +72,6 @@ let y = "hello" let changeProperty() = x.Property2 = "20" y = "test" - -exit 0 """ FSharpErrorSeverity.Warning 20 @@ -99,8 +91,6 @@ let y = "hello" let changeProperty() = x.Property2 = "22" y = "test" - -exit 0 """ FSharpErrorSeverity.Warning 20 diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index be61880350..5e5e328d36 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -2,8 +2,8 @@ - net472;netcoreapp2.1 - netcoreapp2.1 + net472;netcoreapp3.0 + netcoreapp3.0 win-x86;win-x64 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81 true @@ -79,6 +79,7 @@ + diff --git a/tests/fsharp/core/pinvoke/test.fsx b/tests/fsharp/core/pinvoke/test.fsx index 26f09b83e5..990df5a599 100644 --- a/tests/fsharp/core/pinvoke/test.fsx +++ b/tests/fsharp/core/pinvoke/test.fsx @@ -16,6 +16,26 @@ let report_failure (s : string) = stderr.WriteLine s failures := !failures @ [s] +// We currently build targeting netcoreapp2_1, and will continue to do so through this VS cycle +// We will use this api to see if we are running on a netcore which supports pinvoke / refemit +let definePInvokeMethod = + typeof.GetMethod("DefinePInvokeMethod", [| + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof + typeof |]) + +let enablePInvokeOnCoreClr = definePInvokeMethod <> null + module GetSystemTimeTest = open System open System.Runtime.InteropServices @@ -36,16 +56,18 @@ module GetSystemTimeTest = [] extern void GetSystemTime([] MySystemTime ct); - do - let sysTime = new MySystemTime() - GetSystemTime(sysTime); - printf "The System time is %d/%d/%d %d:%d:%d\n" - (int32 sysTime.wDay) - (int32 sysTime.wMonth ) - (int32 sysTime.wYear ) - (int32 sysTime.wHour ) - (int32 sysTime.wMinute ) - (int32 sysTime.wSecond) + let doTime () = + let sysTime = new MySystemTime() + GetSystemTime(sysTime); + printf "The System time is %d/%d/%d %d:%d:%d\n" + (int32 sysTime.wDay) + (int32 sysTime.wMonth ) + (int32 sysTime.wYear ) + (int32 sysTime.wHour ) + (int32 sysTime.wMinute ) + (int32 sysTime.wSecond) + + do if enablePInvokeOnCoreClr then doTime () module MemoryStatusTest = @@ -75,16 +97,14 @@ module MemoryStatusTest = end [] - extern [] bool - GlobalMemoryStatusEx( [] MEMORYSTATUSEX lpBuffer); + extern [] bool GlobalMemoryStatusEx( [] MEMORYSTATUSEX lpBuffer); let main() = let mex = new MEMORYSTATUSEX() GlobalMemoryStatusEx(mex) |> ignore printf "%A\n" mex - main() - + if enablePInvokeOnCoreClr then main() module MemoryStatusTest2 = open System @@ -121,7 +141,7 @@ module MemoryStatusTest2 = GlobalMemoryStatusEx(&& mex) |> ignore printf "%A\n" mex - main() + if enablePInvokeOnCoreClr then main() (*--------------------*) diff --git a/tests/fsharp/single-test.fs b/tests/fsharp/single-test.fs index 7a5b50f385..c89a6f5c2e 100644 --- a/tests/fsharp/single-test.fs +++ b/tests/fsharp/single-test.fs @@ -3,7 +3,6 @@ open System open System.IO open System.Diagnostics -open System.Threading open NUnit.Framework open TestFramework @@ -228,7 +227,7 @@ let singleTestBuildAndRunCore cfg copyFiles p = let mutable result = "" lock lockObj <| (fun () -> let rec loop () = - let dir = Path.Combine(Path.GetTempPath(), "FSharp.Cambridge", Path.GetRandomFileName() + "."+ Thread.CurrentThread.ManagedThreadId.ToString()) + let dir = Path.Combine(Path.GetTempPath(), "FSharp.Cambridge", Path.GetRandomFileName()) if Directory.Exists(dir) then loop () else diff --git a/tests/fsharp/tests.fs b/tests/fsharp/tests.fs index 96c7be2836..c73726a3a8 100644 --- a/tests/fsharp/tests.fs +++ b/tests/fsharp/tests.fs @@ -1318,28 +1318,7 @@ module CoreTests = [] let ``pinvoke-FSI_BASIC`` () = - // We currently build targeting netcoreapp2_1, and will continue to do so through this VS cycle - // but we can run on Netcoreapp3.0 so ... use reflection to invoke the api, when we are executing on netcoreapp3.0 - let definePInvokeMethod = - typeof.GetMethod("DefinePInvokeMethod", [| - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof - typeof |]) - - let enablePInvokeOnCoreClr = definePInvokeMethod <> null - - if enablePInvokeOnCoreClr then - singleTestBuildAndRun "core/pinvoke" FSI_BASIC + singleTestBuildAndRun "core/pinvoke" FSI_BASIC [] let ``fsi_load-FSC_BASIC`` () = singleTestBuildAndRun "core/fsi-load" FSC_BASIC From faffb13a4c1761029231da0cde529f601868a1a5 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 8 Aug 2019 19:52:46 -0700 Subject: [PATCH 018/146] move attribution of F# Software Foundation to package description (#7370) Due to internal package publishing policies, the author of a package published via a Microsoft account must be exactly 'Microsoft'. To preserve attribution to the F# Software Foundation, mention is made in the tag of FSharp.Core. --- .vsts-signed.yaml | 2 -- azure-pipelines.yml | 2 -- eng/targets/Settings.props | 1 - src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj | 2 +- 4 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.vsts-signed.yaml b/.vsts-signed.yaml index 13afde5aab..a93dcd1af9 100644 --- a/.vsts-signed.yaml +++ b/.vsts-signed.yaml @@ -148,7 +148,5 @@ stages: - template: eng/common/templates/post-build/post-build.yml parameters: - # NuGet validation currently fails due to the `` field of the package being set to `Microsoft and F# Software Foundation` instead of just `Microsoft` - enableNugetValidation: false # Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved. enableSymbolValidation: false diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cf9279949d..5dd52805da 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -320,7 +320,5 @@ stages: - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - template: eng/common/templates/post-build/post-build.yml parameters: - # NuGet validation currently fails due to the `` field of the package being set to `Microsoft and F# Software Foundation` instead of just `Microsoft` - enableNugetValidation: false # Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved. enableSymbolValidation: false diff --git a/eng/targets/Settings.props b/eng/targets/Settings.props index 6360088320..3290288182 100644 --- a/eng/targets/Settings.props +++ b/eng/targets/Settings.props @@ -2,7 +2,6 @@ MIT - Microsoft and F# Software Foundation Visual F# Compiler FSharp functional programming $(ArtifactsBinDir) diff --git a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj index fd2d5162c7..512bfaad70 100644 --- a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj +++ b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj @@ -6,7 +6,7 @@ FSharp.Core FSharp.Core.nuspec true - FSharp.Core redistributables from Visual F# Tools version $(FSPackageMajorVersion) For F# $(FSCoreMajorVersion) + FSharp.Core redistributables from Visual F# Tools version $(FSPackageMajorVersion) For F# $(FSCoreMajorVersion). Contains code from the F# Software Foundation. From f72ab4c25c3dd841a479beec6236fa76376993e1 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 8 Aug 2019 19:53:39 -0700 Subject: [PATCH 019/146] Re-enable surface area tests in master branch (#7332) * Re-enable surface area tests in master branch * net40 surface area --- .../FSharp.Core.UnitTests.fsproj | 5 +- tests/FSharp.Core.UnitTests/LibraryTestFx.fs | 47 +- .../SurfaceArea.coreclr.fs | 1050 +----- .../SurfaceArea.net40.fs | 1090 +----- .../fsharpqa/Source/Misc/LongSourceFile01.fs | 3044 ----------------- tests/fsharpqa/Source/Misc/env.lst | 1 - 6 files changed, 124 insertions(+), 5113 deletions(-) delete mode 100644 tests/fsharpqa/Source/Misc/LongSourceFile01.fs diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj index 53370ffb7b..aaf0065bfc 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj +++ b/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj @@ -80,8 +80,9 @@ - - + + + diff --git a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs index 03adf3fff5..637cc41d2e 100644 --- a/tests/FSharp.Core.UnitTests/LibraryTestFx.fs +++ b/tests/FSharp.Core.UnitTests/LibraryTestFx.fs @@ -61,59 +61,47 @@ let sleep(n : int32) = System.Threading.Thread.Sleep(n) #endif -#if VERIFY_SURFACEAREA module SurfaceArea = open System.Reflection open System open System.Text.RegularExpressions - + // gets string form of public surface area for the currently-loaded FSharp.Core let private getActual () = - + // get current FSharp.Core - let asm = -#if FX_RESHAPED_REFLECTION - typeof.GetTypeInfo().Assembly -#else - typeof.Assembly -#endif - + let asm = typeof.GetTypeInfo().Assembly + let fsCoreFullName = asm.FullName + // public types only - let types = -#if FX_RESHAPED_REFLECTION - asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq -#else - asm.GetExportedTypes() -#endif + let types = asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq + let typenames = new System.Collections.Generic.List() // extract canonical string form for every public member of every type let getTypeMemberStrings (t : Type) = // for System.Runtime-based profiles, need to do lots of manual work -#if FX_RESHAPED_REFLECTION let getMembers (t : Type) = let ti = t.GetTypeInfo() - let cast (info : #MemberInfo) = (t, info :> MemberInfo) + let cast (info: #MemberInfo) = (t, info :> MemberInfo) + let isDeclaredInFSharpCore (m:MemberInfo) = m.DeclaringType.Assembly.FullName = fsCoreFullName seq { - yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic) |> Seq.map cast - yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic) |> Seq.map cast - yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast - yield! t.GetRuntimeFields() |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast + yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast + yield! t.GetRuntimeFields() |> Seq.filter (fun m -> m.IsPublic && m |> isDeclaredInFSharpCore) |> Seq.map cast yield! ti.DeclaredConstructors |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast yield! ti.DeclaredNestedTypes |> Seq.filter (fun ty -> ty.IsNestedPublic) |> Seq.map cast } |> Array.ofSeq + getMembers t |> Array.map (fun (ty, m) -> sprintf "%s: %s" (ty.ToString()) (m.ToString())) -#else - t.GetMembers() - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) -#endif - + let actual = types |> Array.collect getTypeMemberStrings asm,actual - + // verify public surface area matches expected let verify expected platform (fileName : string) = let normalize (s:string) = @@ -121,7 +109,7 @@ module SurfaceArea = let asm, actualNotNormalized = getActual () let actual = actualNotNormalized |> Seq.map normalize |> Seq.filter (String.IsNullOrWhiteSpace >> not) |> set - + let expected = // Split the "expected" string into individual lines, then normalize it. (normalize expected).Split([|"\r\n"; "\n"; "\r"|], StringSplitOptions.RemoveEmptyEntries) @@ -173,4 +161,3 @@ module SurfaceArea = sb.ToString () Assert.Fail msg -#endif \ No newline at end of file diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs index 9de6db290b..eba09d2de4 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.coreclr.fs @@ -5,19 +5,15 @@ namespace FSharp.Core.UnitTests.Portable.SurfaceArea open NUnit.Framework open FSharp.Core.UnitTests.LibraryTestFx -[] + type SurfaceAreaTest() = [] - member this.VerifyArea() = + member this.VerifyArea(): unit = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -33,13 +29,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -49,24 +41,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -75,7 +59,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -84,20 +67,19 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,10 +93,8 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) @@ -189,19 +169,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -228,7 +200,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -248,7 +219,6 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collecti Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -268,23 +238,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -293,7 +257,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -345,23 +308,21 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) @@ -388,12 +349,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -407,10 +366,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -418,7 +375,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -427,12 +383,12 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) @@ -490,13 +446,10 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) @@ -523,7 +476,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -532,7 +484,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -549,62 +500,38 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() -Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -629,20 +556,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -654,61 +577,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -720,8 +607,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -731,15 +616,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -747,163 +626,49 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -911,61 +676,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -985,65 +716,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1054,99 +749,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1155,68 +792,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1227,8 +818,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1255,8 +844,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1273,16 +860,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1302,8 +883,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1320,8 +899,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1340,8 +917,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1360,17 +935,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1394,8 +963,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1414,8 +981,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1436,8 +1001,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1458,8 +1021,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1480,18 +1041,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1519,8 +1074,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1541,8 +1094,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1565,8 +1116,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1589,8 +1138,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1613,8 +1160,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1637,19 +1182,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1681,8 +1220,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1705,8 +1242,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1731,8 +1266,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1757,8 +1290,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1783,8 +1314,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1809,8 +1338,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1835,20 +1362,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1884,8 +1405,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1910,8 +1429,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1938,8 +1455,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1966,8 +1481,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1994,8 +1507,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2022,8 +1533,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2050,8 +1559,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2078,11 +1585,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2090,9 +1594,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2132,39 +1633,21 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2184,7 +1667,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2196,8 +1678,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2206,12 +1686,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2229,29 +1705,23 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsNone +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsSome Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueNone Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueSome +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsNone() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsSome() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueSome() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpValueOption`1[T]) @@ -2263,29 +1733,16 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 Tag Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T] Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] NewValueSome(T) +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] None +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] Some(T) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] ValueNone +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsNone -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsSome -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsNone() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsSome() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] None -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] Some(T) -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() -Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] FromAction(System.Action) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T] FromFunc[T](System.Func`1[T]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] FromAction[T](System.Action`1[T]) @@ -2303,41 +1760,18 @@ Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microso Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2362,19 +1796,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2390,17 +1817,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2416,7 +1838,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2440,8 +1861,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2458,14 +1877,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2473,107 +1884,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2582,7 +1921,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2590,17 +1928,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2624,8 +1957,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2663,16 +1994,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2690,7 +2016,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2723,17 +2048,10 @@ Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) Microsoft.FSharp.Core.Operators: System.IO.TextReader ConsoleIn[T]() Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleOut[T]() -Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + -#if DEBUG - @" -Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + -#endif - @" -Microsoft.FSharp.Core.Operators: System.String ToString() +Microsoft.FSharp.Core.Operators: System.Object Box[T](T) Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2804,54 +2122,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2864,8 +2160,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2874,63 +2168,15 @@ Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.C Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.String ToString() -Microsoft.FSharp.Core.ValueOption: System.Type GetType() -Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) -Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2944,77 +2190,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -3028,16 +2218,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -3046,100 +2228,44 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() +Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) +Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3160,9 +2286,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3181,7 +2304,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3197,14 +2319,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3237,8 +2355,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3252,43 +2368,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3296,10 +2388,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3309,10 +2397,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3324,10 +2408,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3341,10 +2421,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3360,10 +2436,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3381,40 +2453,26 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3438,14 +2496,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3504,7 +2556,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3519,7 +2570,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3530,12 +2580,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3572,13 +2619,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3594,30 +2637,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3638,11 +2673,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3655,7 +2688,6 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -" +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" SurfaceArea.verify expected "coreclr" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) + () \ No newline at end of file diff --git a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs index 16035e67c0..31a266a41d 100644 --- a/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs +++ b/tests/FSharp.Core.UnitTests/SurfaceArea.net40.fs @@ -5,19 +5,14 @@ namespace FSharp.Core.UnitTests.SurfaceArea open NUnit.Framework open FSharp.Core.UnitTests.LibraryTestFx -[] type SurfaceAreaTest() = [] - member this.VerifyArea() = + member this.VerifyArea(): unit = let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) @@ -33,13 +28,9 @@ Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) @@ -49,24 +40,16 @@ Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, In Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) @@ -75,7 +58,6 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) @@ -84,20 +66,19 @@ Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] AllPairs[T1,T2](T1[], T2[]) @@ -111,10 +92,8 @@ Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](M Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) @@ -189,19 +168,11 @@ Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -228,7 +199,6 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FShar Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpList`1[T]: T Head Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] @@ -239,6 +209,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Col Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean TryGetValue(TKey, TValue ByRef) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() @@ -246,9 +217,7 @@ Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean TryGetValue(TKey, TValue ByRef) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -268,23 +237,17 @@ Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharp Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) @@ -293,7 +256,6 @@ Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Col Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -345,23 +307,21 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) @@ -388,12 +348,10 @@ Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.F Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Int32 Count[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -407,10 +365,8 @@ Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKe Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) @@ -418,7 +374,6 @@ Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) @@ -427,12 +382,12 @@ Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Ge Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) @@ -490,13 +445,10 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) @@ -523,7 +475,6 @@ Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FS Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -532,7 +483,6 @@ Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FS Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -549,62 +499,38 @@ Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1 Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean IsCancellationRequested Microsoft.FSharp.Control.AsyncActivation`1[T]: Boolean get_IsCancellationRequested() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnCancellation() -Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() Microsoft.FSharp.Control.AsyncActivation`1[T]: Microsoft.FSharp.Control.AsyncReturn OnSuccess(T) -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.String ToString() -Microsoft.FSharp.Control.AsyncActivation`1[T]: System.Type GetType() -Microsoft.FSharp.Control.AsyncPrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncPrimitives: Int32 GetHashCode() +Microsoft.FSharp.Control.AsyncActivation`1[T]: Void OnExceptionRaised() Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Bind[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[TResult], Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn CallThenInvoke[T,TResult](Microsoft.FSharp.Control.AsyncActivation`1[T], TResult, Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Control.FSharpAsync`1[T]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn Invoke[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Control.AsyncActivation`1[T]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryFinally[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.AsyncReturn TryWith[T](Microsoft.FSharp.Control.AsyncActivation`1[T], Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]]) Microsoft.FSharp.Control.AsyncPrimitives: Microsoft.FSharp.Control.FSharpAsync`1[T] MakeAsync[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.AsyncActivation`1[T],Microsoft.FSharp.Control.AsyncReturn]) -Microsoft.FSharp.Control.AsyncPrimitives: System.String ToString() -Microsoft.FSharp.Control.AsyncPrimitives: System.Type GetType() -Microsoft.FSharp.Control.AsyncReturn: Boolean Equals(System.Object) -Microsoft.FSharp.Control.AsyncReturn: Int32 GetHashCode() -Microsoft.FSharp.Control.AsyncReturn: System.String ToString() -Microsoft.FSharp.Control.AsyncReturn: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] Choice[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]]]) @@ -629,20 +555,16 @@ Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartImmediateAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() @@ -654,61 +576,25 @@ Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsyn Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) @@ -720,8 +606,6 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Contro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) @@ -731,15 +615,9 @@ Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Micro Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) @@ -747,166 +625,52 @@ Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,T Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.ByRefKinds+In: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+In: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+In: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+In: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+InOut: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+InOut: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+InOut: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds+Out: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds+Out: Int32 GetHashCode() -Microsoft.FSharp.Core.ByRefKinds+Out: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds+Out: System.Type GetType() -Microsoft.FSharp.Core.ByRefKinds: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ByRefKinds: Int32 GetHashCode() Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+In Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+InOut Microsoft.FSharp.Core.ByRefKinds: Microsoft.FSharp.Core.ByRefKinds+Out -Microsoft.FSharp.Core.ByRefKinds: System.String ToString() -Microsoft.FSharp.Core.ByRefKinds: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance @@ -914,61 +678,27 @@ Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.Comp Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() @@ -988,65 +718,29 @@ Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.Paramete Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() -Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) @@ -1057,99 +751,41 @@ Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFo Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() -Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() -Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind -Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() -Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name -Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() -Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) @@ -1158,68 +794,22 @@ Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() @@ -1230,8 +820,6 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IReadOnlyDictionary`2[TKey,TValue] CreateReadOnlyDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -1258,8 +846,6 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) @@ -1276,16 +862,10 @@ Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1305,8 +885,6 @@ Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice` Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1323,8 +901,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1343,8 +919,6 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) @@ -1363,17 +937,11 @@ Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1397,8 +965,6 @@ Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoi Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1417,8 +983,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1439,8 +1003,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1461,8 +1023,6 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) @@ -1483,18 +1043,12 @@ Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode( Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1522,8 +1076,6 @@ Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpC Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1544,8 +1096,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1568,8 +1118,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1592,8 +1140,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1616,8 +1162,6 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) @@ -1640,19 +1184,13 @@ Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCo Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1684,8 +1222,6 @@ Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSha Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1708,8 +1244,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1734,8 +1268,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1760,8 +1292,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1786,8 +1316,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1812,8 +1340,6 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) @@ -1838,20 +1364,14 @@ Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHas Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1887,8 +1407,6 @@ Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.F Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -1913,8 +1431,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1941,8 +1457,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1969,8 +1483,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -1997,8 +1509,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2025,8 +1535,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2053,8 +1561,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) @@ -2081,11 +1587,8 @@ Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Get Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 @@ -2093,9 +1596,6 @@ Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2135,43 +1635,25 @@ Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Cor Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2191,7 +1673,6 @@ Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] op_Implicit(T) Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpOption`1[T]: T Value Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) @@ -2203,8 +1684,6 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpRef`1[T]: T Value Microsoft.FSharp.Core.FSharpRef`1[T]: T contents Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ @@ -2213,12 +1692,8 @@ Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Error -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: Int32 Ok -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2236,21 +1711,25 @@ Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2+Tags[T,TError] Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewError(TError) Microsoft.FSharp.Core.FSharpResult`2[T,TError]: Microsoft.FSharp.Core.FSharpResult`2[T,TError] NewOk(T) -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.String ToString() -Microsoft.FSharp.Core.FSharpResult`2[T,TError]: System.Type GetType() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T ResultValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: T get_ResultValue() Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError ErrorValue Microsoft.FSharp.Core.FSharpResult`2[T,TError]: TError get_ErrorValue() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueNone Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: Int32 ValueSome -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsNone +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsSome +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueNone +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueSome +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsNone() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsSome() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueNone() +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueSome() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 CompareTo(System.Object) Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) @@ -2259,87 +1738,47 @@ Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 GetHashCode(System.Collectio Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 Tag Microsoft.FSharp.Core.FSharpValueOption`1[T]: Int32 get_Tag() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1+Tags[T] -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] ValueNone -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueNone -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsValueSome -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueNone() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsValueSome() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] NewValueSome(T) +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] None +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] Some(T) +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] ValueNone +Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_ValueNone() Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: System.Type GetType() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Item Microsoft.FSharp.Core.FSharpValueOption`1[T]: T Value Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Item() Microsoft.FSharp.Core.FSharpValueOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsNone -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean IsSome -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsNone() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Boolean get_IsSome() -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] None -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] Some(T) -Microsoft.FSharp.Core.FSharpValueOption`1[T]: Microsoft.FSharp.Core.FSharpValueOption`1[T] get_None() -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() -Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit] FromAction(System.Action) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] FromAction[T](System.Action`1[T]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.Unit]]] FromAction[T1,T2,T3](System.Action`3[T1,T2,T3]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.Unit]]]] FromAction[T1,T2,T3,T4](System.Action`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,Microsoft.FSharp.Core.Unit]]]]] FromAction[T1,T2,T3,T4,T5](System.Action`5[T1,T2,T3,T4,T5]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T] FromFunc[T](System.Func`1[T]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromFunc[T,TResult](System.Func`2[T,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FromFunc[T1,T2,T3,TResult](System.Func`4[T1,T2,T3,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FromFunc[T1,T2,T3,T4,TResult](System.Func`5[T1,T2,T3,T4,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FromFunc[T1,T2,T3,T4,T5,TResult](System.Func`6[T1,T2,T3,T4,T5,TResult]) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] FromAction[T](System.Action`1[T]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromFunc[T,TResult](System.Func`2[T,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] ToFSharpFunc[T,TResult](System.Converter`2[T,TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,Microsoft.FSharp.Core.Unit]]]]] FromAction[T1,T2,T3,T4,T5](System.Action`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FromFunc[T1,T2,T3,T4,T5,TResult](System.Func`6[T1,T2,T3,T4,T5,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.Unit]]]] FromAction[T1,T2,T3,T4](System.Action`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FromFunc[T1,T2,T3,T4,TResult](System.Func`5[T1,T2,T3,T4,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.Unit]]] FromAction[T1,T2,T3](System.Action`3[T1,T2,T3]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FromFunc[T1,T2,T3,TResult](System.Func`4[T1,T2,T3,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]] FromAction[T1,T2](System.Action`2[T1,T2]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FromFunc[T1,T2,TResult](System.Func`3[T1,T2,TResult]) Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) @@ -2364,19 +1803,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonInt Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) @@ -2392,17 +1824,12 @@ Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T]( Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) @@ -2418,7 +1845,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) @@ -2442,8 +1868,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer G Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) @@ -2460,14 +1884,6 @@ Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,T Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) @@ -2475,108 +1891,35 @@ Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 HResult Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() Microsoft.FSharp.Core.MatchFailureException: Void .ctor() Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) @@ -2585,7 +1928,6 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) @@ -2593,17 +1935,12 @@ Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() -Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) @@ -2627,8 +1964,6 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.I Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) @@ -2666,16 +2001,11 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,] Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) @@ -2693,7 +2023,6 @@ Microsoft.FSharp.Core.Operators: Double get_Infinity() Microsoft.FSharp.Core.Operators: Double get_NaN() Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() @@ -2723,20 +2052,13 @@ Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_ Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) -Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() Microsoft.FSharp.Core.Operators: System.IO.TextReader ConsoleIn[T]() +Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleOut[T]() -Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + -#if DEBUG - @" -Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + -#endif - @" -Microsoft.FSharp.Core.Operators: System.String ToString() +Microsoft.FSharp.Core.Operators: System.Object Box[T](T) Microsoft.FSharp.Core.Operators: System.String ToString[T](T) Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() Microsoft.FSharp.Core.Operators: T Abs[T](T) @@ -2807,54 +2129,32 @@ Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef` Microsoft.FSharp.Core.Operators: Void Ignore[T](T) Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() Microsoft.FSharp.Core.OptionModule: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpOption`1[T1], Microsoft.FSharp.Core.FSharpOption`1[T2]) @@ -2867,8 +2167,6 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfOb Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpOption`1[T]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpOption`1[T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2877,63 +2175,15 @@ Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.C Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Int32 GetHashCode() -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: System.String ToString() -Microsoft.FSharp.Core.ValueOption: System.Type GetType() -Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) -Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) @@ -2947,77 +2197,21 @@ Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FShar Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() -Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) Microsoft.FSharp.Core.SealedAttribute: Boolean Value Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() Microsoft.FSharp.Core.SealedAttribute: Void .ctor() Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception @@ -3031,16 +2225,8 @@ Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstruc Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) @@ -3049,100 +2235,44 @@ Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FS Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() +Microsoft.FSharp.Core.ValueOption: Boolean Contains[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Int32 Count[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpValueOption`1[TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Core.FSharpValueOption`1[T1], Microsoft.FSharp.Core.FSharpValueOption`1[T2], Microsoft.FSharp.Core.FSharpValueOption`1[T3]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] Flatten[T](Microsoft.FSharp.Core.FSharpValueOption`1[Microsoft.FSharp.Core.FSharpValueOption`1[T]]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElseWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.FSharpValueOption`1[T]], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Microsoft.FSharp.Core.FSharpValueOption`1[T] OrElse[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T DefaultValue[T](T, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T DefaultWith[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T GetValue[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T ToObj[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpValueOption`1[T], TState) +Microsoft.FSharp.Core.ValueOption: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: T[] ToArray[T](Microsoft.FSharp.Core.FSharpValueOption`1[T]) +Microsoft.FSharp.Core.ValueOption: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpValueOption`1[T]) Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() -Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() -Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) @@ -3163,9 +2293,6 @@ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[ Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) -Microsoft.FSharp.Linq.NullableModule: System.String ToString() -Microsoft.FSharp.Linq.NullableModule: System.Type GetType() -Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) @@ -3184,7 +2311,6 @@ Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](Sys Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) -Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) @@ -3200,14 +2326,10 @@ Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQm Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) -Microsoft.FSharp.Linq.NullableOperators: System.String ToString() -Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) -Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) -Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) @@ -3240,8 +2362,6 @@ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[ Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) -Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() -Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) @@ -3255,43 +2375,19 @@ Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Li Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() -Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() -Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 @@ -3299,10 +2395,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 @@ -3312,10 +2404,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 @@ -3327,10 +2415,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_I Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 @@ -3344,10 +2428,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 ge Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 @@ -3363,10 +2443,6 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 @@ -3384,40 +2460,26 @@ Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() -Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) -Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: T& ToByRefInlined[T](IntPtr) Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfVoidPtrInlined[T](Void*) Microsoft.FSharp.NativeInterop.NativePtrModule: Void* ToVoidPtrInlined[T](IntPtr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) @@ -3441,14 +2503,8 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3507,7 +2563,6 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1 Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) @@ -3522,7 +2577,6 @@ Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpE Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) @@ -3533,12 +2587,9 @@ Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Glo Microsoft.FSharp.Quotations.FSharpVar: System.String Name Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() Microsoft.FSharp.Quotations.FSharpVar: System.Type Type Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3575,13 +2626,9 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) @@ -3597,30 +2644,22 @@ Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.Member Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeStructTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Reflection.Assembly, System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) @@ -3641,11 +2680,9 @@ Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.O Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag @@ -3658,12 +2695,11 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -" +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType()" #if CROSS_PLATFORM_COMPILER - () // disabled because of slight order and GetMember discrepencies + () #else SurfaceArea.verify expected "net40" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) + () #endif diff --git a/tests/fsharpqa/Source/Misc/LongSourceFile01.fs b/tests/fsharpqa/Source/Misc/LongSourceFile01.fs deleted file mode 100644 index 8d4c0cd35f..0000000000 --- a/tests/fsharpqa/Source/Misc/LongSourceFile01.fs +++ /dev/null @@ -1,3044 +0,0 @@ -// #Regression #Misc -// -// Regression for Dev10:841369 -// Intra assembly tail calls weren't being taken which caused a stackoverflow exception in the compiler (also taking down the IDE) - -namespace FSharp.Core.UnitTests.SurfaceArea - -//open NUnit.Framework - -//[] -type SurfaceAreaTest() = -// [] - member this.VerifyArea() = - let file = typeof.Assembly.Location - let asm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(file) - if asm.ImageRuntimeVersion.[1] = '2' then // v2.0.50727 - we only want this test to run as 2.0 (nu20), not FSharp.Core 2.0 on CLR 4.0 (nu20on40) - let referenced = asm.GetReferencedAssemblies() - - for ref in referenced do - System.Reflection.Assembly.ReflectionOnlyLoad(ref.FullName) |> ignore - - let types = asm.GetExportedTypes() - - let actual = new System.Text.StringBuilder() - actual.Append("\r\n") |> ignore - - let values = - types - |> Array.collect (fun t -> t.GetMembers()) - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - |> Array.sort - |> Array.iter (fun s -> actual.Append(s) |> ignore - actual.Append("\r\n") |> ignore) - - let expected = @" -Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: System.String ToString() -Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) -Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Copy[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] CreateBased[T](Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array2DModule: T[,] Create[T](Int32, Int32, T) -Microsoft.FSharp.Collections.Array2DModule: T[,] InitializeBased[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Initialize[T](Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) -Microsoft.FSharp.Collections.Array2DModule: T[,] Rebase[T](T[,]) -Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreateBased[T](Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreate[T](Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T[,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) -Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) -Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) -Microsoft.FSharp.Collections.Array3DModule: System.String ToString() -Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: T[,,] Create[T](Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array3DModule: T[,,] Initialize[T](Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]) -Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) -Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) -Microsoft.FSharp.Collections.Array4DModule: System.String ToString() -Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() -Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) -Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) -Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: System.String ToString() -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) -Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) -Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() -Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) -Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T Sum[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) -Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) -Microsoft.FSharp.Collections.ArrayModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], T1[], T2[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) -Microsoft.FSharp.Collections.ArrayModule: TState[] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) -Microsoft.FSharp.Collections.ArrayModule: TState[] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) -Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) -Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() -Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) -Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) -Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) -Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) -Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[]) -Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) -Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) -Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) -Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() -Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsCons -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsCons() -Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Length -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Tag -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Length() -Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() -Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpList`1[T]: T Head -Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault -Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Head() -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_HeadOrDefault() -Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Item(Int32) -Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) -Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Contains(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsEmpty -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean get_IsEmpty() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 Count -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 get_Count() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Add(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove(T) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() -Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() -Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement -Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement -Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() -Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() -Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() -Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() -Microsoft.FSharp.Collections.HashIdentity: System.String ToString() -Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() -Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.String ToString() -Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) -Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) -Microsoft.FSharp.Collections.ListModule: System.Type GetType() -Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) -Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T Sum[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], TState) -Microsoft.FSharp.Collections.ListModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) -Microsoft.FSharp.Collections.ListModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) -Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Empty[TKey,T]() -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Filter[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfArray[TKey,T](System.Tuple`2[TKey,T][]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfList[TKey,T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfSeq[TKey,T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Remove[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKey] TryFindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.String ToString() -Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: System.Type GetType() -Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) -Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) -Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cast[T](System.Collections.IEnumerable) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Concat[TCollection,T](System.Collections.Generic.IEnumerable`1[TCollection]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Collections.Generic.IEnumerable`1[T]]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) -Microsoft.FSharp.Collections.SeqModule: System.String ToString() -Microsoft.FSharp.Collections.SeqModule: System.Type GetType() -Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) -Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) -Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsProperSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Difference[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Empty[T]() -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] IntersectMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Intersect[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfArray[T](T[]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Singleton[T](T) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) -Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.String ToString() -Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: System.Type GetType() -Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) -Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) -Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) -Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.CommonExtensions: System.String ToString() -Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() -Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) -Microsoft.FSharp.Control.EventModule: System.String ToString() -Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.EventModule: System.Type GetType() -Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) -Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToNewThread() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToThreadPool() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitIAsyncResult(System.IAsyncResult, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitWaitHandle(System.Threading.WaitHandle, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.IDisposable] OnCancel(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] CancellationToken -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] get_CancellationToken() -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T[]] Parallel[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitEvent[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,TArg3,T](TArg1, TArg2, TArg3, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[TArg1,TArg2,TArg3,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,T](TArg1, TArg2, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[TArg1,TArg2,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,T](TArg1, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg1,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsync: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken -Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() -Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() -Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Bind[T,TResult](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Combine[T](Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] ReturnFrom[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() -Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() -Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish -Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() -Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() -Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() -Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TReply]] PostAndTryAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] TryScan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TMsg] Receive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TReply] PostAndAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[T] Scan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start() -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) -Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) -Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) -Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) -Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) -Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Control.LazyExtensions: System.String ToString() -Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() -Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) -Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) -Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() -Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.String ToString() -Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) -Microsoft.FSharp.Control.ObservableModule: System.Type GetType() -Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) -Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) -Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() -Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) -Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) -Microsoft.FSharp.Control.WebExtensions: System.String ToString() -Microsoft.FSharp.Control.WebExtensions: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() -Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() -Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() -Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path -Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() -Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() -Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() -Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value -Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() -Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() -Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() -Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId -Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() -Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() -Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() -Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId -Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ClassAttribute: System.String ToString() -Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() -Microsoft.FSharp.Core.ClassAttribute: Void .ctor() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() -Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() -Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() -Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags -Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) -Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags ModuleSuffix -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static -Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() -Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName -Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() -Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() -Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() -Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber -Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() -Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() -Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) -Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) -Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() -Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() -Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() -Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() -Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() -Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() -Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() -Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId -Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() -Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() -Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() -Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId -Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message -Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() -Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() -Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() -Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder -Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() -Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() -Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() -Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToString[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice1Of2 -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice2Of2 -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice1Of2() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice2Of2() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice1Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice2Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice3Of3 -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice1Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice2Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice3Of3() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3] -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice1Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice2Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice3Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice4Of4 -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4] -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice1Of4(T1) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5] -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice1Of5(T1) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice2Of5(T2) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item -Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6] -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice1Of6(T1) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice2Of6(T2) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice3Of6(T3) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item -Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7] -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice1Of7(T1) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice2Of7(T2) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice3Of7(T3) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice4Of7(T4) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] FromConverter(System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] op_Implicit(System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] ToConverter(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Converter`2[T,TResult] op_Implicit(Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) -Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() -Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsNone -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsSome -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsNone(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsSome(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetTag(Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Tags[T] -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) -Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpOption`1[T]: T Value -Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() -Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() -Microsoft.FSharp.Core.FSharpRef`1[T]: T Value -Microsoft.FSharp.Core.FSharpRef`1[T]: T contents -Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ -Microsoft.FSharp.Core.FSharpRef`1[T]: T get_Value() -Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() -Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) -Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) -Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() -Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() -Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() -Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) -Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,TResult] ToFSharpFunc[T,TResult](System.Converter`2[T,TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) -Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) -Microsoft.FSharp.Core.FuncConvert: System.String ToString() -Microsoft.FSharp.Core.FuncConvert: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() -Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() -Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId -Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() -Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() -Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() -Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityERIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterOrEqualIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterThanIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessOrEqualIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessThanIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean PhysicalEqualityIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple2[T1,T2](System.Collections.IComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple3[T1,T2,T3](System.Collections.IComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple4[T1,T2,T3,T4](System.Collections.IComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple5[T1,T2,T3,T4,T5](System.Collections.IComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5]) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonIntrinsic[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray3D[T](T[,,], Int32, Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray4D[T](T[,,,], Int32, Int32, Int32, Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray[T](T[], Int32) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxFast[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxGeneric[T](System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void Dispose[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailInit() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailStaticInit() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T](T[,], Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterOrEqual[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterThan[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessOrEqual[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessThan[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Boolean PhysicalEquality[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Double FloatWithMeasure(Double) -Microsoft.FSharp.Core.LanguagePrimitives: Int16 Int16WithMeasure(Int16) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparisonWithComparer[T](System.Collections.IComparer, T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() -Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) -Microsoft.FSharp.Core.LanguagePrimitives: Int64 Int64WithMeasure(Int64) -Microsoft.FSharp.Core.LanguagePrimitives: Int64 ParseInt64(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+HashCompare -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions -Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators -Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) -Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer get_GenericComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityERComparer -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() -Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) -Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() -Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() -Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) -Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) -Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericMaximum[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericMinimum[T](T, T) -Microsoft.FSharp.Core.LanguagePrimitives: T GenericOneDynamic[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericOne[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericZeroDynamic[T]() -Microsoft.FSharp.Core.LanguagePrimitives: T GenericZero[T]() -Microsoft.FSharp.Core.LanguagePrimitives: TEnum EnumOfValue[T,TEnum](T) -Microsoft.FSharp.Core.LanguagePrimitives: TResult AdditionDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedAdditionDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) -Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) -Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) -Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId -Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() -Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() -Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() -Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 -Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 -Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() -Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) -Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() -Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data -Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() -Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() -Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException -Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite -Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() -Microsoft.FSharp.Core.MatchFailureException: System.String Data0 -Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink -Microsoft.FSharp.Core.MatchFailureException: System.String Message -Microsoft.FSharp.Core.MatchFailureException: System.String Source -Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace -Microsoft.FSharp.Core.MatchFailureException: System.String ToString() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() -Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() -Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() -Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() -Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() -Microsoft.FSharp.Core.MatchFailureException: Void .ctor() -Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) -Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) -Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() -Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId -Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() -Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() -Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) -Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() -Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) -Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() -Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI -Microsoft.FSharp.Core.NumericLiterals: System.String ToString() -Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) -Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) -Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) -Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators+Checked: System.String ToString() -Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() -Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: T3 op_Subtraction[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) -Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) -Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) -Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: IntPtr PowIntPtr(IntPtr, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: SByte PowSByte(SByte, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Single PowSingle(Single, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Byte] RangeByte(Byte, Byte, Byte) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Char] RangeChar(Char, Char) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Double] RangeDouble(Double, Double, Double) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int16] RangeInt16(Int16, Int16, Int16) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int32] RangeInt32(Int32, Int32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int64] RangeInt64(Int64, Int64, Int64) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.IntPtr] RangeIntPtr(IntPtr, IntPtr, IntPtr) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.SByte] RangeSByte(SByte, SByte, SByte) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Single] RangeSingle(Single, Single, Single) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt16] RangeUInt16(UInt16, UInt16, UInt16) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt32] RangeUInt32(UInt32, UInt32, UInt32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt64] RangeUInt64(UInt64, UInt64, UInt64) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UIntPtr] RangeUIntPtr(UIntPtr, UIntPtr, UIntPtr) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AtanDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CeilingDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CosDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CoshDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T ExpDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T FloorDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T Log10Dynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T LogDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowDynamic[T,TResult](T, TResult) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T RoundDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinhDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanhDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TruncateDynamic[T](T) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T1) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) -Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() -Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() -Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() -Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) -Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_GreaterThan[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_Inequality[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T) -Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T) -Microsoft.FSharp.Core.Operators: Byte ToByte[T](T) -Microsoft.FSharp.Core.Operators: Char ToChar[T](T) -Microsoft.FSharp.Core.Operators: Double Infinity -Microsoft.FSharp.Core.Operators: Double NaN -Microsoft.FSharp.Core.Operators: Double ToDouble[T](T) -Microsoft.FSharp.Core.Operators: Double get_Infinity() -Microsoft.FSharp.Core.Operators: Double get_NaN() -Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) -Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) -Microsoft.FSharp.Core.Operators: Int32 GetHashCode() -Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) -Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) -Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() -Microsoft.FSharp.Core.Operators: Int32 ToInt32[T](T) -Microsoft.FSharp.Core.Operators: Int32 ToInt[T](T) -Microsoft.FSharp.Core.Operators: Int32 limitedHash[T](Int32, T) -Microsoft.FSharp.Core.Operators: Int64 ToInt64[T](T) -Microsoft.FSharp.Core.Operators: IntPtr ToIntPtr[T](T) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op_Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics -Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked -Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) -Microsoft.FSharp.Core.Operators: Single InfinitySingle -Microsoft.FSharp.Core.Operators: Single NaNSingle -Microsoft.FSharp.Core.Operators: Single ToSingle[T](T) -Microsoft.FSharp.Core.Operators: Single get_InfinitySingle() -Microsoft.FSharp.Core.Operators: Single get_NaNSingle() -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T]) -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep[T,TStep](T, TStep, T) -Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) -Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) -Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) -Microsoft.FSharp.Core.Operators: System.IO.TextReader ConsoleIn[T]() -Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() -Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleOut[T]() -Microsoft.FSharp.Core.Operators: System.Object Box[T](T) -Microsoft.FSharp.Core.Operators: System.String ToString() -Microsoft.FSharp.Core.Operators: System.String ToString[T](T) -Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) -Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) -Microsoft.FSharp.Core.Operators: System.Type GetType() -Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() -Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() -Microsoft.FSharp.Core.Operators: T Abs[T](T) -Microsoft.FSharp.Core.Operators: T Acos[T](T) -Microsoft.FSharp.Core.Operators: T Asin[T](T) -Microsoft.FSharp.Core.Operators: T Atan[T](T) -Microsoft.FSharp.Core.Operators: T Ceiling[T](T) -Microsoft.FSharp.Core.Operators: T Cos[T](T) -Microsoft.FSharp.Core.Operators: T Cosh[T](T) -Microsoft.FSharp.Core.Operators: T DefaultArg[T](Microsoft.FSharp.Core.FSharpOption`1[T], T) -Microsoft.FSharp.Core.Operators: T DefaultValueArg[T](Microsoft.FSharp.Core.FSharpValueOption`1[T], T) -Microsoft.FSharp.Core.Operators: T Exit[T](Int32) -Microsoft.FSharp.Core.Operators: T Exp[T](T) -Microsoft.FSharp.Core.Operators: T FailWith[T](System.String) -Microsoft.FSharp.Core.Operators: T Floor[T](T) -Microsoft.FSharp.Core.Operators: T Identity[T](T) -Microsoft.FSharp.Core.Operators: T InvalidArg[T](System.String, System.String) -Microsoft.FSharp.Core.Operators: T InvalidOp[T](System.String) -Microsoft.FSharp.Core.Operators: T Lock[TLock,T](TLock, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) -Microsoft.FSharp.Core.Operators: T Log10[T](T) -Microsoft.FSharp.Core.Operators: T Log[T](T) -Microsoft.FSharp.Core.Operators: T Max[T](T, T) -Microsoft.FSharp.Core.Operators: T Min[T](T, T) -Microsoft.FSharp.Core.Operators: T NullArg[T](System.String) -Microsoft.FSharp.Core.Operators: T PowInteger[T](T, Int32) -Microsoft.FSharp.Core.Operators: T Raise[T](System.Exception) -Microsoft.FSharp.Core.Operators: T Reraise[T]() -Microsoft.FSharp.Core.Operators: T Rethrow[T]() -Microsoft.FSharp.Core.Operators: T Round[T](T) -Microsoft.FSharp.Core.Operators: T Sin[T](T) -Microsoft.FSharp.Core.Operators: T Sinh[T](T) -Microsoft.FSharp.Core.Operators: T Tan[T](T) -Microsoft.FSharp.Core.Operators: T Tanh[T](T) -Microsoft.FSharp.Core.Operators: T Truncate[T](T) -Microsoft.FSharp.Core.Operators: T Unbox[T](System.Object) -Microsoft.FSharp.Core.Operators: T op_BitwiseAnd[T](T, T) -Microsoft.FSharp.Core.Operators: T op_BitwiseOr[T](T, T) -Microsoft.FSharp.Core.Operators: T op_Dereference[T](Microsoft.FSharp.Core.FSharpRef`1[T]) -Microsoft.FSharp.Core.Operators: T op_ExclusiveOr[T](T, T) -Microsoft.FSharp.Core.Operators: T op_Exponentiation[T,TResult](T, TResult) -Microsoft.FSharp.Core.Operators: T op_LeftShift[T](T, Int32) -Microsoft.FSharp.Core.Operators: T op_LogicalNot[T](T) -Microsoft.FSharp.Core.Operators: T op_RightShift[T](T, Int32) -Microsoft.FSharp.Core.Operators: T op_UnaryNegation[T](T) -Microsoft.FSharp.Core.Operators: T op_UnaryPlus[T](T) -Microsoft.FSharp.Core.Operators: T1 Fst[T1,T2](System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.Operators: T2 Atan2[T1,T2](T1, T1) -Microsoft.FSharp.Core.Operators: T2 Snd[T1,T2](System.Tuple`2[T1,T2]) -Microsoft.FSharp.Core.Operators: T3 op_Addition[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Division[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Modulus[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Multiply[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: T3 op_Subtraction[T1,T2,T3](T1, T2) -Microsoft.FSharp.Core.Operators: TResult Sqrt[T,TResult](T) -Microsoft.FSharp.Core.Operators: TResult ToEnum[TResult](Int32) -Microsoft.FSharp.Core.Operators: TResult Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1, T2) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1, T2, T3) -Microsoft.FSharp.Core.Operators: TResult op_PipeLeft[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight2[T1,T2,TResult](T1, T2, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight3[T1,T2,T3,TResult](T1, T2, T3, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.Operators: TResult op_PipeRight[T1,TResult](T1, Microsoft.FSharp.Core.FSharpFunc`2[T1,TResult]) -Microsoft.FSharp.Core.Operators: UInt16 ToUInt16[T](T) -Microsoft.FSharp.Core.Operators: UInt32 ToUInt32[T](T) -Microsoft.FSharp.Core.Operators: UInt64 ToUInt64[T](T) -Microsoft.FSharp.Core.Operators: UIntPtr ToUIntPtr[T](T) -Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) -Microsoft.FSharp.Core.Operators: Void Ignore[T](T) -Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) -Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() -Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) -Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] -Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] -Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() -Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() -Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: System.String ToString() -Microsoft.FSharp.Core.OptionModule: System.Type GetType() -Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) -Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() -Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() -Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() -Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() -Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) -Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() -Microsoft.FSharp.Core.PrintfModule: System.String ToString() -Microsoft.FSharp.Core.PrintfModule: System.Type GetType() -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatLine[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToError[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilderThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilder[T](System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.PrintfModule: T PrintFormat[T](Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() -Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() -Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() -Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() -Microsoft.FSharp.Core.ResultModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.ResultModule: Int32 GetHashCode() -Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[T,TResult] MapError[TError,TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TError,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Bind[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpResult`2[TResult,TError]], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: Microsoft.FSharp.Core.FSharpResult`2[TResult,TError] Map[T,TResult,TError](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpResult`2[T,TError]) -Microsoft.FSharp.Core.ResultModule: System.String ToString() -Microsoft.FSharp.Core.ResultModule: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.SealedAttribute: Boolean Value -Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() -Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId -Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.SealedAttribute: System.String ToString() -Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() -Microsoft.FSharp.Core.SealedAttribute: Void .ctor() -Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) -Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) -Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() -Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Field -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags KindMask -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Module -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags NonPublicRepresentation -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags None -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags ObjectType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags RecordType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase -Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) -Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) -Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() -Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() -Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) -Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() -Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) -Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) -Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) -Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) -Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) -Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) -Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) -Microsoft.FSharp.Core.StringModule: System.String ToString() -Microsoft.FSharp.Core.StringModule: System.Type GetType() -Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) -Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) -Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructAttribute: System.String ToString() -Microsoft.FSharp.Core.StructAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() -Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) -Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) -Microsoft.FSharp.Core.Unit: Int32 GetHashCode() -Microsoft.FSharp.Core.Unit: System.String ToString() -Microsoft.FSharp.Core.Unit: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId -Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() -Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() -Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() -Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) -Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() -Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() -Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() -Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) -Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() -Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() -Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) -Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) -Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) -Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertyGetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertySetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Int64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.SByte] SBytePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Single] SinglePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.String] StringPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar]],Microsoft.FSharp.Quotations.FSharpExpr]] LambdasPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] ApplicationsPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AndAlsoPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] OrElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() -Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() -Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] TryGetReflectedDefinition(System.Reflection.MethodBase) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressOf(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressSet(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Application(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Applications(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ForIntegerRangeLoop(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr IfThenElse(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Lambda(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Let(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr LetRecursive(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]], Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewArray(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewDelegate(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar], Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewObject(System.Reflection.ConstructorInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewRecord(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewTuple(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewUnionCase(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryWith(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TupleGet(Microsoft.FSharp.Quotations.FSharpExpr, Int32) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) -Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() -Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() -Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type -Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Raw -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr get_Raw() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type -Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.FSharpVar: Boolean IsMutable -Microsoft.FSharp.Quotations.FSharpVar: Boolean get_IsMutable() -Microsoft.FSharp.Quotations.FSharpVar: Int32 GetHashCode() -Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Global(System.String, System.Type) -Microsoft.FSharp.Quotations.FSharpVar: System.String Name -Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() -Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() -Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() -Microsoft.FSharp.Quotations.FSharpVar: System.Type Type -Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() -Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) -Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) -Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AddressSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ApplicationPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] SequentialPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] TryFinallyPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] WhileLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Reflection.UnionCaseInfo]] UnionCaseTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Int32]] TupleGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] CoercePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] TypeTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] LambdaPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] VarSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewUnionCasePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,System.Type]] ValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewObjectPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewArrayPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewRecordPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo,Microsoft.FSharp.Quotations.FSharpExpr]] FieldSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.MethodInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] CallPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) -Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() -Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsRecord(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) -Microsoft.FSharp.Reflection.FSharpType: Boolean IsUnion(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() -Microsoft.FSharp.Reflection.FSharpType: Microsoft.FSharp.Reflection.UnionCaseInfo[] GetUnionCases(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetExceptionFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.Reflection.PropertyInfo[] GetRecordFields(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpType: System.String ToString() -Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() -Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) -Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) -Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] PreComputeUnionTagReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeRecordReader(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeUnionReader(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object] PreComputeRecordFieldReader(System.Reflection.PropertyInfo) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeRecordConstructor(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeTupleConstructor(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeUnionConstructor(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object GetRecordField(System.Object, System.Reflection.PropertyInfo) -Microsoft.FSharp.Reflection.FSharpValue: System.Object GetTupleField(System.Object, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeFunction(System.Type, Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeRecord(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeTuple(System.Object[], System.Type) -Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeUnion(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetExceptionFields(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetRecordFields(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.Object) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.ConstructorInfo PreComputeRecordConstructorInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MemberInfo PreComputeUnionTagMemberInfo(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Reflection.MethodInfo PreComputeUnionConstructorInfo(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] GetUnionFields(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) -Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) -Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag -Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 get_Tag() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes(System.Type) -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Reflection.PropertyInfo[] GetFields() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() -Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() -System.AggregateException: Boolean Equals(System.Object) -System.AggregateException: Int32 GetHashCode() -System.AggregateException: System.Collections.IDictionary Data -System.AggregateException: System.Collections.IDictionary get_Data() -System.AggregateException: System.Collections.ObjectModel.ReadOnlyCollection`1[System.Exception] InnerExceptions -System.AggregateException: System.Collections.ObjectModel.ReadOnlyCollection`1[System.Exception] get_InnerExceptions() -System.AggregateException: System.Exception GetBaseException() -System.AggregateException: System.Exception InnerException -System.AggregateException: System.Exception get_InnerException() -System.AggregateException: System.Reflection.MethodBase TargetSite -System.AggregateException: System.Reflection.MethodBase get_TargetSite() -System.AggregateException: System.String HelpLink -System.AggregateException: System.String Message -System.AggregateException: System.String Source -System.AggregateException: System.String StackTrace -System.AggregateException: System.String ToString() -System.AggregateException: System.String get_HelpLink() -System.AggregateException: System.String get_Message() -System.AggregateException: System.String get_Source() -System.AggregateException: System.String get_StackTrace() -System.AggregateException: System.Type GetType() -System.AggregateException: System.Type GetType() -System.AggregateException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) -System.AggregateException: Void set_HelpLink(System.String) -System.AggregateException: Void set_Source(System.String) -System.Collections.IStructuralComparable: Int32 CompareTo(System.Object, System.Collections.IComparer) -System.Collections.IStructuralEquatable: Boolean Equals(System.Object, System.Collections.IEqualityComparer) -System.Collections.IStructuralEquatable: Int32 GetHashCode(System.Collections.IEqualityComparer) -System.IObservable`1[T]: System.IDisposable Subscribe(System.IObserver`1[T]) -System.IObserver`1[T]: Void OnCompleted() -System.IObserver`1[T]: Void OnError(System.Exception) -System.IObserver`1[T]: Void OnNext(T) -System.Lazy`1[T]: Boolean Equals(System.Object) -System.Lazy`1[T]: Boolean IsValueCreated -System.Lazy`1[T]: Boolean get_IsValueCreated() -System.Lazy`1[T]: Int32 GetHashCode() -System.Lazy`1[T]: System.String ToString() -System.Lazy`1[T]: System.Type GetType() -System.Lazy`1[T]: T Value -System.Lazy`1[T]: T get_Value() -System.Numerics.BigInteger: Boolean Equals(System.Object) -System.Numerics.BigInteger: Boolean IsOne -System.Numerics.BigInteger: Boolean IsZero -System.Numerics.BigInteger: Boolean get_IsOne() -System.Numerics.BigInteger: Boolean get_IsZero() -System.Numerics.BigInteger: Boolean op_Equality(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_GreaterThan(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_GreaterThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_Inequality(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_LessThan(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Boolean op_LessThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: Double op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: Int32 GetHashCode() -System.Numerics.BigInteger: Int32 Sign -System.Numerics.BigInteger: Int32 get_Sign() -System.Numerics.BigInteger: Int32 op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: Int64 op_Explicit(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger Abs(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger DivRem(System.Numerics.BigInteger, System.Numerics.BigInteger, System.Numerics.BigInteger ByRef) -System.Numerics.BigInteger: System.Numerics.BigInteger GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger One -System.Numerics.BigInteger: System.Numerics.BigInteger Parse(System.String) -System.Numerics.BigInteger: System.Numerics.BigInteger Pow(System.Numerics.BigInteger, Int32) -System.Numerics.BigInteger: System.Numerics.BigInteger Zero -System.Numerics.BigInteger: System.Numerics.BigInteger get_One() -System.Numerics.BigInteger: System.Numerics.BigInteger get_Zero() -System.Numerics.BigInteger: System.Numerics.BigInteger op_Addition(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Division(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Modulus(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Multiply(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_Subtraction(System.Numerics.BigInteger, System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryNegation(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryPlus(System.Numerics.BigInteger) -System.Numerics.BigInteger: System.String ToString() -System.Numerics.BigInteger: System.Type GetType() -System.Numerics.BigInteger: Void .ctor(Int32) -System.Numerics.BigInteger: Void .ctor(Int64) -System.Threading.CancellationToken: Boolean Equals(System.Object) -System.Threading.CancellationToken: Boolean Equals(System.Threading.CancellationToken) -System.Threading.CancellationToken: Boolean IsCancellationRequested -System.Threading.CancellationToken: Boolean get_IsCancellationRequested() -System.Threading.CancellationToken: Boolean op_Equality(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationToken: Boolean op_Inequality(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationToken: Int32 GetHashCode() -System.Threading.CancellationToken: System.String ToString() -System.Threading.CancellationToken: System.Threading.CancellationTokenRegistration Register(System.Action`1[System.Object], System.Object) -System.Threading.CancellationToken: System.Type GetType() -System.Threading.CancellationTokenRegistration: Boolean Equals(System.Object) -System.Threading.CancellationTokenRegistration: Boolean Equals(System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Boolean op_Equality(System.Threading.CancellationTokenRegistration, System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Boolean op_Inequality(System.Threading.CancellationTokenRegistration, System.Threading.CancellationTokenRegistration) -System.Threading.CancellationTokenRegistration: Int32 GetHashCode() -System.Threading.CancellationTokenRegistration: System.String ToString() -System.Threading.CancellationTokenRegistration: System.Type GetType() -System.Threading.CancellationTokenRegistration: Void Dispose() -System.Threading.CancellationTokenSource: Boolean Equals(System.Object) -System.Threading.CancellationTokenSource: Int32 GetHashCode() -System.Threading.CancellationTokenSource: System.String ToString() -System.Threading.CancellationTokenSource: System.Threading.CancellationToken Token -System.Threading.CancellationTokenSource: System.Threading.CancellationToken get_Token() -System.Threading.CancellationTokenSource: System.Threading.CancellationTokenSource CreateLinkedTokenSource(System.Threading.CancellationToken, System.Threading.CancellationToken) -System.Threading.CancellationTokenSource: System.Type GetType() -System.Threading.CancellationTokenSource: Void .ctor() -System.Threading.CancellationTokenSource: Void Cancel() -System.Threading.CancellationTokenSource: Void Dispose() -System.Tuple: Boolean Equals(System.Object) -System.Tuple: Int32 GetHashCode() -System.Tuple: System.String ToString() -System.Tuple: System.Tuple`1[T1] Create[T1](T1) -System.Tuple: System.Tuple`2[T1,T2] Create[T1,T2](T1, T2) -System.Tuple: System.Tuple`3[T1,T2,T3] Create[T1,T2,T3](T1, T2, T3) -System.Tuple: System.Tuple`4[T1,T2,T3,T4] Create[T1,T2,T3,T4](T1, T2, T3, T4) -System.Tuple: System.Tuple`5[T1,T2,T3,T4,T5] Create[T1,T2,T3,T4,T5](T1, T2, T3, T4, T5) -System.Tuple: System.Tuple`6[T1,T2,T3,T4,T5,T6] Create[T1,T2,T3,T4,T5,T6](T1, T2, T3, T4, T5, T6) -System.Tuple: System.Tuple`7[T1,T2,T3,T4,T5,T6,T7] Create[T1,T2,T3,T4,T5,T6,T7](T1, T2, T3, T4, T5, T6, T7) -System.Tuple: System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,System.Tuple`1[T8]] Create[T1,T2,T3,T4,T5,T6,T7,T8](T1, T2, T3, T4, T5, T6, T7, T8) -System.Tuple: System.Type GetType() -System.Tuple`1[T1]: Boolean Equals(System.Object) -System.Tuple`1[T1]: Int32 GetHashCode() -System.Tuple`1[T1]: System.String ToString() -System.Tuple`1[T1]: System.Type GetType() -System.Tuple`1[T1]: T1 Item1 -System.Tuple`1[T1]: T1 get_Item1() -System.Tuple`1[T1]: Void .ctor(T1) -System.Tuple`2[T1,T2]: Boolean Equals(System.Object) -System.Tuple`2[T1,T2]: Int32 GetHashCode() -System.Tuple`2[T1,T2]: System.String ToString() -System.Tuple`2[T1,T2]: System.Type GetType() -System.Tuple`2[T1,T2]: T1 Item1 -System.Tuple`2[T1,T2]: T1 get_Item1() -System.Tuple`2[T1,T2]: T2 Item2 -System.Tuple`2[T1,T2]: T2 get_Item2() -System.Tuple`2[T1,T2]: Void .ctor(T1, T2) -System.Tuple`3[T1,T2,T3]: Boolean Equals(System.Object) -System.Tuple`3[T1,T2,T3]: Int32 GetHashCode() -System.Tuple`3[T1,T2,T3]: System.String ToString() -System.Tuple`3[T1,T2,T3]: System.Type GetType() -System.Tuple`3[T1,T2,T3]: T1 Item1 -System.Tuple`3[T1,T2,T3]: T1 get_Item1() -System.Tuple`3[T1,T2,T3]: T2 Item2 -System.Tuple`3[T1,T2,T3]: T2 get_Item2() -System.Tuple`3[T1,T2,T3]: T3 Item3 -System.Tuple`3[T1,T2,T3]: T3 get_Item3() -System.Tuple`3[T1,T2,T3]: Void .ctor(T1, T2, T3) -System.Tuple`4[T1,T2,T3,T4]: Boolean Equals(System.Object) -System.Tuple`4[T1,T2,T3,T4]: Int32 GetHashCode() -System.Tuple`4[T1,T2,T3,T4]: System.String ToString() -System.Tuple`4[T1,T2,T3,T4]: System.Type GetType() -System.Tuple`4[T1,T2,T3,T4]: T1 Item1 -System.Tuple`4[T1,T2,T3,T4]: T1 get_Item1() -System.Tuple`4[T1,T2,T3,T4]: T2 Item2 -System.Tuple`4[T1,T2,T3,T4]: T2 get_Item2() -System.Tuple`4[T1,T2,T3,T4]: T3 Item3 -System.Tuple`4[T1,T2,T3,T4]: T3 get_Item3() -System.Tuple`4[T1,T2,T3,T4]: T4 Item4 -System.Tuple`4[T1,T2,T3,T4]: T4 get_Item4() -System.Tuple`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) -System.Tuple`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) -System.Tuple`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() -System.Tuple`5[T1,T2,T3,T4,T5]: System.String ToString() -System.Tuple`5[T1,T2,T3,T4,T5]: System.Type GetType() -System.Tuple`5[T1,T2,T3,T4,T5]: T1 Item1 -System.Tuple`5[T1,T2,T3,T4,T5]: T1 get_Item1() -System.Tuple`5[T1,T2,T3,T4,T5]: T2 Item2 -System.Tuple`5[T1,T2,T3,T4,T5]: T2 get_Item2() -System.Tuple`5[T1,T2,T3,T4,T5]: T3 Item3 -System.Tuple`5[T1,T2,T3,T4,T5]: T3 get_Item3() -System.Tuple`5[T1,T2,T3,T4,T5]: T4 Item4 -System.Tuple`5[T1,T2,T3,T4,T5]: T4 get_Item4() -System.Tuple`5[T1,T2,T3,T4,T5]: T5 Item5 -System.Tuple`5[T1,T2,T3,T4,T5]: T5 get_Item5() -System.Tuple`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: System.String ToString() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T1 Item1 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T2 Item2 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T2 get_Item2() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T3 Item3 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T3 get_Item3() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T4 Item4 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T4 get_Item4() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T5 Item5 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T5 get_Item5() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T6 Item6 -System.Tuple`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() -System.Tuple`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item2() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T3 Item3 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item3() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T4 Item4 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item4() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T5 Item5 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item5() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T6 Item6 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item6() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() -System.Tuple`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Boolean Equals(System.Object) -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Int32 GetHashCode() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: System.String ToString() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: System.Type GetType() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T1 Item1 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T1 get_Item1() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T2 Item2 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T2 get_Item2() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T3 Item3 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T3 get_Item3() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T4 Item4 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T4 get_Item4() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T5 Item5 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T5 get_Item5() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T6 Item6 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T6 get_Item6() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T7 Item7 -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: T7 get_Item7() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest Rest -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest get_Rest() -System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, TRest) -" - - let act = actual.ToString() - if expected <> act then - printf "%s" act -// Assert.AreEqual(expected, act) diff --git a/tests/fsharpqa/Source/Misc/env.lst b/tests/fsharpqa/Source/Misc/env.lst index 7f35d3e171..b9e1216594 100644 --- a/tests/fsharpqa/Source/Misc/env.lst +++ b/tests/fsharpqa/Source/Misc/env.lst @@ -24,7 +24,6 @@ NOMONO SOURCE=WhetherEmbededManifest.fs # WhetherEmbededManifest.fs SOURCE="FileWithSameNameDiffExt.fs FileWithSameNameDiffExt.fsx" # FileWithSameNameDiffExt SOURCE=E_CompiledName.fs SCFLAGS="-a --test:ErrorRanges --flaterrors" # E_CompiledName.fs - SOURCE=LongSourceFile01.fs COMPILE_ONLY=1 # LongSourceFile01.fs SOURCE=AsyncOperations.fs 6448.fs # 6448.fs NoMT SOURCE=SerializableClosure01.fs # SerializableClosure01.fs From 816aaa9f3cc1d35c0b589bdc4339e40830ba5d3b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2019 17:19:05 +0000 Subject: [PATCH 020/146] Update dependencies from https://github.com/dotnet/arcade build 20190808.13 (#7371) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19408.13 --- NuGet.config | 2 -- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/NuGet.config b/NuGet.config index 02fa667590..df85afb048 100644 --- a/NuGet.config +++ b/NuGet.config @@ -22,8 +22,6 @@ - - diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 7f2a151da6..e812a2affc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 77597ba7f484bef24368d966b7fe91fe38ec973b + 524bb3e06ffd5b483a3c71a8f670b7a4bd2c232a diff --git a/global.json b/global.json index 914aa37a7d..d59ddadcfd 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19407.9", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19408.13", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 03538255e20a0bff7b2427d95b22bd9233838c0b Mon Sep 17 00:00:00 2001 From: Sergey Tihon Date: Fri, 9 Aug 2019 20:39:01 +0300 Subject: [PATCH 021/146] Moved CodeGen/EmittedIL/Mutation over to NUnit (#7352) * raw code-gen Mutable tests copy-paste * Allow to use code snippets with warnings in tests * Replace random/temp assembly name by `asmName` in generated IL * map `System.Runtime` types to `mscorlib` for .NET Core tests * allow to use IL from full framework and .net core as `expected IL` * remove old tests * Different error messages for `not found` expected IL and not `not fully found` IL * CompilerAssert.CompileLibraryAndVerifyILWithOptions and expected IL update * Added `-g` option * Reverted back unused variable --- .../Compiler/CodeGen/EmittedIL/Mutation.fs | 360 ++++++++++++++++++ tests/fsharp/Compiler/CompilerAssert.fs | 20 +- tests/fsharp/Compiler/ILChecker.fs | 49 ++- tests/fsharp/FSharpSuite.Tests.fsproj | 1 + .../CodeGen/EmittedIL/Mutation/Mutation01.fs | 19 - .../EmittedIL/Mutation/Mutation01.il.bsl | 322 ---------------- .../CodeGen/EmittedIL/Mutation/Mutation02.fs | 5 - .../EmittedIL/Mutation/Mutation02.il.bsl | 108 ------ .../CodeGen/EmittedIL/Mutation/Mutation03.fs | 5 - .../EmittedIL/Mutation/Mutation03.il.bsl | 107 ------ .../CodeGen/EmittedIL/Mutation/Mutation04.fs | 5 - .../EmittedIL/Mutation/Mutation04.il.bsl | 108 ------ .../CodeGen/EmittedIL/Mutation/Mutation05.fs | 13 - .../EmittedIL/Mutation/Mutation05.il.bsl | 244 ------------ .../Source/CodeGen/EmittedIL/Mutation/env.lst | 7 - .../CodeGen/EmittedIL/Mutation/keep.lst | 1 - 16 files changed, 405 insertions(+), 969 deletions(-) create mode 100644 tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst delete mode 100644 tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/keep.lst diff --git a/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs new file mode 100644 index 0000000000..f90d93b5d4 --- /dev/null +++ b/tests/fsharp/Compiler/CodeGen/EmittedIL/Mutation.fs @@ -0,0 +1,360 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.UnitTests.CodeGen.EmittedIL + +open FSharp.Compiler.UnitTests +open NUnit.Framework + +[] +module ``Mutation`` = + // Regression test for FSHARP1.0:1206 + + [] + let ``Mutation 01``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module Mutation01 +type Test = struct + val mutable v: int + member t.setV v = t.v <- 0 + end + """ + (fun verifier -> verifier.VerifyIL [ + """ + .class sequential ansi serializable sealed nested public Test + """ + """ + .field public int32 v + """ + """ + .method public hidebysig instance void + setV(!!a v) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldc.i4.0 + IL_0002: stfld int32 Mutation01/Test::v + IL_0007: ret + } + """ + ]) + + [] + let ``Mutation 02``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module Mutation02 +let x = System.TimeSpan.MinValue +x.ToString() + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public specialname static valuetype [mscorlib]System.TimeSpan + get_x() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::x@3 + IL_0005: ret + } + """ + """ + .property valuetype [mscorlib]System.TimeSpan + x() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype [mscorlib]System.TimeSpan Mutation02::get_x() + } + """ + """ +void .cctor() cil managed + { + + .maxstack 4 + .locals init (valuetype [runtime]System.TimeSpan V_0, + valuetype [runtime]System.TimeSpan V_1) + IL_0000: ldsfld valuetype [runtime]System.TimeSpan [runtime]System.TimeSpan::MinValue + IL_0005: dup + IL_0006: stsfld valuetype [runtime]System.TimeSpan ''.$Mutation02::x@3 + IL_000b: stloc.0 + IL_000c: call valuetype [runtime]System.TimeSpan Mutation02::get_x() + IL_0011: stloc.1 + IL_0012: ldloca.s V_1 + IL_0014: constrained. [runtime]System.TimeSpan + IL_001a: callvirt instance string [runtime]System.Object::ToString() + IL_001f: pop + IL_0020: ret + } + """ + ]) + + [] + let ``Mutation 03``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module Mutation03 +let x = System.DateTime.Now +x.Day + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public specialname static valuetype [mscorlib]System.DateTime + get_x() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::x@3 + IL_0005: ret + } + """ + """ + .property valuetype [mscorlib]System.DateTime + x() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype [mscorlib]System.DateTime Mutation03::get_x() + } + """ + """ + void .cctor() cil managed + { + + .maxstack 4 + .locals init (valuetype [runtime]System.DateTime V_0, + valuetype [runtime]System.DateTime V_1) + IL_0000: call valuetype [runtime]System.DateTime [runtime]System.DateTime::get_Now() + IL_0005: dup + IL_0006: stsfld valuetype [runtime]System.DateTime ''.$Mutation03::x@3 + IL_000b: stloc.0 + IL_000c: call valuetype [runtime]System.DateTime Mutation03::get_x() + IL_0011: stloc.1 + IL_0012: ldloca.s V_1 + IL_0014: call instance int32 [runtime]System.DateTime::get_Day() + IL_0019: pop + IL_001a: ret + } + """ + ]) + + [] + let ``Mutation 04``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module Mutation04 +let x = System.Decimal.MaxValue +x.ToString() + """ + (fun verifier -> verifier.VerifyIL [ + """ + .method public specialname static valuetype [mscorlib]System.Decimal + get_x() cil managed + { + + .maxstack 8 + IL_0000: ldsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::x@3 + IL_0005: ret + } + """ + """ + .property valuetype [mscorlib]System.Decimal + x() + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) + .get valuetype [mscorlib]System.Decimal Mutation04::get_x() + } + """ + """ +void .cctor() cil managed + { + + .maxstack 4 + .locals init (valuetype [runtime]System.Decimal V_0, + valuetype [runtime]System.Decimal V_1) + IL_0000: ldsfld valuetype [runtime]System.Decimal [runtime]System.Decimal::MaxValue + IL_0005: dup + IL_0006: stsfld valuetype [runtime]System.Decimal ''.$Mutation04::x@3 + IL_000b: stloc.0 + IL_000c: call valuetype [runtime]System.Decimal Mutation04::get_x() + IL_0011: stloc.1 + IL_0012: ldloca.s V_1 + IL_0014: constrained. [runtime]System.Decimal + IL_001a: callvirt instance string [runtime]System.Object::ToString() + IL_001f: pop + IL_0020: ret + } + """ + ]) + + [] + let ``Mutation 05``() = + CompilerAssert.CompileLibraryAndVerifyILWithOptions [|"-g"; "--optimize-"|] + """ +module Mutation05 +type C() = + [] + let mutable x = 1 + + member this.X with get() = x and set v = x <- v + + +type StaticC() = + [] + static let mutable x = 1 + + static member X with get() = x and set v = x <- v + """ + (fun verifier -> verifier.VerifyIL [ + """ + .class auto ansi serializable nested public C + extends [mscorlib]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) + .field assembly int32 x + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) + .method public specialname rtspecialname + instance void .ctor() cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ldarg.0 + IL_0009: ldc.i4.1 + IL_000a: volatile. + IL_000c: stfld int32 Mutation05/C::x + IL_0011: ret + } + + .method public hidebysig specialname + instance int32 get_X() cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: volatile. + IL_0003: ldfld int32 Mutation05/C::x + IL_0008: ret + } + + .method public hidebysig specialname + instance void set_X(int32 v) cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: ldarg.1 + IL_0002: volatile. + IL_0004: stfld int32 Mutation05/C::x + IL_0009: ret + } + + .property instance int32 X() + { + .set instance void Mutation05/C::set_X(int32) + .get instance int32 Mutation05/C::get_X() + } + } + """ + """ + .class auto ansi serializable nested public StaticC + extends [mscorlib]System.Object + { + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) + .field static assembly int32 x + .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) + .field static assembly int32 init@10 + .method public specialname rtspecialname + instance void .ctor() cil managed + { + + .maxstack 8 + IL_0000: ldarg.0 + IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() + IL_0006: ldarg.0 + IL_0007: pop + IL_0008: ret + } + + .method public specialname static int32 + get_X() cil managed + { + + .maxstack 8 + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 + + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop + IL_0014: nop + IL_0015: br.s IL_0018 + + IL_0017: nop + IL_0018: volatile. + IL_001a: ldsfld int32 Mutation05/StaticC::x + IL_001f: ret + } + + .method public specialname static void + set_X(int32 v) cil managed + { + + .maxstack 8 + IL_0000: volatile. + IL_0002: ldsfld int32 Mutation05/StaticC::init@10 + IL_0007: ldc.i4.1 + IL_0008: bge.s IL_000c + + IL_000a: br.s IL_000e + + IL_000c: br.s IL_0017 + + IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() + IL_0013: nop + IL_0014: nop + IL_0015: br.s IL_0018 + + IL_0017: nop + IL_0018: ldarg.0 + IL_0019: volatile. + IL_001b: stsfld int32 Mutation05/StaticC::x + IL_0020: ret + } + + .method private specialname rtspecialname static + void .cctor() cil managed + { + + .maxstack 8 + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 ''.$Mutation05::init@ + IL_0006: ldsfld int32 ''.$Mutation05::init@ + IL_000b: pop + IL_000c: ret + } + + .property int32 X() + { + .set void Mutation05/StaticC::set_X(int32) + .get int32 Mutation05/StaticC::get_X() + } + } + """ + """ + IL_0000: ldc.i4.1 + IL_0001: volatile. + IL_0003: stsfld int32 Mutation05/StaticC::x + IL_0008: ldc.i4.1 + IL_0009: volatile. + IL_000b: stsfld int32 Mutation05/StaticC::init@10 + IL_0010: ret + """ + ]) \ No newline at end of file diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 9510b0ec05..2402de3a0a 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -160,14 +160,15 @@ let main argv = 0""" let private gate = obj () - let private compile isExe source f = + let private compile isExe options source f = lock gate <| fun () -> let inputFilePath = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let outputFilePath = Path.ChangeExtension (Path.GetTempFileName(), if isExe then ".exe" else ".dll") try File.WriteAllText (inputFilePath, source) let args = - defaultProjectOptions.OtherOptions + options + |> Array.append defaultProjectOptions.OtherOptions |> Array.append [| "fsc.exe"; inputFilePath; "-o:" + outputFilePath; (if isExe then "--target:exe" else "--target:library"); "--nowin32manifest" |] let errors, _ = checker.Compile args |> Async.RunSynchronously @@ -230,12 +231,12 @@ let main argv = 0""" TypeCheckWithErrors source [| expectedServerity, expectedErrorNumber, expectedErrorRange, expectedErrorMsg |] let CompileExe (source: string) = - compile true source (fun (errors, _) -> + compile true [||] source (fun (errors, _) -> if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors)) let CompileExeAndRun (source: string) = - compile true source (fun (errors, outputExe) -> + compile true [||] source (fun (errors, outputExe) -> if errors.Length > 0 then Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors) @@ -243,14 +244,19 @@ let main argv = 0""" executeBuiltApp outputExe ) - let CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = - compile false source (fun (errors, outputFilePath) -> + let CompileLibraryAndVerifyILWithOptions options (source: string) (f: ILVerifier -> unit) = + compile false options source (fun (errors, outputFilePath) -> + let errors = + errors |> Array.filter (fun x -> x.Severity = FSharpErrorSeverity.Error) if errors.Length > 0 then - Assert.Fail (sprintf "Compile had warnings and/or errors: %A" errors) + Assert.Fail (sprintf "Compile had errors: %A" errors) f (ILVerifier outputFilePath) ) + let CompileLibraryAndVerifyIL (source: string) (f: ILVerifier -> unit) = + CompileLibraryAndVerifyILWithOptions [||] source f + let RunScript (source: string) (expectedErrorMessages: string list) = lock gate <| fun () -> // Intialize output and input streams diff --git a/tests/fsharp/Compiler/ILChecker.fs b/tests/fsharp/Compiler/ILChecker.fs index efc180145e..7f29873bc6 100644 --- a/tests/fsharp/Compiler/ILChecker.fs +++ b/tests/fsharp/Compiler/ILChecker.fs @@ -38,40 +38,53 @@ module ILChecker = exec ildasmPath (ildasmArgs @ [ sprintf "%s /out=%s" dllFilePath ilFilePath ]) |> ignore - let text = File.ReadAllText(ilFilePath) + let unifyRuntimeAssemblyName ilCode = + System.Text.RegularExpressions.Regex.Replace(ilCode, + "\[System.Runtime\]|\[mscorlib\]","[runtime]", + System.Text.RegularExpressions.RegexOptions.Singleline) + + let text = + let raw = File.ReadAllText(ilFilePath) + let asmName = Path.GetFileNameWithoutExtension(dllFilePath) + raw.Replace(asmName, "assembly") + |> unifyRuntimeAssemblyName let blockComments = @"/\*(.*?)\*/" let lineComments = @"//(.*?)\r?\n" let strings = @"""((\\[^\n]|[^""\n])*)""" let verbatimStrings = @"@(""[^""]*"")+" let textNoComments = - System.Text.RegularExpressions.Regex.Replace(text, - blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, - (fun me -> + System.Text.RegularExpressions.Regex.Replace(text, + blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, + (fun me -> if (me.Value.StartsWith("/*") || me.Value.StartsWith("//")) then if me.Value.StartsWith("//") then Environment.NewLine else String.Empty else me.Value), System.Text.RegularExpressions.RegexOptions.Singleline) |> filterSpecialComment - + expectedIL - |> List.map (fun (ilCode: string) -> ilCode.Trim() ) + |> List.map (fun (ilCode: string) -> ilCode.Trim() |> unifyRuntimeAssemblyName ) |> List.iter (fun (ilCode: string) -> let expectedLines = ilCode.Split('\n') - let startIndex = textNoComments.IndexOf(expectedLines.[0]) - if startIndex = -1 || textNoComments.Length < startIndex + ilCode.Length then + let startIndex = textNoComments.IndexOf(expectedLines.[0].Trim()) + if startIndex = -1 then errorMsgOpt <- Some("==EXPECTED CONTAINS==\n" + ilCode + "\n") else let errors = ResizeArray() let actualLines = textNoComments.Substring(startIndex, textNoComments.Length - startIndex).Split('\n') - for i = 0 to expectedLines.Length - 1 do - let expected = expectedLines.[i].Trim() - let actual = actualLines.[i].Trim() - if expected <> actual then - errors.Add(sprintf "\n==\nName: %s\n\nExpected:\t %s\nActual:\t\t %s\n==" actualLines.[0] expected actual) - - if errors.Count > 0 then - let msg = String.concat "\n" errors + "\n\n\n==EXPECTED==\n" + ilCode + "\n" - errorMsgOpt <- Some(msg + "\n\n\n==ACTUAL==\n" + String.Join("\n", actualLines, 0, expectedLines.Length)) + if actualLines.Length < expectedLines.Length then + let msg = sprintf "==EXPECTED AT LEAST %d LINES BUT FOUND ONLY %d ==\n" expectedLines.Length actualLines.Length + errorMsgOpt <- Some(msg + "==EXPECTED CONTAINS==\n" + ilCode + "\n") + else + for i = 0 to expectedLines.Length - 1 do + let expected = expectedLines.[i].Trim() + let actual = actualLines.[i].Trim() + if expected <> actual then + errors.Add(sprintf "\n==\nName: '%s'\n\nExpected:\t %s\nActual:\t\t %s\n==" actualLines.[0] expected actual) + + if errors.Count > 0 then + let msg = String.concat "\n" errors + "\n\n\n==EXPECTED==\n" + ilCode + "\n" + errorMsgOpt <- Some(msg + "\n\n\n==ACTUAL==\n" + String.Join("\n", actualLines, 0, expectedLines.Length)) ) if expectedIL.Length = 0 then @@ -84,7 +97,7 @@ module ILChecker = try File.Delete(ilFilePath) with | _ -> () match errorMsgOpt with - | Some(errorMsg) -> + | Some(errorMsg) -> Assert.Fail(errorMsg) | _ -> () diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 5e5e328d36..b15599486d 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -34,6 +34,7 @@ + diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.fs deleted file mode 100644 index b151e0f103..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.fs +++ /dev/null @@ -1,19 +0,0 @@ -// #Regression #NoMono #NoMT #CodeGen #EmittedIL -// Regression test for FSHARP1.0:1206 -// A long long time ago (before the fix, e.g. in release 1.9.2.9 Sept 2007) -// we used to emit IL like this: -// .method public instance void setV(int32 v) cil managed -// { -// // Code size 9 (0x9) -// .maxstack 4 -// IL_0000: ldarga.s 0 <=============================== (apparently this is problematic) -// IL_0002: ldarg.1 -// IL_0003: call instance void A/Test::set_v(int32) -// IL_0008: ret -// } // end of method Test::setV - -#light -type Test = struct - val mutable v: int - member t.setV v = t.v <- 0 - end diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.il.bsl deleted file mode 100644 index 479e3804fe..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation01.il.bsl +++ /dev/null @@ -1,322 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:4:1:0 -} -.assembly Mutation01 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Mutation01 -{ - // Offset: 0x00000000 Length: 0x00000705 -} -.mresource public FSharpOptimizationData.Mutation01 -{ - // Offset: 0x00000710 Length: 0x00000220 -} -.module Mutation01.exe -// MVID: {59B19213-8C6A-2EAE-A745-03831392B159} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x002E0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Mutation01 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class sequential ansi serializable sealed nested public Test - extends [mscorlib]System.ValueType - implements class [mscorlib]System.IEquatable`1, - [mscorlib]System.Collections.IStructuralEquatable, - class [mscorlib]System.IComparable`1, - [mscorlib]System.IComparable, - [mscorlib]System.Collections.IStructuralComparable - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field public int32 v - .method public hidebysig virtual final - instance int32 CompareTo(valuetype Mutation01/Test obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 38 (0x26) - .maxstack 4 - .locals init ([0] valuetype Mutation01/Test& V_0, - [1] class [mscorlib]System.Collections.IComparer V_1, - [2] int32 V_2, - [3] int32 V_3) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 16,16 : 6,10 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation01.fs' - IL_0000: ldarga.s obj - IL_0002: stloc.0 - IL_0003: call class [mscorlib]System.Collections.IComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericComparer() - IL_0008: stloc.1 - IL_0009: ldarg.0 - IL_000a: ldfld int32 Mutation01/Test::v - IL_000f: stloc.2 - IL_0010: ldloc.0 - IL_0011: ldfld int32 Mutation01/Test::v - IL_0016: stloc.3 - IL_0017: ldloc.2 - IL_0018: ldloc.3 - IL_0019: bge.s IL_001d - - IL_001b: br.s IL_001f - - IL_001d: br.s IL_0021 - - .line 100001,100001 : 0,0 '' - IL_001f: ldc.i4.m1 - IL_0020: ret - - .line 100001,100001 : 0,0 '' - IL_0021: ldloc.2 - IL_0022: ldloc.3 - IL_0023: cgt - IL_0025: ret - } // end of method Test::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 13 (0xd) - .maxstack 8 - .line 16,16 : 6,10 '' - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: unbox.any Mutation01/Test - IL_0007: call instance int32 Mutation01/Test::CompareTo(valuetype Mutation01/Test) - IL_000c: ret - } // end of method Test::CompareTo - - .method public hidebysig virtual final - instance int32 CompareTo(object obj, - class [mscorlib]System.Collections.IComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 44 (0x2c) - .maxstack 4 - .locals init ([0] valuetype Mutation01/Test V_0, - [1] valuetype Mutation01/Test& V_1, - [2] class [mscorlib]System.Collections.IComparer V_2, - [3] int32 V_3, - [4] int32 V_4) - .line 16,16 : 6,10 '' - IL_0000: ldarg.1 - IL_0001: unbox.any Mutation01/Test - IL_0006: stloc.0 - IL_0007: ldloca.s V_0 - IL_0009: stloc.1 - IL_000a: ldarg.2 - IL_000b: stloc.2 - IL_000c: ldarg.0 - IL_000d: ldfld int32 Mutation01/Test::v - IL_0012: stloc.3 - IL_0013: ldloc.1 - IL_0014: ldfld int32 Mutation01/Test::v - IL_0019: stloc.s V_4 - IL_001b: ldloc.3 - IL_001c: ldloc.s V_4 - IL_001e: bge.s IL_0022 - - IL_0020: br.s IL_0024 - - IL_0022: br.s IL_0026 - - .line 100001,100001 : 0,0 '' - IL_0024: ldc.i4.m1 - IL_0025: ret - - .line 100001,100001 : 0,0 '' - IL_0026: ldloc.3 - IL_0027: ldloc.s V_4 - IL_0029: cgt - IL_002b: ret - } // end of method Test::CompareTo - - .method public hidebysig virtual final - instance int32 GetHashCode(class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 27 (0x1b) - .maxstack 7 - .locals init ([0] int32 V_0, - [1] class [mscorlib]System.Collections.IEqualityComparer V_1) - .line 16,16 : 6,10 '' - IL_0000: ldc.i4.0 - IL_0001: stloc.0 - IL_0002: ldc.i4 0x9e3779b9 - IL_0007: ldarg.1 - IL_0008: stloc.1 - IL_0009: ldarg.0 - IL_000a: ldfld int32 Mutation01/Test::v - IL_000f: ldloc.0 - IL_0010: ldc.i4.6 - IL_0011: shl - IL_0012: ldloc.0 - IL_0013: ldc.i4.2 - IL_0014: shr - IL_0015: add - IL_0016: add - IL_0017: add - IL_0018: stloc.0 - IL_0019: ldloc.0 - IL_001a: ret - } // end of method Test::GetHashCode - - .method public hidebysig virtual final - instance int32 GetHashCode() cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 12 (0xc) - .maxstack 8 - .line 16,16 : 6,10 '' - IL_0000: ldarg.0 - IL_0001: call class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer() - IL_0006: call instance int32 Mutation01/Test::GetHashCode(class [mscorlib]System.Collections.IEqualityComparer) - IL_000b: ret - } // end of method Test::GetHashCode - - .method public hidebysig virtual final - instance bool Equals(object obj, - class [mscorlib]System.Collections.IEqualityComparer comp) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 39 (0x27) - .maxstack 4 - .locals init ([0] valuetype Mutation01/Test V_0, - [1] valuetype Mutation01/Test& V_1, - [2] class [mscorlib]System.Collections.IEqualityComparer V_2) - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.1 - IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) - IL_0006: brtrue.s IL_000a - - IL_0008: br.s IL_0025 - - .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: unbox.any Mutation01/Test - IL_0010: stloc.0 - IL_0011: ldloca.s V_0 - IL_0013: stloc.1 - IL_0014: ldarg.2 - IL_0015: stloc.2 - IL_0016: ldarg.0 - IL_0017: ldfld int32 Mutation01/Test::v - IL_001c: ldloc.1 - IL_001d: ldfld int32 Mutation01/Test::v - IL_0022: ceq - IL_0024: ret - - .line 100001,100001 : 0,0 '' - IL_0025: ldc.i4.0 - IL_0026: ret - } // end of method Test::Equals - - .method public hidebysig instance void - setV(!!a v) cil managed - { - // Code size 8 (0x8) - .maxstack 8 - .line 18,18 : 33,41 '' - IL_0000: ldarg.0 - IL_0001: ldc.i4.0 - IL_0002: stfld int32 Mutation01/Test::v - IL_0007: ret - } // end of method Test::setV - - .method public hidebysig virtual final - instance bool Equals(valuetype Mutation01/Test obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 18 (0x12) - .maxstack 4 - .locals init ([0] valuetype Mutation01/Test& V_0) - .line 16,16 : 6,10 '' - IL_0000: ldarga.s obj - IL_0002: stloc.0 - IL_0003: ldarg.0 - IL_0004: ldfld int32 Mutation01/Test::v - IL_0009: ldloc.0 - IL_000a: ldfld int32 Mutation01/Test::v - IL_000f: ceq - IL_0011: ret - } // end of method Test::Equals - - .method public hidebysig virtual final - instance bool Equals(object obj) cil managed - { - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - // Code size 27 (0x1b) - .maxstack 4 - .locals init ([0] valuetype Mutation01/Test V_0) - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.1 - IL_0001: call bool [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::TypeTestGeneric(object) - IL_0006: brtrue.s IL_000a - - IL_0008: br.s IL_0019 - - .line 100001,100001 : 0,0 '' - IL_000a: ldarg.1 - IL_000b: unbox.any Mutation01/Test - IL_0010: stloc.0 - IL_0011: ldarg.0 - IL_0012: ldloc.0 - IL_0013: call instance bool Mutation01/Test::Equals(valuetype Mutation01/Test) - IL_0018: ret - - .line 100001,100001 : 0,0 '' - IL_0019: ldc.i4.0 - IL_001a: ret - } // end of method Test::Equals - - } // end of class Test - -} // end of class Mutation01 - -.class private abstract auto ansi sealed ''.$Mutation01 - extends [mscorlib]System.Object -{ - .method public static void main@() cil managed - { - .entrypoint - // Code size 1 (0x1) - .maxstack 8 - IL_0000: ret - } // end of method $Mutation01::main@ - -} // end of class ''.$Mutation01 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.fs deleted file mode 100644 index 5f66fd6e64..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMono #NoMT #CodeGen #EmittedIL -// Regression test for FSHARP1.0:1206 -#light -let x = System.TimeSpan.MinValue -x.ToString() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl deleted file mode 100644 index b26df9510b..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation02.il.bsl +++ /dev/null @@ -1,108 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:5:0:0 -} -.assembly Mutation02 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Mutation02 -{ - // Offset: 0x00000000 Length: 0x000001A2 -} -.mresource public FSharpOptimizationData.Mutation02 -{ - // Offset: 0x000001A8 Length: 0x0000006C -} -.module Mutation02.exe -// MVID: {5B9A632A-8C6A-2F0D-A745-03832A639A5B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02750000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Mutation02 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public specialname static valuetype [mscorlib]System.TimeSpan - get_x() cil managed - { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::x@4 - IL_0005: ret - } // end of method Mutation02::get_x - - .property valuetype [mscorlib]System.TimeSpan - x() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get valuetype [mscorlib]System.TimeSpan Mutation02::get_x() - } // end of property Mutation02::x -} // end of class Mutation02 - -.class private abstract auto ansi sealed ''.$Mutation02 - extends [mscorlib]System.Object -{ - .field static assembly valuetype [mscorlib]System.TimeSpan x@4 - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 33 (0x21) - .maxstack 4 - .locals init ([0] valuetype [mscorlib]System.TimeSpan x, - [1] valuetype [mscorlib]System.TimeSpan V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 1,33 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation02.fs' - IL_0000: ldsfld valuetype [mscorlib]System.TimeSpan [mscorlib]System.TimeSpan::MinValue - IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.TimeSpan ''.$Mutation02::x@4 - IL_000b: stloc.0 - .line 5,5 : 1,13 '' - IL_000c: call valuetype [mscorlib]System.TimeSpan Mutation02::get_x() - IL_0011: stloc.1 - IL_0012: ldloca.s V_1 - IL_0014: constrained. [mscorlib]System.TimeSpan - IL_001a: callvirt instance string [mscorlib]System.Object::ToString() - IL_001f: pop - IL_0020: ret - } // end of method $Mutation02::main@ - -} // end of class ''.$Mutation02 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.fs deleted file mode 100644 index 861b1f99c5..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMono #NoMT #CodeGen #EmittedIL -// Regression test for FSHARP1.0:1206 -#light -let x = System.DateTime.Now -x.Day diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl deleted file mode 100644 index e43810c10b..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation03.il.bsl +++ /dev/null @@ -1,107 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:5:0:0 -} -.assembly Mutation03 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Mutation03 -{ - // Offset: 0x00000000 Length: 0x000001A2 -} -.mresource public FSharpOptimizationData.Mutation03 -{ - // Offset: 0x000001A8 Length: 0x0000006C -} -.module Mutation03.exe -// MVID: {5B9A632A-8C6A-2EEC-A745-03832A639A5B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02CA0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Mutation03 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public specialname static valuetype [mscorlib]System.DateTime - get_x() cil managed - { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-2' - IL_0005: ret - } // end of method Mutation03::get_x - - .property valuetype [mscorlib]System.DateTime - x() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get valuetype [mscorlib]System.DateTime Mutation03::get_x() - } // end of property Mutation03::x -} // end of class Mutation03 - -.class private abstract auto ansi sealed ''.$Mutation03 - extends [mscorlib]System.Object -{ - .field static assembly valuetype [mscorlib]System.DateTime 'x@4-2' - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 27 (0x1b) - .maxstack 4 - .locals init ([0] valuetype [mscorlib]System.DateTime x, - [1] valuetype [mscorlib]System.DateTime V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 1,28 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation03.fs' - IL_0000: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now() - IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.DateTime ''.$Mutation03::'x@4-2' - IL_000b: stloc.0 - .line 5,5 : 1,6 '' - IL_000c: call valuetype [mscorlib]System.DateTime Mutation03::get_x() - IL_0011: stloc.1 - IL_0012: ldloca.s V_1 - IL_0014: call instance int32 [mscorlib]System.DateTime::get_Day() - IL_0019: pop - IL_001a: ret - } // end of method $Mutation03::main@ - -} // end of class ''.$Mutation03 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.fs deleted file mode 100644 index 9b193f5112..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMono #NoMT #CodeGen #EmittedIL -// Regression test for FSHARP1.0:1206 -#light -let x = System.Decimal.MaxValue -x.ToString() diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl deleted file mode 100644 index 444d581fc6..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation04.il.bsl +++ /dev/null @@ -1,108 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:5:0:0 -} -.assembly Mutation04 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Mutation04 -{ - // Offset: 0x00000000 Length: 0x000001B5 -} -.mresource public FSharpOptimizationData.Mutation04 -{ - // Offset: 0x000001C0 Length: 0x0000006C -} -.module Mutation04.exe -// MVID: {5B9A632A-8C6A-2E43-A745-03832A639A5B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x02A80000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Mutation04 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .method public specialname static valuetype [mscorlib]System.Decimal - get_x() cil managed - { - // Code size 6 (0x6) - .maxstack 8 - IL_0000: ldsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-4' - IL_0005: ret - } // end of method Mutation04::get_x - - .property valuetype [mscorlib]System.Decimal - x() - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 09 00 00 00 00 00 ) - .get valuetype [mscorlib]System.Decimal Mutation04::get_x() - } // end of property Mutation04::x -} // end of class Mutation04 - -.class private abstract auto ansi sealed ''.$Mutation04 - extends [mscorlib]System.Object -{ - .field static assembly valuetype [mscorlib]System.Decimal 'x@4-4' - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 33 (0x21) - .maxstack 4 - .locals init ([0] valuetype [mscorlib]System.Decimal x, - [1] valuetype [mscorlib]System.Decimal V_1) - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 4,4 : 1,32 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation04.fs' - IL_0000: ldsfld valuetype [mscorlib]System.Decimal [mscorlib]System.Decimal::MaxValue - IL_0005: dup - IL_0006: stsfld valuetype [mscorlib]System.Decimal ''.$Mutation04::'x@4-4' - IL_000b: stloc.0 - .line 5,5 : 1,13 '' - IL_000c: call valuetype [mscorlib]System.Decimal Mutation04::get_x() - IL_0011: stloc.1 - IL_0012: ldloca.s V_1 - IL_0014: constrained. [mscorlib]System.Decimal - IL_001a: callvirt instance string [mscorlib]System.Object::ToString() - IL_001f: pop - IL_0020: ret - } // end of method $Mutation04::main@ - -} // end of class ''.$Mutation04 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs deleted file mode 100644 index c355da097c..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs +++ /dev/null @@ -1,13 +0,0 @@ -// #Regression #NoMono #NoMT #CodeGen #EmittedIL -type C() = - [] - let mutable x = 1 - - member this.X with get() = x and set v = x <- v - - -type StaticC() = - [] - static let mutable x = 1 - - static member X with get() = x and set v = x <- v diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl deleted file mode 100644 index fc052bb6e0..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl +++ /dev/null @@ -1,244 +0,0 @@ - -// Microsoft (R) .NET Framework IL Disassembler. Version 4.6.1055.0 -// Copyright (c) Microsoft Corporation. All rights reserved. - - - -// Metadata version: v4.0.30319 -.assembly extern mscorlib -{ - .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. - .ver 4:0:0:0 -} -.assembly extern FSharp.Core -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: - .ver 4:5:0:0 -} -.assembly Mutation05 -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32, - int32, - int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) - - // --- The following custom attribute is added automatically, do not uncomment ------- - // .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) - - .hash algorithm 0x00008004 - .ver 0:0:0:0 -} -.mresource public FSharpSignatureData.Mutation05 -{ - // Offset: 0x00000000 Length: 0x000004CE -} -.mresource public FSharpOptimizationData.Mutation05 -{ - // Offset: 0x000004D8 Length: 0x00000127 -} -.module Mutation05.exe -// MVID: {5B9A632A-8C6A-2E22-A745-03832A639A5B} -.imagebase 0x00400000 -.file alignment 0x00000200 -.stackreserve 0x00100000 -.subsystem 0x0003 // WINDOWS_CUI -.corflags 0x00000001 // ILONLY -// Image base: 0x008E0000 - - -// =============== CLASS MEMBERS DECLARATION =================== - -.class public abstract auto ansi sealed Mutation05 - extends [mscorlib]System.Object -{ - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) - .class auto ansi serializable nested public C - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field assembly int32 x - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 18 (0x12) - .maxstack 8 - .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}' - .line 100001,100001 : 0,0 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Mutation\\Mutation05.fs' - IL_0000: ldarg.0 - IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - .line 4,4 : 5,22 '' - IL_0008: ldarg.0 - IL_0009: ldc.i4.1 - IL_000a: volatile. - IL_000c: stfld int32 Mutation05/C::x - .line 2,2 : 6,7 '' - IL_0011: ret - } // end of method C::.ctor - - .method public hidebysig specialname - instance int32 get_X() cil managed - { - // Code size 9 (0x9) - .maxstack 8 - .line 6,6 : 32,33 '' - IL_0000: ldarg.0 - IL_0001: volatile. - IL_0003: ldfld int32 Mutation05/C::x - IL_0008: ret - } // end of method C::get_X - - .method public hidebysig specialname - instance void set_X(int32 v) cil managed - { - // Code size 10 (0xa) - .maxstack 8 - .line 6,6 : 46,52 '' - IL_0000: ldarg.0 - IL_0001: ldarg.1 - IL_0002: volatile. - IL_0004: stfld int32 Mutation05/C::x - IL_0009: ret - } // end of method C::set_X - - .property instance int32 X() - { - .set instance void Mutation05/C::set_X(int32) - .get instance int32 Mutation05/C::get_X() - } // end of property C::X - } // end of class C - - .class auto ansi serializable nested public StaticC - extends [mscorlib]System.Object - { - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) - .field static assembly int32 x - .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) - .field static assembly int32 init@9 - .method public specialname rtspecialname - instance void .ctor() cil managed - { - // Code size 9 (0x9) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldarg.0 - IL_0001: callvirt instance void [mscorlib]System.Object::.ctor() - IL_0006: ldarg.0 - IL_0007: pop - .line 9,9 : 6,13 '' - IL_0008: ret - } // end of method StaticC::.ctor - - .method public specialname static int32 - get_X() cil managed - { - // Code size 32 (0x20) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@9 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 - - .line 100001,100001 : 0,0 '' - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop - .line 100001,100001 : 0,0 '' - IL_0014: nop - IL_0015: br.s IL_0018 - - .line 100001,100001 : 0,0 '' - IL_0017: nop - .line 13,13 : 34,35 '' - IL_0018: volatile. - IL_001a: ldsfld int32 Mutation05/StaticC::x - IL_001f: ret - } // end of method StaticC::get_X - - .method public specialname static void - set_X(int32 v) cil managed - { - // Code size 33 (0x21) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: volatile. - IL_0002: ldsfld int32 Mutation05/StaticC::init@9 - IL_0007: ldc.i4.1 - IL_0008: bge.s IL_000c - - IL_000a: br.s IL_000e - - IL_000c: br.s IL_0017 - - .line 100001,100001 : 0,0 '' - IL_000e: call void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit() - IL_0013: nop - .line 100001,100001 : 0,0 '' - IL_0014: nop - IL_0015: br.s IL_0018 - - .line 100001,100001 : 0,0 '' - IL_0017: nop - .line 13,13 : 48,54 '' - IL_0018: ldarg.0 - IL_0019: volatile. - IL_001b: stsfld int32 Mutation05/StaticC::x - IL_0020: ret - } // end of method StaticC::set_X - - .method private specialname rtspecialname static - void .cctor() cil managed - { - // Code size 13 (0xd) - .maxstack 8 - .line 100001,100001 : 0,0 '' - IL_0000: ldc.i4.0 - IL_0001: stsfld int32 ''.$Mutation05::init@ - IL_0006: ldsfld int32 ''.$Mutation05::init@ - IL_000b: pop - IL_000c: ret - } // end of method StaticC::.cctor - - .property int32 X() - { - .set void Mutation05/StaticC::set_X(int32) - .get int32 Mutation05/StaticC::get_X() - } // end of property StaticC::X - } // end of class StaticC - -} // end of class Mutation05 - -.class private abstract auto ansi sealed ''.$Mutation05 - extends [mscorlib]System.Object -{ - .field static assembly int32 init@ - .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) - .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) - .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) - .method public static void main@() cil managed - { - .entrypoint - // Code size 17 (0x11) - .maxstack 8 - .line 11,11 : 12,29 '' - IL_0000: ldc.i4.1 - IL_0001: volatile. - IL_0003: stsfld int32 Mutation05/StaticC::x - IL_0008: ldc.i4.1 - IL_0009: volatile. - IL_000b: stsfld int32 Mutation05/StaticC::init@9 - .line 9,9 : 6,13 '' - IL_0010: ret - } // end of method $Mutation05::main@ - -} // end of class ''.$Mutation05 - - -// ============================================================= - -// *********** DISASSEMBLY COMPLETE *********************** diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst deleted file mode 100644 index ef1ee2da42..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst +++ /dev/null @@ -1,7 +0,0 @@ - SOURCE=Mutation01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation01.exe" # Mutation01.fs - - - SOURCE=Mutation02.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation02.exe" # Mutation02.fs - SOURCE=Mutation03.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation03.exe" # Mutation03.fs - SOURCE=Mutation04.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation04.exe" # Mutation04.fs - SOURCE=Mutation05.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation05.exe" # Mutation05.fs - diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/keep.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/keep.lst deleted file mode 100644 index f59ec20aab..0000000000 --- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/keep.lst +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file From 3cdc94f8988cbe580af8a598f42cd5878760972a Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Fri, 9 Aug 2019 15:22:48 -0700 Subject: [PATCH 022/146] Use GetFullPath when determining the full path in handling command line options (#7376) --- .../LanguageService/FSharpProjectOptionsManager.fs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs index a555b47ff3..5a2c3eed96 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpProjectOptionsManager.fs @@ -378,11 +378,15 @@ type internal FSharpProjectOptionsManager match Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.TryGetProjectIdByBinPath(workspace, path) with | true, projectId -> projectId | false, _ -> Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetOrCreateProjectIdForPath(workspace, path, projectDisplayNameOf path) - let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId); - let fullPath p = - if Path.IsPathRooted(p) || path = null then p - else Path.Combine(Path.GetDirectoryName(path), p) - let sourcePaths = sources |> Seq.map(fun s -> fullPath s.Path) |> Seq.toArray + let path = Microsoft.CodeAnalysis.ExternalAccess.FSharp.LanguageServices.FSharpVisualStudioWorkspaceExtensions.GetProjectFilePath(workspace, projectId) + + let getFullPath p = + let p' = + if Path.IsPathRooted(p) || path = null then p + else Path.Combine(Path.GetDirectoryName(path), p) + Path.GetFullPathSafe(p') + + let sourcePaths = sources |> Seq.map(fun s -> getFullPath s.Path) |> Seq.toArray reactor.SetCpsCommandLineOptions(projectId, sourcePaths, options.ToArray()) From 9be20d5216846f3f34dffa3d653cf674b8ba51cb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 10 Aug 2019 08:40:32 -0700 Subject: [PATCH 023/146] Update dependencies from https://github.com/dotnet/arcade build 20190809.8 (#7382) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19409.8 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e812a2affc..cffeec3d9f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 524bb3e06ffd5b483a3c71a8f670b7a4bd2c232a + f22982a641aa6f29585b6ab1de85912814a00bac diff --git a/global.json b/global.json index d59ddadcfd..8e9cc09f23 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19408.13", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19409.8", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 05c558a61593517557423007cc1e9d2bcd88e75a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sun, 11 Aug 2019 10:20:36 -0700 Subject: [PATCH 024/146] Update dependencies from https://github.com/dotnet/arcade build 20190810.2 (#7385) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19410.2 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cffeec3d9f..848ec45335 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - f22982a641aa6f29585b6ab1de85912814a00bac + e2f5f0f5c20a1fef71845795b09066a5cd892a7e diff --git a/global.json b/global.json index 8e9cc09f23..42b7fded08 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19409.8", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19410.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From e1b8537ee8b27dbb9094a790760a545b8df0b40b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2019 10:35:51 -0700 Subject: [PATCH 025/146] [master] Update dependencies from dotnet/arcade (#7388) * Update dependencies from https://github.com/dotnet/arcade build 20190811.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19411.1 * Update dependencies from https://github.com/dotnet/arcade build 20190812.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19412.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 848ec45335..515529893c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - e2f5f0f5c20a1fef71845795b09066a5cd892a7e + ec2dd5b3e7d11b88b2ca0688bb1685836cfad20a diff --git a/global.json b/global.json index 42b7fded08..c97e3c588d 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19410.2", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19412.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 6e9c4bef43031f08598828b9c5e982adad4a3c9a Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 13 Aug 2019 14:04:30 -0700 Subject: [PATCH 026/146] upload VSTS drop during internal build (#7392) --- azure-pipelines.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5dd52805da..53288c73d3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -55,6 +55,7 @@ stages: variables: - group: DotNet-Blob-Feed - group: DotNet-Symbol-Server-Pats + - group: DotNet-DevDiv-Insertion-Workflow-Variables - name: _SignType value: Real - name: _DotNetPublishToBlobFeed @@ -122,6 +123,13 @@ stages: PathtoPublish: '$(Build.SourcesDirectory)\artifacts\SymStore\$(_BuildConfig)' ArtifactName: 'NativeSymbols' condition: succeeded() + - task: ms-vseng.MicroBuildTasks.4305a8de-ba66-4d8b-b2d1-0dc4ecbbf5e8.MicroBuildUploadVstsDropFolder@1 + displayName: Upload VSTS Drop + inputs: + DropName: $(VisualStudioDropName) + DropFolder: '$(Build.SourcesDirectory)\artifacts\VSSetup\$(_BuildConfig)\Insertion' + AccessToken: $(dn-bot-devdiv-drop-rw-code-rw) + condition: succeeded() #-------------------------------------------------------------------------------------------------------------------# # PR builds # From ee0b0d527dde2963a374234217db87bf2bb8b66d Mon Sep 17 00:00:00 2001 From: dotnet-maestro <@dotnet-maestro> Date: Wed, 14 Aug 2019 13:19:12 +0000 Subject: [PATCH 027/146] Update dependencies from https://github.com/dotnet/arcade build 20190812.7 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19412.7 --- eng/Version.Details.xml | 4 +-- eng/common/performance/performance-setup.ps1 | 2 +- eng/common/performance/performance-setup.sh | 36 ++++++++++---------- global.json | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 515529893c..e338fffe94 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - ec2dd5b3e7d11b88b2ca0688bb1685836cfad20a + 82c822ee7db08f5347e6ac44e3ed465248394a9e diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index 7e5441f797..ac05256bfd 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -33,7 +33,7 @@ if ($Framework.StartsWith("netcoreapp")) { } if ($Internal) { - $Queue = "Windows.10.Amd64.ClientRS5.Perf" + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf" $PerfLabArguments = "--upload-to-perflab-container" $ExtraBenchmarkDotNetArguments = "" $Creator = "" diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index 126da5f76d..dc6fd21871 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -132,7 +132,7 @@ if [[ "$internal" == true ]]; then if [[ "$architecture" = "arm64" ]]; then queue=Ubuntu.1804.Arm64.Perf else - queue=Ubuntu.1804.Amd64.Perf + queue=Ubuntu.1804.Amd64.Tiger.Perf fi fi @@ -157,20 +157,20 @@ if [[ "$use_core_run" = true ]]; then fi # Make sure all of our variables are available for future steps -echo "##vso[task.setvariable variable=UseCoreRun]$use_core_run" -echo "##vso[task.setvariable variable=Architecture]$architecture" -echo "##vso[task.setvariable variable=PayloadDirectory]$payload_directory" -echo "##vso[task.setvariable variable=PerformanceDirectory]$performance_directory" -echo "##vso[task.setvariable variable=WorkItemDirectory]$workitem_directory" -echo "##vso[task.setvariable variable=Queue]$queue" -echo "##vso[task.setvariable variable=SetupArguments]$setup_arguments" -echo "##vso[task.setvariable variable=Python]python3" -echo "##vso[task.setvariable variable=PerfLabArguments]$perflab_arguments" -echo "##vso[task.setvariable variable=ExtraBenchmarkDotNetArguments]$extra_benchmark_dotnet_arguments" -echo "##vso[task.setvariable variable=BDNCategories]$run_categories" -echo "##vso[task.setvariable variable=TargetCsproj]$csproj" -echo "##vso[task.setvariable variable=RunFromPerfRepo]$run_from_perf_repo" -echo "##vso[task.setvariable variable=Creator]$creator" -echo "##vso[task.setvariable variable=HelixSourcePrefix]$helix_source_prefix" -echo "##vso[task.setvariable variable=Kind]$kind" -echo "##vso[task.setvariable variable=_BuildConfig]$architecture.$kind.$framework" \ No newline at end of file +Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false +Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "WorkItemDirectory" -value "$workitem_directory" -is_multi_job_variable false +Write-PipelineSetVariable -name "Queue" -value "$queue" -is_multi_job_variable false +Write-PipelineSetVariable -name "SetupArguments" -value "$setup_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "Python" -value "$python3" -is_multi_job_variable false +Write-PipelineSetVariable -name "PerfLabArguments" -value "$perflab_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "ExtraBenchmarkDotNetArguments" -value "$extra_benchmark_dotnet_arguments" -is_multi_job_variable false +Write-PipelineSetVariable -name "BDNCategories" -value "$run_categories" -is_multi_job_variable false +Write-PipelineSetVariable -name "TargetCsproj" -value "$csproj" -is_multi_job_variable false +Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" -is_multi_job_variable false +Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false +Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false +Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false +Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false \ No newline at end of file diff --git a/global.json b/global.json index c97e3c588d..ab3fa438c1 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19412.1", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19412.7", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From cf96f223a696b30d4d8d5dfee8f97d676695906a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 16 Aug 2019 12:30:36 +0000 Subject: [PATCH 028/146] Update dependencies from https://github.com/dotnet/arcade build 20190815.27 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19415.27 --- eng/Version.Details.xml | 4 +-- eng/common/performance/performance-setup.ps1 | 2 +- eng/common/performance/performance-setup.sh | 7 ++++- eng/common/post-build/darc-gather-drop.ps1 | 10 +++++++ eng/common/post-build/dotnetsymbol-init.ps1 | 29 ------------------ eng/common/post-build/sourcelink-cli-init.ps1 | 29 ------------------ eng/common/sdl/execute-all-sdl-tools.ps1 | 4 +-- eng/common/sdl/run-sdl.ps1 | 30 +++++++------------ .../channels/internal-servicing.yml | 5 ++++ .../post-build/channels/netcore-dev-5.yml | 5 ++++ .../channels/netcore-tools-latest.yml | 5 ++++ .../channels/public-dev-release.yml | 5 ++++ .../post-build/channels/public-release.yml | 5 ++++ .../channels/public-validation-release.yml | 4 +++ .../templates/post-build/post-build.yml | 23 +++++++++++++- global.json | 2 +- 16 files changed, 84 insertions(+), 85 deletions(-) delete mode 100644 eng/common/post-build/dotnetsymbol-init.ps1 delete mode 100644 eng/common/post-build/sourcelink-cli-init.ps1 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e338fffe94..56b636c4a3 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 82c822ee7db08f5347e6ac44e3ed465248394a9e + 98d779a16826fd6ecda6d4d4fa8da7b556b9638f diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index ac05256bfd..4a6706b638 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -2,7 +2,7 @@ Param( [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, [string] $CoreRootDirectory, [string] $Architecture="x64", - [string] $Framework="netcoreapp3.0", + [string] $Framework="netcoreapp5.0", [string] $CompilationMode="Tiered", [string] $Repository=$env:BUILD_REPOSITORY_NAME, [string] $Branch=$env:BUILD_SOURCEBRANCH, diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index dc6fd21871..76126b1f86 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -3,7 +3,7 @@ source_directory=$BUILD_SOURCESDIRECTORY core_root_directory= architecture=x64 -framework=netcoreapp3.0 +framework=netcoreapp5.0 compilation_mode=tiered repository=$BUILD_REPOSITORY_NAME branch=$BUILD_SOURCEBRANCH @@ -156,6 +156,11 @@ if [[ "$use_core_run" = true ]]; then mv $core_root_directory $new_core_root fi +ci=true + +_script_dir=$(pwd)/eng/common +. "$_script_dir/pipeline-logging-functions.sh" + # Make sure all of our variables are available for future steps Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false diff --git a/eng/common/post-build/darc-gather-drop.ps1 b/eng/common/post-build/darc-gather-drop.ps1 index 93a0bd8328..89854d3c1c 100644 --- a/eng/common/post-build/darc-gather-drop.ps1 +++ b/eng/common/post-build/darc-gather-drop.ps1 @@ -19,7 +19,17 @@ try { ExitWithExitCode $exitCode } + # For now, only use a dry run. + # Ideally we would change darc to enable a quick request that + # would check whether the file exists that you can download it, + # and that it won't conflict with other files. + # https://github.com/dotnet/arcade/issues/3674 + # Right now we can't remove continue-on-error because we ocassionally will have + # dependencies that have no associated builds (e.g. an old dependency). + # We need to add an option to baseline specific dependencies away, or add them manually + # to the BAR. darc gather-drop --non-shipping ` + --dry-run ` --continue-on-error ` --id $BarBuildId ` --output-dir $DropLocation ` diff --git a/eng/common/post-build/dotnetsymbol-init.ps1 b/eng/common/post-build/dotnetsymbol-init.ps1 deleted file mode 100644 index e7659b98c8..0000000000 --- a/eng/common/post-build/dotnetsymbol-init.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -param ( - $dotnetsymbolVersion = $null -) - -$ErrorActionPreference = "Stop" -Set-StrictMode -Version 2.0 - -. $PSScriptRoot\..\tools.ps1 - -$verbosity = "minimal" - -function Installdotnetsymbol ($dotnetsymbolVersion) { - $dotnetsymbolPackageName = "dotnet-symbol" - - $dotnetRoot = InitializeDotNetCli -install:$true - $dotnet = "$dotnetRoot\dotnet.exe" - $toolList = & "$dotnet" tool list --global - - if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { - Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." - } - else { - Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." - Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity $verbosity --global - } -} - -Installdotnetsymbol $dotnetsymbolVersion diff --git a/eng/common/post-build/sourcelink-cli-init.ps1 b/eng/common/post-build/sourcelink-cli-init.ps1 deleted file mode 100644 index 9eaa25b3b5..0000000000 --- a/eng/common/post-build/sourcelink-cli-init.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -param ( - $sourcelinkCliVersion = $null -) - -$ErrorActionPreference = "Stop" -Set-StrictMode -Version 2.0 - -. $PSScriptRoot\..\tools.ps1 - -$verbosity = "minimal" - -function InstallSourcelinkCli ($sourcelinkCliVersion) { - $sourcelinkCliPackageName = "sourcelink" - - $dotnetRoot = InitializeDotNetCli -install:$true - $dotnet = "$dotnetRoot\dotnet.exe" - $toolList = & "$dotnet" tool list --global - - if (($toolList -like "*$sourcelinkCliPackageName*") -and ($toolList -like "*$sourcelinkCliVersion*")) { - Write-Host "SourceLink CLI version $sourcelinkCliVersion is already installed." - } - else { - Write-Host "Installing SourceLink CLI version $sourcelinkCliVersion..." - Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $sourcelinkCliPackageName --version $sourcelinkCliVersion --verbosity $verbosity --global - } -} - -InstallSourcelinkCli $sourcelinkCliVersion diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index aab7589f2c..6d9bdcf72b 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -86,8 +86,8 @@ if ($TsaPublish) { if (-not $TsaRepositoryName) { $TsaRepositoryName = "$($Repository)-$($BranchName)" } - Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $SourceDirectory --logger-level $GuardianLoggerLevel" - & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --onboard $True --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel if ($LASTEXITCODE -ne 0) { Write-Host "Guardian tsa-publish failed with exit code $LASTEXITCODE." exit $LASTEXITCODE diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index d7b8564458..b90c4399ba 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -25,19 +25,19 @@ if ($ValidPath -eq $False) exit 1 } +$configParam = @("--config") + foreach ($tool in $ToolsList) { $gdnConfigFile = Join-Path $gdnConfigPath "$tool-configure.gdnconfig" - $config = $False Write-Host $tool # We have to manually configure tools that run on source to look at the source directory only if ($tool -eq "credscan") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory : $TargetDirectory `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory : $TargetDirectory " $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory : $TargetDirectory `" `" OutputType : pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory : $TargetDirectory " "OutputType : pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) if ($LASTEXITCODE -ne 0) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE } - $config = $True } if ($tool -eq "policheck") { Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target : $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" @@ -46,22 +46,14 @@ foreach ($tool in $ToolsList) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE } - $config = $True } - Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile $config" - if ($config) { - & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel --config $gdnConfigFile - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian run for $tool using $gdnConfigFile failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE - } - } else { - & $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel - if ($LASTEXITCODE -ne 0) { - Write-Host "Guardian run for $tool failed with exit code $LASTEXITCODE." - exit $LASTEXITCODE - } - } + $configParam+=$gdnConfigFile } +Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam" +& $GuardianCliLocation run --working-directory $WorkingDirectory --tool $tool --baseline mainbaseline --update-baseline $UpdateBaseline --logger-level $GuardianLoggerLevel $configParam +if ($LASTEXITCODE -ne 0) { + Write-Host "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." + exit $LASTEXITCODE +} \ No newline at end of file diff --git a/eng/common/templates/post-build/channels/internal-servicing.yml b/eng/common/templates/post-build/channels/internal-servicing.yml index dc065ab308..348a67e8ad 100644 --- a/eng/common/templates/post-build/channels/internal-servicing.yml +++ b/eng/common/templates/post-build/channels/internal-servicing.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: IS_Publish @@ -34,7 +36,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: publish_assets displayName: Publish Assets @@ -92,6 +96,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index f2b0cfb269..764c47fc1c 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: NetCore_Dev5_Publish @@ -34,7 +36,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -92,6 +96,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index fd6c09b227..7cf6740d79 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: NetCore_Tools_Latest_Publish @@ -34,7 +36,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -92,6 +96,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index 771dcf4ef8..28d764d527 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: Publish @@ -34,7 +36,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: displayName: Publish Assets @@ -92,6 +96,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/public-release.yml index 00108bd3f8..4543e64911 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/public-release.yml @@ -1,5 +1,7 @@ parameters: enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' stages: - stage: PubRel_Publish @@ -34,7 +36,9 @@ stages: /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} - job: publish_assets displayName: Publish Assets @@ -92,6 +96,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index f64184da9f..c62831095b 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,3 +1,6 @@ +parameters: + artifactsPublishingAdditionalParameters: '' + stages: - stage: PVR_Publish dependsOn: validate @@ -63,6 +66,7 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index aba0b0fcaf..e6b75088c9 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -7,6 +7,12 @@ parameters: enable: false params: '' + # These parameters let the user customize the call to sdk-task.ps1 for publishing + # symbols & general artifacts as well as for signing validation + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + signingValidationAdditionalParameters: '' + # Which stages should finish execution before post-build stages start dependsOn: [build] @@ -53,7 +59,8 @@ stages: arguments: -task SigningValidation -restore -msbuildEngine dotnet /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' - /p:Configuration=Release + /p:Configuration=Release + ${{ parameters.signingValidationAdditionalParameters }} - ${{ if eq(parameters.enableSourceLinkValidation, 'true') }}: - job: @@ -87,17 +94,31 @@ stages: - template: \eng\common\templates\post-build\channels\netcore-dev-5.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\public-dev-release.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\public-release.yml + parameters: + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} - template: \eng\common\templates\post-build\channels\internal-servicing.yml + parameters: + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/global.json b/global.json index ab3fa438c1..664bbbf15e 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19412.7", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19415.27", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 4bd06fc2aaf4921873b92a84d707fe07fbe51f7b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 17 Aug 2019 12:30:51 +0000 Subject: [PATCH 029/146] Update dependencies from https://github.com/dotnet/arcade build 20190816.16 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19416.16 --- eng/Version.Details.xml | 4 ++-- .../post-build/channels/internal-servicing.yml | 12 +++++++++--- .../templates/post-build/channels/netcore-dev-5.yml | 12 +++++++++--- .../post-build/channels/netcore-tools-latest.yml | 12 +++++++++--- .../post-build/channels/public-dev-release.yml | 12 +++++++++--- .../templates/post-build/channels/public-release.yml | 12 +++++++++--- global.json | 2 +- 7 files changed, 48 insertions(+), 18 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 56b636c4a3..34abd7a59b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 98d779a16826fd6ecda6d4d4fa8da7b556b9638f + 0e36c2410b72166a1b9a67142e652225e22feada diff --git a/eng/common/templates/post-build/channels/internal-servicing.yml b/eng/common/templates/post-build/channels/internal-servicing.yml index 348a67e8ad..4ca36358d9 100644 --- a/eng/common/templates/post-build/channels/internal-servicing.yml +++ b/eng/common/templates/post-build/channels/internal-servicing.yml @@ -22,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 764c47fc1c..dab3a10e57 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -22,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 7cf6740d79..982ee00627 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -22,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index 28d764d527..36b2818558 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -22,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/public-release.yml index 4543e64911..5dcd9a8c41 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/public-release.yml @@ -22,10 +22,16 @@ stages: vmImage: 'windows-2019' steps: - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts inputs: - downloadType: specific files - matchingPattern: "*Artifacts*" + artifactName: 'PDBArtifacts' + continueOnError: true - task: PowerShell@2 displayName: Publish diff --git a/global.json b/global.json index 664bbbf15e..cfe0df430e 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19415.27", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19416.16", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 0dab3291f3a5d587181136cd51d5c1b0dcb8509b Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Mon, 19 Aug 2019 15:13:24 -0700 Subject: [PATCH 030/146] apply hack to pre-restore FSharp.Core 4.6.2 --- azure-pipelines.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 53288c73d3..2f51c16446 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -63,6 +63,11 @@ stages: steps: - checkout: self clean: true + - task: NuGetToolInstaller@0 + inputs: + versionSpec: 5.1.0 + - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json + displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration $(_BuildConfig) -prepareMachine @@ -169,6 +174,11 @@ stages: steps: - checkout: self clean: true + - task: NuGetToolInstaller@0 + inputs: + versionSpec: 5.1.0 + - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json + displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration $(_configuration) -$(_testKind) displayName: Build / Test - task: PublishTestResults@2 @@ -247,6 +257,11 @@ stages: steps: - checkout: self clean: true + - task: NuGetToolInstaller@0 + inputs: + versionSpec: 5.1.0 + - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json + displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration Release -noSign /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true displayName: Build @@ -257,6 +272,11 @@ stages: steps: - checkout: self clean: true + - task: NuGetToolInstaller@0 + inputs: + versionSpec: 5.1.0 + - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json + displayName: HACK - pre-restore FSharp.Core 4.6.2 - task: PowerShell@2 displayName: Run up-to-date build check inputs: From 0288745f4ef6fabb0048c4aa0ee94bde51d7066c Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 9 Aug 2019 19:53:39 -0700 Subject: [PATCH 031/146] pull all unit test assemblies from NuGet packages (#7378) --- eng/Versions.props | 5 ++ .../tests/Salsa/VisualFSharp.Salsa.fsproj | 37 ++++++++------ vsintegration/tests/Salsa/VsMocks.fs | 48 +++++++------------ .../UnitTests/VisualFSharp.UnitTests.fsproj | 2 + 4 files changed, 46 insertions(+), 46 deletions(-) diff --git a/eng/Versions.props b/eng/Versions.props index 4a8ca4fbc4..95e131a0c0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -116,6 +116,8 @@ 16.1.89 1.1.4322 16.1.89 + 16.1.89 + 16.0.28226-alpha 16.1.28916.169 16.1.28917.181 16.1.3121 @@ -125,6 +127,7 @@ 8.0.50728 7.10.6071 16.1.28917.181 + 16.1.89 8.0.50728 16.0.201-pre-g7d366164d0 2.3.6152103 @@ -141,7 +144,9 @@ 10.0.30320 11.0.61031 12.0.30111 + 16.0.0 16.1.89 + 16.1.89 7.10.6071 8.0.50728 10.0.30320 diff --git a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj index f7eea70d97..c3e21061e0 100644 --- a/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj +++ b/vsintegration/tests/Salsa/VisualFSharp.Salsa.fsproj @@ -49,23 +49,30 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/vsintegration/tests/Salsa/VsMocks.fs b/vsintegration/tests/Salsa/VsMocks.fs index e498dd1f8f..c3008cf636 100644 --- a/vsintegration/tests/Salsa/VsMocks.fs +++ b/vsintegration/tests/Salsa/VsMocks.fs @@ -1657,41 +1657,27 @@ module internal VsActual = let CreateEditorCatalog() = let thisAssembly = Assembly.GetExecutingAssembly().Location - let editorAssemblyDir = Path.Combine(vsInstallDir, @"IDE\CommonExtensions\Microsoft\Editor") - let privateAssemblyDir = Path.Combine(vsInstallDir, @"IDE\PrivateAssemblies") - let publicAssemblyDir = Path.Combine(vsInstallDir, @"IDE\PublicAssemblies") - - let CreateAssemblyCatalog(path, file) = - let fullPath = Path.GetFullPath(Path.Combine(path, file)) - if File.Exists(fullPath) then - new AssemblyCatalog(fullPath) - else - failwith("could not find " + fullPath) - + let thisAssemblyDir = Path.GetDirectoryName(thisAssembly) let list = new ResizeArray() - - let addMovedFile originalDir alternateDir file = - let path = Path.Combine(originalDir, file) - if File.Exists(path) then - list.Add(CreateAssemblyCatalog(originalDir, file)) + let add p = + let fullPath = Path.GetFullPath(Path.Combine(thisAssemblyDir, p)) + if File.Exists(fullPath) then + list.Add(new AssemblyCatalog(fullPath)) else - list.Add(CreateAssemblyCatalog(alternateDir, file)) + failwith <| sprintf "unable to find assembly %s" p list.Add(new AssemblyCatalog(thisAssembly)) - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Text.Data.dll")) - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Text.Logic.dll")) - - // "Microsoft.VisualStudio.Text.Internal.dll" moved locations between dev15 and 16 - // This ensures we can run in both Devs 15 and 16 - addMovedFile privateAssemblyDir editorAssemblyDir "Microsoft.VisualStudio.Text.Internal.dll" - - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Text.UI.dll")) - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Text.UI.Wpf.dll")) - list.Add(CreateAssemblyCatalog(privateAssemblyDir, "Microsoft.VisualStudio.Threading.dll")) - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Platform.VSEditor.dll")) - list.Add(CreateAssemblyCatalog(editorAssemblyDir, "Microsoft.VisualStudio.Editor.Implementation.dll")) - list.Add(CreateAssemblyCatalog(publicAssemblyDir, "Microsoft.VisualStudio.ComponentModelHost.dll")) - list.Add(CreateAssemblyCatalog(publicAssemblyDir, "Microsoft.VisualStudio.Shell.15.0.dll")) + [ "Microsoft.VisualStudio.Text.Data.dll" + "Microsoft.VisualStudio.Text.Logic.dll" + "Microsoft.VisualStudio.Text.Internal.dll" + "Microsoft.VisualStudio.Text.UI.dll" + "Microsoft.VisualStudio.Text.UI.Wpf.dll" + "Microsoft.VisualStudio.Threading.dll" + "Microsoft.VisualStudio.Platform.VSEditor.dll" + "Microsoft.VisualStudio.Editor.Implementation.dll" + "Microsoft.VisualStudio.ComponentModelHost.dll" + "Microsoft.VisualStudio.Shell.15.0.dll" ] + |> List.iter add new AggregateCatalog(list) let exportProvider = new CompositionContainer(new AggregateCatalog(CreateEditorCatalog()), true, null) diff --git a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj index 7a0bea7701..6a3cae016a 100644 --- a/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj +++ b/vsintegration/tests/UnitTests/VisualFSharp.UnitTests.fsproj @@ -234,6 +234,7 @@ + @@ -243,6 +244,7 @@ + From 129dfa41dcc4159a1b0787d2784052dd3f7d2b8d Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 20 Aug 2019 12:28:40 +0000 Subject: [PATCH 032/146] Update dependencies from https://github.com/dotnet/arcade build 20190819.12 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19419.12 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 34abd7a59b..bceba6fdaa 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 0e36c2410b72166a1b9a67142e652225e22feada + 10b2260aeed5f07582bf8d8dcd4221a447b171c5 diff --git a/global.json b/global.json index cfe0df430e..d89f5408ec 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19416.16", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19419.12", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From a18d1852166ecc428e5373effa17bfd1b6924a31 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 20 Aug 2019 19:27:23 -0700 Subject: [PATCH 033/146] remove package restore hack and don't allow package fallback folders (#7430) --- NuGet.config | 3 +++ azure-pipelines.yml | 20 -------------------- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/NuGet.config b/NuGet.config index df85afb048..1b0f596f07 100644 --- a/NuGet.config +++ b/NuGet.config @@ -32,4 +32,7 @@ + + + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 2f51c16446..53288c73d3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -63,11 +63,6 @@ stages: steps: - checkout: self clean: true - - task: NuGetToolInstaller@0 - inputs: - versionSpec: 5.1.0 - - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json - displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration $(_BuildConfig) -prepareMachine @@ -174,11 +169,6 @@ stages: steps: - checkout: self clean: true - - task: NuGetToolInstaller@0 - inputs: - versionSpec: 5.1.0 - - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json - displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration $(_configuration) -$(_testKind) displayName: Build / Test - task: PublishTestResults@2 @@ -257,11 +247,6 @@ stages: steps: - checkout: self clean: true - - task: NuGetToolInstaller@0 - inputs: - versionSpec: 5.1.0 - - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json - displayName: HACK - pre-restore FSharp.Core 4.6.2 - script: eng\CIBuild.cmd -configuration Release -noSign /p:DotNetBuildFromSource=true /p:FSharpSourceBuild=true displayName: Build @@ -272,11 +257,6 @@ stages: steps: - checkout: self clean: true - - task: NuGetToolInstaller@0 - inputs: - versionSpec: 5.1.0 - - script: nuget.exe install FSharp.Core -Version 4.6.2 -Source https://api.nuget.org/v3/index.json - displayName: HACK - pre-restore FSharp.Core 4.6.2 - task: PowerShell@2 displayName: Run up-to-date build check inputs: From dc7493f2a309e613749f7d6279aae80512c0f33d Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 21 Aug 2019 12:33:30 +0000 Subject: [PATCH 034/146] Update dependencies from https://github.com/dotnet/arcade build 20190820.8 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19420.8 --- eng/Version.Details.xml | 4 +- .../post-build/sourcelink-validation.ps1 | 82 +++++++++++++------ .../post-build/channels/netcore-dev-5.yml | 8 +- .../channels/netcore-tools-latest.yml | 8 +- .../channels/public-dev-release.yml | 6 ++ .../post-build/channels/public-release.yml | 1 + .../channels/public-validation-release.yml | 8 +- .../templates/post-build/common-variables.yml | 7 ++ .../templates/post-build/post-build.yml | 6 ++ global.json | 2 +- 10 files changed, 100 insertions(+), 32 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bceba6fdaa..9e5319ccd5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 10b2260aeed5f07582bf8d8dcd4221a447b171c5 + fa168dd690798a683ef0d1e65d60ce5d6918d987 diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 41e01ae6e6..428e8c9607 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -1,8 +1,8 @@ param( [Parameter(Mandatory=$true)][string] $InputPath, # Full path to directory where Symbols.NuGet packages to be checked are stored [Parameter(Mandatory=$true)][string] $ExtractPath, # Full path to directory where the packages will be extracted during validation - [Parameter(Mandatory=$true)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade - [Parameter(Mandatory=$true)][string] $GHCommit, # GitHub commit SHA used to build the packages + [Parameter(Mandatory=$false)][string] $GHRepoName, # GitHub name of the repo including the Org. E.g., dotnet/arcade + [Parameter(Mandatory=$false)][string] $GHCommit, # GitHub commit SHA used to build the packages [Parameter(Mandatory=$true)][string] $SourcelinkCliVersion # Version of SourceLink CLI to use ) @@ -13,6 +13,12 @@ param( # all files present in the repo at a specific commit point. $global:RepoFiles = @{} +# Maximum number of jobs to run in parallel +$MaxParallelJobs = 6 + +# Wait time between check for system load +$SecondsBetweenLoadChecks = 10 + $ValidatePackage = { param( [string] $PackagePath # Full path to a Symbols.NuGet package @@ -22,8 +28,8 @@ $ValidatePackage = { # Ensure input file exist if (!(Test-Path $PackagePath)) { - Write-PipelineTaskError "Input file does not exist: $PackagePath" - ExitWithExitCode 1 + Write-Host "Input file does not exist: $PackagePath" + return 1 } # Extensions for which we'll look for SourceLink information @@ -38,7 +44,7 @@ $ValidatePackage = { Add-Type -AssemblyName System.IO.Compression.FileSystem - [System.IO.Directory]::CreateDirectory($ExtractPath); + [System.IO.Directory]::CreateDirectory($ExtractPath) | Out-Null try { $zip = [System.IO.Compression.ZipFile]::OpenRead($PackagePath) @@ -138,16 +144,18 @@ $ValidatePackage = { if ($FailedFiles -eq 0) { Write-Host "Passed." + return 0 } else { - Write-PipelineTaskError "$PackagePath has broken SourceLink links." + Write-Host "$PackagePath has broken SourceLink links." + return 1 } } function ValidateSourceLinkLinks { - if (!($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { + if ($GHRepoName -ne "" -and !($GHRepoName -Match "^[^\s\/]+/[^\s\/]+$")) { if (!($GHRepoName -Match "^[^\s-]+-[^\s]+$")) { - Write-PipelineTaskError "GHRepoName should be in the format / or -" + Write-PipelineTaskError "GHRepoName should be in the format / or -. '$GHRepoName'" ExitWithExitCode 1 } else { @@ -155,30 +163,33 @@ function ValidateSourceLinkLinks { } } - if (!($GHCommit -Match "^[0-9a-fA-F]{40}$")) { - Write-PipelineTaskError "GHCommit should be a 40 chars hexadecimal string" + if ($GHCommit -ne "" -and !($GHCommit -Match "^[0-9a-fA-F]{40}$")) { + Write-PipelineTaskError "GHCommit should be a 40 chars hexadecimal string. '$GHCommit'" ExitWithExitCode 1 } - $RepoTreeURL = -Join("http://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") - $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") + if ($GHRepoName -ne "" -and $GHCommit -ne "") { + $RepoTreeURL = -Join("http://api.github.com/repos/", $GHRepoName, "/git/trees/", $GHCommit, "?recursive=1") + $CodeExtensions = @(".cs", ".vb", ".fs", ".fsi", ".fsx", ".fsscript") - try { - # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash - $Data = Invoke-WebRequest $RepoTreeURL -UseBasicParsing | ConvertFrom-Json | Select-Object -ExpandProperty tree + try { + # Retrieve the list of files in the repo at that particular commit point and store them in the RepoFiles hash + $Data = Invoke-WebRequest $RepoTreeURL -UseBasicParsing | ConvertFrom-Json | Select-Object -ExpandProperty tree - foreach ($file in $Data) { - $Extension = [System.IO.Path]::GetExtension($file.path) + foreach ($file in $Data) { + $Extension = [System.IO.Path]::GetExtension($file.path) - if ($CodeExtensions.Contains($Extension)) { - $RepoFiles[$file.path] = 1 + if ($CodeExtensions.Contains($Extension)) { + $RepoFiles[$file.path] = 1 + } } } + catch { + Write-Host "Problems downloading the list of files from the repo. Url used: $RepoTreeURL . Execution will proceed without caching." + } } - catch { - Write-PipelineTaskError "Problems downloading the list of files from the repo. Url used: $RepoTreeURL" - Write-Host $_ - ExitWithExitCode 1 + elseif ($GHRepoName -ne "" -or $GHCommit -ne "") { + Write-Host "For using the http caching mechanism both GHRepoName and GHCommit should be informed." } if (Test-Path $ExtractPath) { @@ -186,14 +197,33 @@ function ValidateSourceLinkLinks { } # Process each NuGet package in parallel - $Jobs = @() Get-ChildItem "$InputPath\*.symbols.nupkg" | ForEach-Object { - $Jobs += Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName + Start-Job -ScriptBlock $ValidatePackage -ArgumentList $_.FullName | Out-Null + $NumJobs = @(Get-Job -State 'Running').Count + + while ($NumJobs -ge $MaxParallelJobs) { + Write-Host "There are $NumJobs validation jobs running right now. Waiting $SecondsBetweenLoadChecks seconds to check again." + sleep $SecondsBetweenLoadChecks + $NumJobs = @(Get-Job -State 'Running').Count + } + + foreach ($Job in @(Get-Job -State 'Completed')) { + Receive-Job -Id $Job.Id + Remove-Job -Id $Job.Id + } } + $ValidationFailures = 0 foreach ($Job in $Jobs) { - Wait-Job -Id $Job.Id | Receive-Job + $jobResult = Wait-Job -Id $Job.Id | Receive-Job + if ($jobResult -ne "0") { + $ValidationFailures++ + } + } + if ($ValidationFailures -gt 0) { + Write-PipelineTaskError " $ValidationFailures package(s) failed validation." + ExitWithExitCode 1 } } diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index dab3a10e57..812def3154 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Dev5_Publish @@ -101,7 +102,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 982ee00627..c2d2076730 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Tools_Latest_Publish @@ -101,7 +102,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/public-dev-release.yml index 36b2818558..afa9542148 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/public-dev-release.yml @@ -2,6 +2,7 @@ parameters: enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: Publish @@ -102,6 +103,11 @@ stages: /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/public-release.yml index 5dcd9a8c41..7ec1f89c08 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/public-release.yml @@ -90,6 +90,7 @@ stages: /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index c62831095b..12124d6215 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,5 +1,6 @@ parameters: artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: PVR_Publish @@ -65,7 +66,12 @@ stages: /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:Configuration=Release + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 52a74487fd..b00d85d8ce 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -1,5 +1,6 @@ variables: - group: Publish-Build-Assets + - group: DotNet-DotNetCli-Storage # .NET Core 3 Dev - name: PublicDevRelease_30_Channel_Id @@ -45,3 +46,9 @@ variables: value: 3.0.0 - name: SymbolToolVersion value: 1.0.1 + + # Default locations for Installers and checksums + - name: ChecksumsBlobFeedUrl + value: https://dotnetcli.blob.core.windows.net/dotnet/index.json + - name: InstallersBlobFeedUrl + value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index e6b75088c9..3f239fae2b 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -3,6 +3,7 @@ parameters: enableSigningValidation: true enableSymbolValidation: true enableNugetValidation: true + publishInstallersAndChecksums: false SDLValidationParameters: enable: false params: '' @@ -85,6 +86,7 @@ stages: -GHRepoName $(Build.Repository.Name) -GHCommit $(Build.SourceVersion) -SourcelinkCliVersion $(SourceLinkCLIVersion) + continueOnError: true - ${{ if eq(parameters.SDLValidationParameters.enable, 'true') }}: - template: /eng/common/templates/job/execute-sdl.yml @@ -96,22 +98,26 @@ stages: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-dev-release.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\public-release.yml parameters: diff --git a/global.json b/global.json index d89f5408ec..048c3a55cb 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19419.12", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19420.8", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 3471e1c9dcb1f93803f194c83475f49fe3cc08fe Mon Sep 17 00:00:00 2001 From: Grzegorz Dziadkiewicz Date: Wed, 21 Aug 2019 17:55:54 +0200 Subject: [PATCH 035/146] Fix #5729 (#6352) --- src/fsharp/FSharp.Core/prim-types.fs | 28 +++++---- src/fsharp/lex.fsl | 14 ++--- .../FSharp.Core/PrimTypes.fs | 58 ++++++++++++++++++- .../NumericLiterals/E_MaxLiterals04.fs | 11 ++++ .../LexicalAnalysis/NumericLiterals/env.lst | 1 + 5 files changed, 88 insertions(+), 24 deletions(-) create mode 100644 tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/E_MaxLiterals04.fs diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 2e91dec124..bfd5bdacc9 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -2395,13 +2395,11 @@ namespace Microsoft.FSharp.Core then p <- p + 1; -1L else 1L - let parseOctalUInt64 (s:string) p l = - let rec parse n acc = if n < l then parse (n+1) (acc *.. 8UL +.. (let c = s.Chars(n) in if c >=... '0' && c <=... '7' then Convert.ToUInt64(c) -.. Convert.ToUInt64('0') else formatError())) else acc in - parse p 0UL - - let parseBinaryUInt64 (s:string) p l = - let rec parse n acc = if n < l then parse (n+1) (acc *.. 2UL +.. (match s.Chars(n) with '0' -> 0UL | '1' -> 1UL | _ -> formatError())) else acc in - parse p 0UL + let parseBinaryUInt64 (s:string) = + Convert.ToUInt64(s, 2) + + let parseOctalUInt64 (s:string) = + Convert.ToUInt64(s, 8) let inline removeUnderscores (s:string) = match s with @@ -2418,8 +2416,8 @@ namespace Microsoft.FSharp.Core if p >= l then formatError() else match specifier with | 'x' -> UInt32.Parse( s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture) - | 'b' -> Convert.ToUInt32(parseBinaryUInt64 s p l) - | 'o' -> Convert.ToUInt32(parseOctalUInt64 s p l) + | 'b' -> Convert.ToUInt32(parseBinaryUInt64 (s.Substring(p))) + | 'o' -> Convert.ToUInt32(parseOctalUInt64 (s.Substring(p))) | _ -> UInt32.Parse(s.Substring(p), NumberStyles.Integer, CultureInfo.InvariantCulture) in let inline int32OfUInt32 (x:uint32) = (# "" x : int32 #) @@ -2436,8 +2434,8 @@ namespace Microsoft.FSharp.Core if p >= l then formatError() else match Char.ToLowerInvariant(specifier) with | 'x' -> sign * (int32OfUInt32 (Convert.ToUInt32(UInt64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture)))) - | 'b' -> sign * (int32OfUInt32 (Convert.ToUInt32(parseBinaryUInt64 s p l))) - | 'o' -> sign * (int32OfUInt32 (Convert.ToUInt32(parseOctalUInt64 s p l))) + | 'b' -> sign * (int32OfUInt32 (Convert.ToUInt32(parseBinaryUInt64 (s.Substring(p))))) + | 'o' -> sign * (int32OfUInt32 (Convert.ToUInt32(parseOctalUInt64 (s.Substring(p))))) | _ -> Int32.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) let ParseInt64 (s:string) = @@ -2451,8 +2449,8 @@ namespace Microsoft.FSharp.Core if p >= l then formatError() else match Char.ToLowerInvariant(specifier) with | 'x' -> sign *. Int64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture) - | 'b' -> sign *. (int64OfUInt64 (parseBinaryUInt64 s p l)) - | 'o' -> sign *. (int64OfUInt64 (parseOctalUInt64 s p l)) + | 'b' -> sign *. (int64OfUInt64 (parseBinaryUInt64 (s.Substring(p)))) + | 'o' -> sign *. (int64OfUInt64 (parseOctalUInt64 (s.Substring(p)))) | _ -> Int64.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) let ParseUInt64 (s:string) : uint64 = @@ -2465,8 +2463,8 @@ namespace Microsoft.FSharp.Core if p >= l then formatError() else match specifier with | 'x' -> UInt64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture) - | 'b' -> parseBinaryUInt64 s p l - | 'o' -> parseOctalUInt64 s p l + | 'b' -> parseBinaryUInt64 (s.Substring(p)) + | 'o' -> parseOctalUInt64 (s.Substring(p)) | _ -> UInt64.Parse(s.Substring(p), NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl index c32c9a641b..a0d3f449c0 100644 --- a/src/fsharp/lex.fsl +++ b/src/fsharp/lex.fsl @@ -66,13 +66,11 @@ let get0OXB (s:string) (p:byref) l = let formatError() = raise (new System.FormatException(SR.GetString("bad format string"))) -let parseBinaryUInt64 (s:string) p l = - let rec parse n acc = if n < l then parse (n+1) (acc * 2UL + (match s.[n] with '0' -> 0UL | '1' -> 1UL | _ -> formatError())) else acc - parse p 0UL +let parseBinaryUInt64 (s:string) = + Convert.ToUInt64(s, 2) -let parseOctalUInt64 (s:string) p l = - let rec parse n acc = if n < l then parse (n+1) (acc * 8UL + (let c = s.[n] in if c >= '0' && c <= '7' then Convert.ToUInt64 c - Convert.ToUInt64 '0' else formatError())) else acc - parse p 0UL +let parseOctalUInt64 (s:string) = + Convert.ToUInt64(s, 8) let removeUnderscores (s:string) = match s with @@ -91,8 +89,8 @@ let parseInt32 (s:string) = match Char.ToLower(specifier,CultureInfo.InvariantCulture) with #endif | 'x' -> sign * (int32 (Convert.ToUInt32(UInt64.Parse(s.Substring(p), NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture)))) - | 'b' -> sign * (int32 (Convert.ToUInt32(parseBinaryUInt64 s p l))) - | 'o' -> sign * (int32 (Convert.ToUInt32(parseOctalUInt64 s p l))) + | 'b' -> sign * (int32 (Convert.ToUInt32(parseBinaryUInt64 (s.Substring(p))))) + | 'o' -> sign * (int32 (Convert.ToUInt32(parseOctalUInt64 (s.Substring(p))))) | _ -> Int32.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture) let lexemeTrimRightToInt32 args lexbuf n = diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs index 8b88798ec4..9d92d474cf 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/PrimTypes.fs @@ -423,10 +423,47 @@ type LanguagePrimitivesModule() = let resultValue = LanguagePrimitives.ParseInt64 "0" Assert.AreEqual(0L, resultValue) + + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseInt64 "9223372036854775808" |> ignore) + CheckThrowsFormatException(fun () -> LanguagePrimitives.ParseInt64 "" |> ignore) CheckThrowsArgumentNullException(fun () -> LanguagePrimitives.ParseInt64 null |> ignore) - + + [] + member this.ParseBinaryInt64() = + let resultValue = LanguagePrimitives.ParseInt64 "0b1100100" + Assert.AreEqual(typeof, resultValue.GetType()) + Assert.AreEqual(100L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "-0b101100011010001010111100001011101100010100000000000000000" + Assert.AreEqual(-100000000000000000L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "0b1111111010011100101110101000011110100010011101100000000000000000" + Assert.AreEqual(-100000000000000000L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "0b0" + Assert.AreEqual(0L, resultValue) + + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseInt64 "0b10000000000000000000000000000000000000000000000000000000000000000" |> ignore) + + [] + member this.ParseOctalInt64() = + let resultValue = LanguagePrimitives.ParseInt64 "0o144" + Assert.AreEqual(typeof, resultValue.GetType()) + Assert.AreEqual(100L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "-0o5432127413542400000" + Assert.AreEqual(-100000000000000000L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "0o1772345650364235400000" + Assert.AreEqual(-100000000000000000L, resultValue) + + let resultValue = LanguagePrimitives.ParseInt64 "0o0" + Assert.AreEqual(0L, resultValue) + + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseInt64 "0o2000000000000000000000" |> ignore) + [] member this.ParseUInt32() = let resultValue = LanguagePrimitives.ParseUInt32 "100" @@ -444,9 +481,28 @@ type LanguagePrimitivesModule() = Assert.AreEqual(100UL, resultValue) CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseUInt64 "-1" |> ignore) + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseUInt64 "18446744073709551616" |> ignore) CheckThrowsArgumentNullException(fun () -> LanguagePrimitives.ParseUInt64 null |> ignore) + [] + member this.ParseBinaryUInt64() = + let resultValue = LanguagePrimitives.ParseUInt64 "0b1100100" + Assert.AreEqual(typeof, resultValue.GetType()) + Assert.AreEqual(100UL, resultValue) + + CheckThrowsFormatException(fun () -> LanguagePrimitives.ParseUInt64 "-0b1" |> ignore) + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseUInt64 "0b10000000000000000000000000000000000000000000000000000000000000000" |> ignore) + + [] + member this.ParseOctalUInt64() = + let resultValue = LanguagePrimitives.ParseUInt64 "0o144" + Assert.AreEqual(typeof, resultValue.GetType()) + Assert.AreEqual(100UL, resultValue) + + CheckThrowsFormatException(fun () -> LanguagePrimitives.ParseUInt64 "-0o1" |> ignore) + CheckThrowsOverflowException(fun () -> LanguagePrimitives.ParseUInt64 "0o2000000000000000000000" |> ignore) + [] member this.ParseStringViaConversionOps() = let s : string = null diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/E_MaxLiterals04.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/E_MaxLiterals04.fs new file mode 100644 index 0000000000..f451f17e32 --- /dev/null +++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/E_MaxLiterals04.fs @@ -0,0 +1,11 @@ +// #Regression #Conformance #LexicalAnalysis #Constants + + +// Verify compile error for signed literals which are MaxSize + 1, MaxSize - 1 +// All of these should cause compiler errors + +//This number is outside the allowable range for 64-bit signed integers +//This number is outside the allowable range for 64-bit signed integers + +let int64Bin65bits = 0b1_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000L +let int64Octal65bits = 0o2_000_000_000_000_000_000_000L diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/env.lst b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/env.lst index 47fdc9891d..17880073bf 100644 --- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/env.lst +++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/NumericLiterals/env.lst @@ -23,6 +23,7 @@ SOURCE=E_MaxLiterals01.fs # E_MaxLiterals01.fs SOURCE=E_MaxLiterals02.fs # E_MaxLiterals02.fs SOURCE=E_MaxLiterals03.fs # E_MaxLiterals03.fs + SOURCE=E_MaxLiterals04.fs # E_MaxLiterals04.fs SOURCE=BigNums01.fs # BigNums01.fs From 503c391530c2e85636625ba1fccd4c9c04ba7f56 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 23 Aug 2019 15:37:41 -0700 Subject: [PATCH 036/146] add FSharp.Compiler.Scripting (#7437) * add FSharp.Compiler.Scripting * allow evaluation of non-expressions * rename FSharp.Compiler.Scripting to FSharp.Compiler.Private.Scripting * remove unnecessary project reference --- FSharp.sln | 30 ++++++++++ VisualFSharp.sln | 32 +++++++++- eng/Build.ps1 | 2 + eng/build.sh | 1 + .../Directory.Build.props | 9 +++ .../FSharp.Compiler.Private.Scripting.fsproj | 26 ++++++++ .../FSharp.Compiler.Private.Scripting.nuspec | 18 ++++++ .../FSharpScript.fs | 56 ++++++++++++++++++ .../TextHelpers.fs | 36 +++++++++++ src/fsharp/fsi/fsi.fs | 3 +- src/fsharp/fsi/fsi.fsi | 2 +- .../Directory.Build.props | 9 +++ ...ompiler.Private.Scripting.UnitTests.fsproj | 22 +++++++ .../FSharpScriptTests.fs | 59 +++++++++++++++++++ 14 files changed, 301 insertions(+), 4 deletions(-) create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs create mode 100644 src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj create mode 100644 tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs diff --git a/FSharp.sln b/FSharp.sln index e1c47795e8..9b650e008c 100644 --- a/FSharp.sln +++ b/FSharp.sln @@ -39,6 +39,10 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageSer EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{C97819B0-B428-4B96-9CD7-497D2D1C738C}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{6771860A-614D-4FDD-A655-4C70EBCC91B0}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{4FEDF286-0252-4EBC-9E75-879CCA3B85DC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -205,6 +209,30 @@ Global {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|Any CPU.Build.0 = Release|Any CPU {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.ActiveCfg = Release|Any CPU {C97819B0-B428-4B96-9CD7-497D2D1C738C}.Release|x86.Build.0 = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Debug|x86.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|Any CPU.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.ActiveCfg = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Proto|x86.Build.0 = Debug|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|Any CPU.Build.0 = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.ActiveCfg = Release|Any CPU + {6771860A-614D-4FDD-A655-4C70EBCC91B0}.Release|x86.Build.0 = Release|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Debug|x86.Build.0 = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Proto|Any CPU.Build.0 = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Proto|x86.ActiveCfg = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Proto|x86.Build.0 = Debug|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|Any CPU.Build.0 = Release|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.ActiveCfg = Release|Any CPU + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -223,6 +251,8 @@ Global {81B9FE26-C976-4FC7-B6CC-C7DB5903CAA7} = {3840F2E7-3898-45F7-8CF7-1E6829E56DB8} {99B3F4A5-80B4-41D9-A073-117DB6D7DBBA} = {B8DDA694-7939-42E3-95E5-265C2217C142} {C97819B0-B428-4B96-9CD7-497D2D1C738C} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} + {6771860A-614D-4FDD-A655-4C70EBCC91B0} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {4FEDF286-0252-4EBC-9E75-879CCA3B85DC} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BD5177C7-1380-40E7-94D2-7768E1A8B1B8} diff --git a/VisualFSharp.sln b/VisualFSharp.sln index 4a1e75f446..922db312ad 100644 --- a/VisualFSharp.sln +++ b/VisualFSharp.sln @@ -158,7 +158,11 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageSer EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.LanguageServer.UnitTests", "tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj", "{AAF2D233-1C38-4090-8FFA-F7C545625E06}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FSharp.Editor.Helpers", "vsintegration\src\FSharp.Editor.Helpers\FSharp.Editor.Helpers.csproj", "{79255A92-ED00-40BA-9D64-12FCC664A976}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FSharp.Editor.Helpers", "vsintegration\src\FSharp.Editor.Helpers\FSharp.Editor.Helpers.csproj", "{79255A92-ED00-40BA-9D64-12FCC664A976}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting", "src\fsharp\FSharp.Compiler.Private.Scripting\FSharp.Compiler.Private.Scripting.fsproj", "{20B7BC36-CF51-4D75-9E13-66681C07977F}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Compiler.Private.Scripting.UnitTests", "tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj", "{09F56540-AFA5-4694-B7A6-0DBF6D4618C2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -926,6 +930,30 @@ Global {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|Any CPU.Build.0 = Release|Any CPU {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|x86.ActiveCfg = Release|Any CPU {79255A92-ED00-40BA-9D64-12FCC664A976}.Release|x86.Build.0 = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Debug|x86.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|Any CPU.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.ActiveCfg = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Proto|x86.Build.0 = Debug|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|Any CPU.Build.0 = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.ActiveCfg = Release|Any CPU + {20B7BC36-CF51-4D75-9E13-66681C07977F}.Release|x86.Build.0 = Release|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|x86.ActiveCfg = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Debug|x86.Build.0 = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Proto|Any CPU.ActiveCfg = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Proto|Any CPU.Build.0 = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Proto|x86.ActiveCfg = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Proto|x86.Build.0 = Debug|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|Any CPU.Build.0 = Release|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.ActiveCfg = Release|Any CPU + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1001,6 +1029,8 @@ Global {60BAFFA5-6631-4328-B044-2E012AB76DCA} = {B8DDA694-7939-42E3-95E5-265C2217C142} {AAF2D233-1C38-4090-8FFA-F7C545625E06} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} {79255A92-ED00-40BA-9D64-12FCC664A976} = {4C7B48D7-19AF-4AE7-9D1D-3BB289D5480D} + {20B7BC36-CF51-4D75-9E13-66681C07977F} = {B8DDA694-7939-42E3-95E5-265C2217C142} + {09F56540-AFA5-4694-B7A6-0DBF6D4618C2} = {CFE3259A-2D30-4EB0-80D5-E8B5F3D01449} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {48EDBBBE-C8EE-4E3C-8B19-97184A487B37} diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 75f0178b7d..1d64fc8460 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -337,6 +337,7 @@ try { if ($testDesktop -and -not $noVisualStudio) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $desktopTargetFramework + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $desktopTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $desktopTargetFramework @@ -345,6 +346,7 @@ try { if ($testCoreClr) { TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.UnitTests\FSharp.Compiler.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.LanguageServer.UnitTests\FSharp.Compiler.LanguageServer.UnitTests.fsproj" -targetFramework $coreclrTargetFramework + TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Compiler.Private.Scripting.UnitTests\FSharp.Compiler.Private.Scripting.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Build.UnitTests\FSharp.Build.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\FSharp.Core.UnitTests\FSharp.Core.UnitTests.fsproj" -targetFramework $coreclrTargetFramework TestUsingNUnit -testProject "$RepoRoot\tests\fsharp\FSharpSuite.Tests.fsproj" -targetFramework $coreclrTargetFramework diff --git a/eng/build.sh b/eng/build.sh index e806856c55..e7627f2bd4 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -272,6 +272,7 @@ if [[ "$test_core_clr" == true ]]; then coreclrtestframework=netcoreapp3.0 TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.UnitTests/FSharp.Compiler.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj" --targetframework $coreclrtestframework + TestUsingNUnit --testproject "$repo_root/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Build.UnitTests/FSharp.Build.UnitTests.fsproj" --targetframework $coreclrtestframework TestUsingNUnit --testproject "$repo_root/tests/FSharp.Core.UnitTests/FSharp.Core.UnitTests.fsproj" --targetframework $coreclrtestframework fi diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props b/src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props new file mode 100644 index 0000000000..7cd41381b5 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/Directory.Build.props @@ -0,0 +1,9 @@ + + + + true + + + + + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj new file mode 100644 index 0000000000..710cf8a8e5 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.fsproj @@ -0,0 +1,26 @@ + + + + netstandard2.0 + true + Provides embedding F# language scripting. + FSharp.Compiler.Private.Scripting.nuspec + true + + + + + + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec new file mode 100644 index 0000000000..dac8f0c240 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -0,0 +1,18 @@ + + + + $CommonMetadataElements$ + en-US + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs new file mode 100644 index 0000000000..4f9bce020a --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Scripting + +open System +open FSharp.Compiler.Interactive.Shell + +type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = + let outputProduced = Event() + let errorProduced = Event() + + // handle stdin/stdout + let stdin = new CapturedTextReader() + let stdout = new EventedTextWriter() + let stderr = new EventedTextWriter() + do stdout.LineWritten.Add outputProduced.Trigger + do stderr.LineWritten.Add errorProduced.Trigger + let captureInput = defaultArg captureInput false + let captureOutput = defaultArg captureOutput false + let savedInput = Console.In + let savedOutput = Console.Out + let savedError = Console.Error + do (fun () -> + if captureInput then + Console.SetIn(stdin) + if captureOutput then + Console.SetOut(stdout) + Console.SetError(stderr) + ())() + + let config = FsiEvaluationSession.GetDefaultConfiguration() + let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + + member __.ProvideInput = stdin.ProvideInput + + member __.OutputProduced = outputProduced.Publish + + member __.ErrorProduced = errorProduced.Publish + + member __.Eval(code: string) = + let ch, errors = fsi.EvalInteractionNonThrowing code + match ch with + | Choice1Of2 v -> Ok(v), errors + | Choice2Of2 ex -> Error(ex), errors + + interface IDisposable with + member __.Dispose() = + if captureInput then + Console.SetIn(savedInput) + if captureOutput then + Console.SetOut(savedOutput) + Console.SetError(savedError) + stdin.Dispose() + stdout.Dispose() + stderr.Dispose() diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs new file mode 100644 index 0000000000..87e846b400 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/TextHelpers.fs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Scripting + +open System.Collections.Generic +open System.IO +open System.Text + +type internal CapturedTextReader() = + inherit TextReader() + let queue = Queue() + member __.ProvideInput(text: string) = + for c in text.ToCharArray() do + queue.Enqueue(c) + override __.Peek() = + if queue.Count > 0 then queue.Peek() |> int + else -1 + override __.Read() = + if queue.Count > 0 then queue.Dequeue() |> int + else -1 + +type internal EventedTextWriter() = + inherit TextWriter() + let sb = StringBuilder() + let lineWritten = Event() + member __.LineWritten = lineWritten.Publish + override __.Encoding = Encoding.UTF8 + override __.Write(c: char) = + if c = '\n' then + let line = + let v = sb.ToString() + if v.EndsWith("\r") then v.Substring(0, v.Length - 1) + else v + sb.Clear() |> ignore + lineWritten.Trigger(line) + else sb.Append(c) |> ignore diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 02b26bf9af..d36f442e58 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2709,9 +2709,8 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let errorOptions = TcConfig.Create(tcConfigB,validate = false).errorSeverityOptions let errorLogger = CompilationErrorLogger("EvalInteraction", errorOptions) - fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) + fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) |> commitResultNonThrowing errorOptions "input.fsx" errorLogger - |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs member x.EvalScript(scriptPath) : unit = // Explanation: When the user of the FsiInteractiveSession object calls this method, the diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 49c307b6cb..918afe85f9 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -149,7 +149,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteractionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalInteractionNonThrowing : code: string -> Choice * FSharpErrorInfo[] /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors are sent to the output writer, a 'true' return value indicates there diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props b/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props new file mode 100644 index 0000000000..7cd41381b5 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/Directory.Build.props @@ -0,0 +1,9 @@ + + + + true + + + + + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj new file mode 100644 index 0000000000..51beecf2af --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharp.Compiler.Private.Scripting.UnitTests.fsproj @@ -0,0 +1,22 @@ + + + + + net472;netcoreapp3.0 + netcoreapp3.0 + Library + true + nunit + true + + + + + + + + + + + + diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs new file mode 100644 index 0000000000..bd37650d33 --- /dev/null +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Scripting.UnitTests + +open System +open System.Threading +open FSharp.Compiler.Interactive.Shell +open FSharp.Compiler.Scripting +open FSharp.Compiler.SourceCodeServices +open NUnit.Framework + +[] +type InteractiveTests() = + + let getValue ((value: Result), (errors: FSharpErrorInfo[])) = + if errors.Length > 0 then + failwith <| sprintf "Evaluation returned %d errors:\r\n\t%s" errors.Length (String.Join("\r\n\t", errors)) + match value with + | Ok(value) -> value + | Error ex -> raise ex + + let ignoreValue = getValue >> ignore + + [] + member __.``Eval object value``() = + use script = new FSharpScript() + let opt = script.Eval("1+1") |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(2, value.ReflectionValue :?> int) + + [] + member __.``Capture console input``() = + use script = new FSharpScript(captureInput=true) + script.ProvideInput "stdin:1234\r\n" + let opt = script.Eval("System.Console.ReadLine()") |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual("stdin:1234", value.ReflectionValue) + + [] + member __.``Capture console output/error``() = + use script = new FSharpScript(captureOutput=true) + use sawOutputSentinel = new ManualResetEvent(false) + use sawErrorSentinel = new ManualResetEvent(false) + script.OutputProduced.Add (fun line -> if line = "stdout:1234" then sawOutputSentinel.Set() |> ignore) + script.ErrorProduced.Add (fun line -> if line = "stderr:5678" then sawErrorSentinel.Set() |> ignore) + script.Eval("printfn \"stdout:1234\"; eprintfn \"stderr:5678\"") |> ignoreValue + Assert.True(sawOutputSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see output sentinel value written") + Assert.True(sawErrorSentinel.WaitOne(TimeSpan.FromSeconds(5.0)), "Expected to see error sentinel value written") + + [] + member __.``Maintain state between submissions``() = + use script = new FSharpScript() + script.Eval("let add x y = x + y") |> ignoreValue + let opt = script.Eval("add 2 3") |> getValue + let value = opt.Value + Assert.AreEqual(typeof, value.ReflectionType) + Assert.AreEqual(5, value.ReflectionValue :?> int) From 168e150d8d38b1c6c9355bf299bc60be5dadcabd Mon Sep 17 00:00:00 2001 From: Chuck Ries Date: Fri, 23 Aug 2019 16:25:41 -0700 Subject: [PATCH 037/146] IMAGE_DEBUG_TYPE_CHECKSUMPDB version in pdb writer (#7443) F# Compiler is emitting the incorrect minor version number for Debug Directory entry type #19 (PDB Checksum). This bug seems like either a copy/paste error or human error. 0x0100 is the correct minor version number for embedded pdb info, but 0 is the correct minor version number for pdb checksum as spec'd here: https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PE-COFF.md#pdb-checksum-debug-directory-entry-type-19 This issues causes the VS Debugger to ignore PDB Checksum entries in F# pdbs, which breaks NuGet.org Symbol Server scenarios for F#. --- src/absil/ilwritepdb.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index 86b7ee9224..90d53444e7 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -203,7 +203,7 @@ let pdbChecksumDebugInfo timestamp (checksumPdbChunk: BinaryChunk) (algorithmNam buffer { iddCharacteristics = 0 // Reserved iddMajorVersion = 1 // VersionMajor should be 1 - iddMinorVersion = 0x0100 // VersionMinor should be 0x0100 + iddMinorVersion = 0 // VersionMinor should be 0 iddType = 19 // IMAGE_DEBUG_TYPE_CHECKSUMPDB iddTimestamp = timestamp iddData = iddBuffer // Path name to the pdb file when built From f5a8360ab64bf09b346e08592ffd36ce8d839edf Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2019 22:12:29 -0700 Subject: [PATCH 038/146] [master] Update dependencies from dotnet/arcade (#7438) * Update dependencies from https://github.com/dotnet/arcade build 20190821.4 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19421.4 * Update dependencies from https://github.com/dotnet/arcade build 20190822.24 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19422.24 --- eng/Version.Details.xml | 4 +- eng/common/performance/perfhelixpublish.proj | 25 +++++++++++++ eng/common/performance/performance-setup.ps1 | 17 ++++++++- eng/common/performance/performance-setup.sh | 37 ++++++++++++++++++- .../post-build/sourcelink-validation.ps1 | 2 +- global.json | 2 +- 6 files changed, 81 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9e5319ccd5..e55a3460eb 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - fa168dd690798a683ef0d1e65d60ce5d6918d987 + c7f03b2cf06bdfc64dad4140fd0d486127095cd8 diff --git a/eng/common/performance/perfhelixpublish.proj b/eng/common/performance/perfhelixpublish.proj index 05e5f09891..d07b1fa6e2 100644 --- a/eng/common/performance/perfhelixpublish.proj +++ b/eng/common/performance/perfhelixpublish.proj @@ -5,8 +5,14 @@ --dotnet-versions %DOTNET_VERSION% --cli-source-info args --cli-branch %PERFLAB_BRANCH% --cli-commit-sha %PERFLAB_HASH% --cli-repository https://github.com/%PERFLAB_REPO% --cli-source-timestamp %PERFLAB_BUILDTIMESTAMP% py -3 %HELIX_CORRELATION_PAYLOAD%\Core_Root\CoreRun.exe + %HELIX_CORRELATION_PAYLOAD%\Baseline_Core_Root\CoreRun.exe $(HelixPreCommands);call %HELIX_CORRELATION_PAYLOAD%\performance\tools\machine-setup.cmd %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts + %HELIX_CORRELATION_PAYLOAD%\artifacts\BenchmarkDotNet.Artifacts_Baseline + %HELIX_CORRELATION_PAYLOAD%\performance\src\tools\ResultsComparer\ResultsComparer.csproj + %HELIX_CORRELATION_PAYLOAD%\performance\tools\dotnet\$(Architecture)\dotnet.exe + %25%25 + %HELIX_WORKITEM_ROOT%\testResults.xml @@ -24,14 +30,24 @@ --dotnet-versions $DOTNET_VERSION --cli-source-info args --cli-branch $PERFLAB_BRANCH --cli-commit-sha $PERFLAB_HASH --cli-repository https://github.com/$PERFLAB_REPO --cli-source-timestamp $PERFLAB_BUILDTIMESTAMP python3 $(BaseDirectory)/Core_Root/corerun + $(BaseDirectory)/Baseline_Core_Root/corerun $(HelixPreCommands);chmod +x $(PerformanceDirectory)/tools/machine-setup.sh;. $(PerformanceDirectory)/tools/machine-setup.sh $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts + $(BaseDirectory)/artifacts/BenchmarkDotNet.Artifacts_Baseline + $(PerformanceDirectory)/src/tools/ResultsComparer/ResultsComparer.csproj + $(PerformanceDirectory)/tools/dotnet/$(Architecture)/dotnet + %25 + $HELIX_WORKITEM_ROOT/testResults.xml --corerun $(CoreRun) + + --corerun $(BaselineCoreRun) + + $(Python) $(WorkItemCommand) --incremental no --architecture $(Architecture) -f $(_Framework) $(PerfLabArguments) @@ -57,20 +73,29 @@ + + false + + $(WorkItemDirectory) + $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(BaselineArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) 4:00 + $(WorkItemDirectory) + $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(ArtifactsDirectory)" $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory)" + $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) 4:00 diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index 4a6706b638..268986246e 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -1,6 +1,7 @@ Param( [string] $SourceDirectory=$env:BUILD_SOURCESDIRECTORY, [string] $CoreRootDirectory, + [string] $BaselineCoreRootDirectory, [string] $Architecture="x64", [string] $Framework="netcoreapp5.0", [string] $CompilationMode="Tiered", @@ -12,11 +13,13 @@ Param( [string] $Csproj="src\benchmarks\micro\MicroBenchmarks.csproj", [string] $Kind="micro", [switch] $Internal, + [switch] $Compare, [string] $Configurations="CompilationMode=$CompilationMode" ) $RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") $UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) +$UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) $PayloadDirectory = (Join-Path $SourceDirectory "Payload") $PerformanceDirectory = (Join-Path $PayloadDirectory "performance") @@ -29,7 +32,13 @@ $HelixSourcePrefix = "pr" $Queue = "Windows.10.Amd64.ClientRS4.DevEx.15.8.Open" if ($Framework.StartsWith("netcoreapp")) { - $Queue = "Windows.10.Amd64.ClientRS4.Open" + $Queue = "Windows.10.Amd64.ClientRS5.Open" +} + +if ($Compare) { + $Queue = "Windows.10.Amd64.19H1.Tiger.Perf.Open" + $PerfLabArguments = "" + $ExtraBenchmarkDotNetArguments = "" } if ($Internal) { @@ -56,6 +65,10 @@ if ($UseCoreRun) { $NewCoreRoot = (Join-Path $PayloadDirectory "Core_Root") Move-Item -Path $CoreRootDirectory -Destination $NewCoreRoot } +if ($UseBaselineCoreRun) { + $NewBaselineCoreRoot = (Join-Path $PayloadDirectory "Baseline_Core_Root") + Move-Item -Path $BaselineCoreRootDirectory -Destination $NewBaselineCoreRoot +} $DocsDir = (Join-Path $PerformanceDirectory "docs") robocopy $DocsDir $WorkItemDirectory @@ -80,7 +93,9 @@ Write-PipelineSetVariable -Name 'TargetCsproj' -Value "$Csproj" -IsMultiJobVaria Write-PipelineSetVariable -Name 'Kind' -Value "$Kind" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'Architecture' -Value "$Architecture" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'UseCoreRun' -Value "$UseCoreRun" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'UseBaselineCoreRun' -Value "$UseBaselineCoreRun" -IsMultiJobVariable $false Write-PipelineSetVariable -Name 'RunFromPerfRepo' -Value "$RunFromPerformanceRepo" -IsMultiJobVariable $false +Write-PipelineSetVariable -Name 'Compare' -Value "$Compare" -IsMultiJobVariable $false # Helix Arguments Write-PipelineSetVariable -Name 'Creator' -Value "$Creator" -IsMultiJobVariable $false diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index 76126b1f86..550b3ebf18 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -2,6 +2,7 @@ source_directory=$BUILD_SOURCESDIRECTORY core_root_directory= +baseline_core_root_directory= architecture=x64 framework=netcoreapp5.0 compilation_mode=tiered @@ -10,12 +11,14 @@ branch=$BUILD_SOURCEBRANCH commit_sha=$BUILD_SOURCEVERSION build_number=$BUILD_BUILDNUMBER internal=false +compare=false kind="micro" run_categories="coreclr corefx" csproj="src\benchmarks\micro\MicroBenchmarks.csproj" configurations= run_from_perf_repo=false use_core_run=true +use_baseline_core_run=true while (($# > 0)); do lowerI="$(echo $1 | awk '{print tolower($0)}')" @@ -28,6 +31,10 @@ while (($# > 0)); do core_root_directory=$2 shift 2 ;; + --baselinecorerootdirectory) + baseline_core_root_directory=$2 + shift 2 + ;; --architecture) architecture=$2 shift 2 @@ -72,6 +79,10 @@ while (($# > 0)); do internal=true shift 1 ;; + --compare) + compare=true + shift 1 + ;; --configurations) configurations=$2 shift 2 @@ -114,6 +125,10 @@ if [ -z "$core_root_directory" ]; then use_core_run=false fi +if [ -z "$baseline_core_root_directory" ]; then + use_baseline_core_run=false +fi + payload_directory=$source_directory/Payload performance_directory=$payload_directory/performance workitem_directory=$source_directory/workitem @@ -123,6 +138,19 @@ queue=Ubuntu.1804.Amd64.Open creator=$BUILD_DEFINITIONNAME helix_source_prefix="pr" +if [[ "$compare" == true ]]; then + extra_benchmark_dotnet_arguments= + perflab_arguments= + + # No open queues for arm64 + if [[ "$architecture" = "arm64" ]]; then + echo "Compare not available for arm64" + exit 1 + fi + + queue=Ubuntu.1804.Amd64.Tiger.Perf.Open +fi + if [[ "$internal" == true ]]; then perflab_arguments="--upload-to-perflab-container" helix_source_prefix="official" @@ -156,6 +184,11 @@ if [[ "$use_core_run" = true ]]; then mv $core_root_directory $new_core_root fi +if [[ "$use_baseline_core_run" = true ]]; then + new_baseline_core_root=$payload_directory/Baseline_Core_Root + mv $baseline_core_root_directory $new_baseline_core_root +fi + ci=true _script_dir=$(pwd)/eng/common @@ -163,6 +196,7 @@ _script_dir=$(pwd)/eng/common # Make sure all of our variables are available for future steps Write-PipelineSetVariable -name "UseCoreRun" -value "$use_core_run" -is_multi_job_variable false +Write-PipelineSetVariable -name "UseBaselineCoreRun" -value "$use_baseline_core_run" -is_multi_job_variable false Write-PipelineSetVariable -name "Architecture" -value "$architecture" -is_multi_job_variable false Write-PipelineSetVariable -name "PayloadDirectory" -value "$payload_directory" -is_multi_job_variable false Write-PipelineSetVariable -name "PerformanceDirectory" -value "$performance_directory" -is_multi_job_variable false @@ -178,4 +212,5 @@ Write-PipelineSetVariable -name "RunFromPerfRepo" -value "$run_from_perf_repo" - Write-PipelineSetVariable -name "Creator" -value "$creator" -is_multi_job_variable false Write-PipelineSetVariable -name "HelixSourcePrefix" -value "$helix_source_prefix" -is_multi_job_variable false Write-PipelineSetVariable -name "Kind" -value "$kind" -is_multi_job_variable false -Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false \ No newline at end of file +Write-PipelineSetVariable -name "_BuildConfig" -value "$architecture.$kind.$framework" -is_multi_job_variable false +Write-PipelineSetVariable -name "Compare" -value "$compare" -is_multi_job_variable false diff --git a/eng/common/post-build/sourcelink-validation.ps1 b/eng/common/post-build/sourcelink-validation.ps1 index 428e8c9607..bbfdacca13 100644 --- a/eng/common/post-build/sourcelink-validation.ps1 +++ b/eng/common/post-build/sourcelink-validation.ps1 @@ -215,7 +215,7 @@ function ValidateSourceLinkLinks { } $ValidationFailures = 0 - foreach ($Job in $Jobs) { + foreach ($Job in @(Get-Job)) { $jobResult = Wait-Job -Id $Job.Id | Receive-Job if ($jobResult -ne "0") { $ValidationFailures++ diff --git a/global.json b/global.json index 048c3a55cb..21be738930 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19420.8", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19422.24", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From da2a9c78752c48f61eeb4e0dc389318548b1de71 Mon Sep 17 00:00:00 2001 From: jb Date: Sat, 24 Aug 2019 12:45:14 -0400 Subject: [PATCH 039/146] FCS Doc update - SourceText (#7446) * Fix typos * Add SourceText type conversion to FCS docs --- DEVGUIDE.md | 2 +- README.md | 6 +++--- fcs/README.md | 2 +- fcs/docsrc/content/devnotes.md | 4 ++-- fcs/docsrc/content/editor.fsx | 9 +++++---- fcs/docsrc/content/interactive.fsx | 6 +++--- fcs/docsrc/content/project.fsx | 5 +++-- fcs/docsrc/content/symbols.fsx | 3 ++- fcs/docsrc/content/typedtree.fsx | 3 ++- fcs/docsrc/content/untypedtree.fsx | 10 +++++++--- 10 files changed, 29 insertions(+), 21 deletions(-) diff --git a/DEVGUIDE.md b/DEVGUIDE.md index 862ac8c58e..b17fed8988 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -128,7 +128,7 @@ VSIXInstaller.exe /u:"VisualFSharp" VSIXInstaller.exe artifacts\VSSetup\Release\VisualFSharpFull.vsix ``` -It's important to use `Release` if you want to see if your changes have had a noticable performance impact. +It's important to use `Release` if you want to see if your changes have had a noticeable performance impact. ### Performance and debugging diff --git a/README.md b/README.md index b5f8b936e6..5d62750b30 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ You're invited to contribute to future releases of the F# compiler, core library Build from the command line: -```bash +``` build.cmd ``` @@ -18,8 +18,8 @@ After it's finished, open either `FSharp.sln` or `VisualFSharp.sln` in your edit Build from the command line: -```bash -sh ./build.sh +``` +./build.sh ``` After it's finished, open `FSharp.sln` in your editor of choice. diff --git a/fcs/README.md b/fcs/README.md index e176ffb142..8a518f6219 100644 --- a/fcs/README.md +++ b/fcs/README.md @@ -99,5 +99,5 @@ FSharp.Compiler.Service is a somewhat awkward component. There are some things w 1. Remove the use of Paket and FAKE 1. Move all projects under fcs\... to new .NET SDK project file format 1. Drop the use of ``dotnet mergenupkg`` since we should be able to use cross targeting -1. Make FCS a DLL similar ot the rest of the build and make this an official component from Microsoft (signed etc.) +1. Make FCS a DLL similar to the rest of the build and make this an official component from Microsoft (signed etc.) 1. Replace FSharp.Compiler.Private by FSharp.Compiler.Service diff --git a/fcs/docsrc/content/devnotes.md b/fcs/docsrc/content/devnotes.md index d086b57796..7f80660f36 100644 --- a/fcs/docsrc/content/devnotes.md +++ b/fcs/docsrc/content/devnotes.md @@ -20,7 +20,7 @@ This repo should be _identical_ to 'fsharp' except: - No bootstrap or proto compiler is used - an installed F# compiler is assumed - Build script using FAKE that builds everything, produces NuGet package and - generates documentation, files for publising NuGet packages etc. + generates documentation, files for publishing NuGet packages etc. (following [F# project scaffold](https://github.com/fsprojects/FSharp.ProjectScaffold)) - Changes to compiler source code to expose new functionality; Changes to the @@ -30,7 +30,7 @@ This repo should be _identical_ to 'fsharp' except: - Additions to compiler source code which add new functionality to the compiler service API -If language or compiler addiitons are committed to `fsharp/fsharp`, they should be merged into +If language or compiler additions are committed to `fsharp/fsharp`, they should be merged into this repo and a new NuGet package released. ## Building and NuGet diff --git a/fcs/docsrc/content/editor.fsx b/fcs/docsrc/content/editor.fsx index b8af9d0117..b057e094d4 100644 --- a/fcs/docsrc/content/editor.fsx +++ b/fcs/docsrc/content/editor.fsx @@ -27,6 +27,7 @@ of `InteractiveChecker`: open System open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Text // Create an interactive checker instance let checker = FSharpChecker.Create() @@ -53,7 +54,7 @@ let inputLines = input.Split('\n') let file = "/home/user/Test.fsx" let projOptions, errors = - checker.GetProjectOptionsFromScript(file, input) + checker.GetProjectOptionsFromScript(file, SourceText.ofString input) |> Async.RunSynchronously let parsingOptions, _errors = checker.GetParsingOptionsFromProjectOptions(projOptions) @@ -68,7 +69,7 @@ together. // Perform parsing let parseFileResults = - checker.ParseFile(file, input, parsingOptions) + checker.ParseFile(file, SourceText.ofString input, parsingOptions) |> Async.RunSynchronously (** Before we look at the interesting operations provided by `TypeCheckResults`, we @@ -78,7 +79,7 @@ result (but it may contain incorrectly "guessed" results). // Perform type checking let checkFileAnswer = - checker.CheckFileInProject(parseFileResults, file, 0, input, projOptions) + checker.CheckFileInProject(parseFileResults, file, 0, SourceText.ofString input, projOptions) |> Async.RunSynchronously (** @@ -86,7 +87,7 @@ Alternatively you can use `ParseAndCheckFileInProject` to check both in one step *) let parseResults2, checkFileAnswer2 = - checker.ParseAndCheckFileInProject(file, 0, input, projOptions) + checker.ParseAndCheckFileInProject(file, 0, SourceText.ofString input, projOptions) |> Async.RunSynchronously (** diff --git a/fcs/docsrc/content/interactive.fsx b/fcs/docsrc/content/interactive.fsx index 2854d4529e..656ae44a69 100644 --- a/fcs/docsrc/content/interactive.fsx +++ b/fcs/docsrc/content/interactive.fsx @@ -44,8 +44,8 @@ open System.IO open System.Text // Intialize output and input streams -let sbOut = new StringBuilder() -let sbErr = new StringBuilder() +let sbOut = StringBuilder() +let sbErr = StringBuilder() let inStream = new StringReader("") let outStream = new StringWriter(sbOut) let errStream = new StringWriter(sbErr) @@ -242,7 +242,7 @@ If you want your scripting code to be able to access the 'fsi' object, you shoul Normally the one fromm FSharp.Compiler.Interactive.Settings.dll is used. *) -let fsiConfig2 = FsiEvaluationSession.GetDefaultConfiguration(fsi) +let fsiConfig2 = FsiEvaluationSession.GetDefaultConfiguration(fsiSession) (** Collectible code generation diff --git a/fcs/docsrc/content/project.fsx b/fcs/docsrc/content/project.fsx index 72bf7993f4..015563a220 100644 --- a/fcs/docsrc/content/project.fsx +++ b/fcs/docsrc/content/project.fsx @@ -28,6 +28,7 @@ of `InteractiveChecker`: open System open System.Collections.Generic open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Text // Create an interactive checker instance let checker = FSharpChecker.Create() @@ -220,7 +221,7 @@ in the project are still read from disk, unless you are using the [FileSystem AP *) let parseResults1, checkAnswer1 = - checker.ParseAndCheckFileInProject(Inputs.fileName1, 0, Inputs.fileSource1, projectOptions) + checker.ParseAndCheckFileInProject(Inputs.fileName1, 0, SourceText.ofString Inputs.fileSource1, projectOptions) |> Async.RunSynchronously let checkResults1 = @@ -229,7 +230,7 @@ let checkResults1 = | _ -> failwith "unexpected aborted" let parseResults2, checkAnswer2 = - checker.ParseAndCheckFileInProject(Inputs.fileName2, 0, Inputs.fileSource2, projectOptions) + checker.ParseAndCheckFileInProject(Inputs.fileName2, 0, SourceText.ofString Inputs.fileSource2, projectOptions) |> Async.RunSynchronously let checkResults2 = diff --git a/fcs/docsrc/content/symbols.fsx b/fcs/docsrc/content/symbols.fsx index 74701e8b73..c25f0d1c31 100644 --- a/fcs/docsrc/content/symbols.fsx +++ b/fcs/docsrc/content/symbols.fsx @@ -19,6 +19,7 @@ of `FSharpChecker`: open System open System.IO open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Text // Create an interactive checker instance let checker = FSharpChecker.Create() @@ -72,7 +73,7 @@ type C() = member x.P = 1 """ let parseFileResults, checkFileResults = - parseAndTypeCheckSingleFile(file, input2) + parseAndTypeCheckSingleFile(file, SourceText.ofString input2) (** Now get the partial assembly signature for the code: diff --git a/fcs/docsrc/content/typedtree.fsx b/fcs/docsrc/content/typedtree.fsx index 43bb55ba73..385822335e 100644 --- a/fcs/docsrc/content/typedtree.fsx +++ b/fcs/docsrc/content/typedtree.fsx @@ -26,6 +26,7 @@ To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open open System open System.IO open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Text (** ### Checking code @@ -42,7 +43,7 @@ let parseAndCheckSingleFile (input) = File.WriteAllText(file, input) // Get context representing a stand-alone (script) file let projOptions, _errors = - checker.GetProjectOptionsFromScript(file, input) + checker.GetProjectOptionsFromScript(file, SourceText.ofString input) |> Async.RunSynchronously checker.ParseAndCheckProject(projOptions) diff --git a/fcs/docsrc/content/untypedtree.fsx b/fcs/docsrc/content/untypedtree.fsx index 959e14fb94..3cb4e80765 100644 --- a/fcs/docsrc/content/untypedtree.fsx +++ b/fcs/docsrc/content/untypedtree.fsx @@ -31,6 +31,7 @@ To use the interactive checker, reference `FSharp.Compiler.Service.dll` and open #r "FSharp.Compiler.Service.dll" open System open FSharp.Compiler.SourceCodeServices +open FSharp.Compiler.Text (** ### Performing untyped parse @@ -201,16 +202,19 @@ with location of the file. The location does not have to exist (it is used only information) and it can be in both Unix and Windows formats: *) // Sample input for the compiler service -let input = """ +let input = + """ let foo() = let msg = "Hello world" if true then - printfn "%s" msg """ + printfn "%s" msg + """ + // File name in Unix format let file = "/home/user/Test.fsx" // Get the AST of sample F# code -let tree = getUntypedTree(file, input) +let tree = getUntypedTree(file, SourceText.ofString input) (** When you run the code in F# interactive, you can enter `tree;;` in the interactive console and see pretty printed representation of the data structure - the tree contains a lot of information, From 9247a17776ba2d98491f45a10f8fa841a71065d2 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 24 Aug 2019 22:45:49 +0000 Subject: [PATCH 040/146] Update dependencies from https://github.com/dotnet/arcade build 20190823.6 (#7447) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19423.6 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e55a3460eb..714234e669 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c7f03b2cf06bdfc64dad4140fd0d486127095cd8 + c48732c894e73e4b1f491929392a465182eb7ba6 diff --git a/global.json b/global.json index 21be738930..73f2146573 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19422.24", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19423.6", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From ffcf4ee6bfa964f03e1af53ff1bc39481c08d483 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sun, 25 Aug 2019 12:28:34 +0000 Subject: [PATCH 041/146] Update dependencies from https://github.com/dotnet/arcade build 20190824.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19424.1 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 714234e669..a290e42803 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c48732c894e73e4b1f491929392a465182eb7ba6 + a7b5eb8de300b6a30bd797c4ecc8769f7028aeec diff --git a/global.json b/global.json index 73f2146573..44db835d2a 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19423.6", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19424.1", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From c22fa0b03607ee620e4354f2928a679fdd6a6820 Mon Sep 17 00:00:00 2001 From: Matthias Dittrich Date: Mon, 26 Aug 2019 21:17:19 +0200 Subject: [PATCH 042/146] Fix #3113 by porting the relevant roslyn codeand integrate it into the codebase (#7024) --- .gitignore | 3 +- .../FSharp.Compiler.Service.fsproj | 12 + src/absil/cvtres.fs | 723 ++++++++++++++++++ src/absil/cvtres.fsi | 37 + src/absil/ilread.fs | 8 +- src/absil/ilsupp.fs | 40 +- src/absil/ilsupp.fsi | 4 - src/absil/ilwrite.fs | 38 +- src/absil/writenativeres.fs | 192 +++++ src/absil/writenativeres.fsi | 34 + .../FSharp.Compiler.Private.fsproj | 12 + .../Utils/LanguageServiceProfiling/Options.fs | 4 + 12 files changed, 1065 insertions(+), 42 deletions(-) create mode 100644 src/absil/cvtres.fs create mode 100644 src/absil/cvtres.fsi create mode 100644 src/absil/writenativeres.fs create mode 100644 src/absil/writenativeres.fsi diff --git a/.gitignore b/.gitignore index 6162593d1e..3c609f1939 100644 --- a/.gitignore +++ b/.gitignore @@ -117,7 +117,8 @@ source_link.json .vs/ System.ValueTuple.dll tests/fsharpqa/testenv/bin/System.ValueTuple.dll -*/.fake +**/.fake +.ionide /fcs/packages/ */paket-files/ /fcs/TestResult.xml diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 2bfaa4aa12..2fda400f4b 100644 --- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -225,6 +225,18 @@ + + AbsIL/writenativeres.fsi + + + AbsIL/writenativeres.fs + + + AbsIL/cvtres.fsi + + + AbsIL/cvtres.fs + AbsIL/ilsupp.fsi diff --git a/src/absil/cvtres.fs b/src/absil/cvtres.fs new file mode 100644 index 0000000000..baf9eec79d --- /dev/null +++ b/src/absil/cvtres.fs @@ -0,0 +1,723 @@ +// Quite literal port of https://github.com/dotnet/roslyn/blob/d36121da4b527ee0617e4b0940b9d0b17b584470/src/Compilers/Core/Portable/CvtRes.cs +// And its dependencies (some classes) +module internal FSharp.Compiler.AbstractIL.Internal.CVTres + +open System +open System.Collections.Generic +open System.IO +open System.Linq +open System.Text +open System.Diagnostics + +type BYTE = System.Byte +type DWORD = System.UInt32 +type WCHAR = System.Char +type WORD = System.UInt16 + +module CONVHELPER = + let inline WORD s = uint16 s + let inline DWORD s = uint32 s + let inline WCHAR s = char s + let inline BYTE s = byte s + +open CONVHELPER + +open Checked // make sure stuff works properly + +open System.Reflection.PortableExecutable + + +type ResourceException(name : string, ?inner : Exception) = + inherit Exception(name, defaultArg inner null) + //ew(name : string, ?inner : Exception) as this = + // (ResourceException ()) + // then + // let inner = (defaultArg inner) Unchecked.defaultof<_> + // () + +type RESOURCE_STRING() = + member val Ordinal = Unchecked.defaultof with get, set + member val theString = Unchecked.defaultof with get, set +type RESOURCE() = + member val pstringType = Unchecked.defaultof with get, set + member val pstringName = Unchecked.defaultof with get, set + member val DataSize = Unchecked.defaultof with get, set + member val HeaderSize = Unchecked.defaultof with get, set + member val DataVersion = Unchecked.defaultof with get, set + member val MemoryFlags = Unchecked.defaultof with get, set + member val LanguageId = Unchecked.defaultof with get, set + member val Version = Unchecked.defaultof with get, set + member val Characteristics = Unchecked.defaultof with get, set + member val data = Unchecked.defaultof with get, set +type CvtResFile() = + static member val private RT_DLGINCLUDE = 17 with get, set + static member ReadResFile(stream : Stream) = + let mutable reader = new BinaryReader(stream, Encoding.Unicode) + let mutable resourceNames = new List() + let mutable startPos = stream.Position + let mutable initial32Bits = reader.ReadUInt32 () + if initial32Bits <> uint32 0 + then raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") + stream.Position <- startPos + while (stream.Position < stream.Length) do + let mutable cbData = reader.ReadUInt32 () + let mutable cbHdr = reader.ReadUInt32 () + if cbHdr < 2u * uint32 sizeof + then raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) + if cbData = 0u + then + stream.Position <- stream.Position + int64 cbHdr - 2L * int64 sizeof + else + let mutable pAdditional = RESOURCE() + pAdditional.HeaderSize <- cbHdr + pAdditional.DataSize <- cbData + pAdditional.pstringType <- CvtResFile.ReadStringOrID (reader) + pAdditional.pstringName <- CvtResFile.ReadStringOrID (reader) + stream.Position <- stream.Position + 3L &&& ~~~3L + pAdditional.DataVersion <- reader.ReadUInt32 () + pAdditional.MemoryFlags <- reader.ReadUInt16 () + pAdditional.LanguageId <- reader.ReadUInt16 () + pAdditional.Version <- reader.ReadUInt32 () + pAdditional.Characteristics <- reader.ReadUInt32 () + pAdditional.data <- Array.zeroCreate (int pAdditional.DataSize) + reader.Read (pAdditional.data, 0, pAdditional.data.Length) |> ignore + stream.Position <- stream.Position + 3L &&& ~~~3L + if pAdditional.pstringType.theString = Unchecked.defaultof<_> && (pAdditional.pstringType.Ordinal = uint16 CvtResFile.RT_DLGINCLUDE) + then () (* ERROR ContinueNotSupported *) + else resourceNames.Add (pAdditional) + resourceNames + static member private ReadStringOrID(fhIn : BinaryReader) = + let mutable (pstring : RESOURCE_STRING) = RESOURCE_STRING() + let mutable (firstWord : WCHAR) = (fhIn.ReadChar ()) + if int firstWord = 0xFFFF + then pstring.Ordinal <- fhIn.ReadUInt16 () + else + pstring.Ordinal <- uint16 0xFFFF + let mutable (sb : StringBuilder) = StringBuilder() + let mutable (curChar : WCHAR) = firstWord + while (curChar <> char 0) do + sb.Append(curChar) |> ignore + curChar <- fhIn.ReadChar() + pstring.theString <- sb.ToString () + pstring + + +[] +type SectionCharacteristics = + | TypeReg = 0u + | TypeDSect = 1u + | TypeNoLoad = 2u + | TypeGroup = 4u + | TypeNoPad = 8u + | TypeCopy = 16u + | ContainsCode = 32u + | ContainsInitializedData = 64u + | ContainsUninitializedData = 128u + | LinkerOther = 256u + | LinkerInfo = 512u + | TypeOver = 1024u + | LinkerRemove = 2048u + | LinkerComdat = 4096u + | MemProtected = 16384u + | NoDeferSpecExc = 16384u + | GPRel = 32768u + | MemFardata = 32768u + | MemSysheap = 65536u + | MemPurgeable = 131072u + | Mem16Bit = 131072u + | MemLocked = 262144u + | MemPreload = 524288u + | Align1Bytes = 1048576u + | Align2Bytes = 2097152u + | Align4Bytes = 3145728u + | Align8Bytes = 4194304u + | Align16Bytes = 5242880u + | Align32Bytes = 6291456u + | Align64Bytes = 7340032u + | Align128Bytes = 8388608u + | Align256Bytes = 9437184u + | Align512Bytes = 10485760u + | Align1024Bytes = 11534336u + | Align2048Bytes = 12582912u + | Align4096Bytes = 13631488u + | Align8192Bytes = 14680064u + | AlignMask = 15728640u + | LinkerNRelocOvfl = 16777216u + | MemDiscardable = 33554432u + | MemNotCached = 67108864u + | MemNotPaged = 134217728u + | MemShared = 268435456u + | MemExecute = 536870912u + | MemRead = 1073741824u + | MemWrite = 2147483648u + +type ResourceSection() = + new(sectionBytes : byte[], relocations : uint32[]) as this = + (ResourceSection ()) + then + Debug.Assert (sectionBytes :> obj <> Unchecked.defaultof<_>) + Debug.Assert (relocations :> obj <> Unchecked.defaultof<_>) + this.SectionBytes <- sectionBytes + this.Relocations <- relocations + member val SectionBytes = Unchecked.defaultof with get,set + member val Relocations = Unchecked.defaultof with get,set + +open System.Runtime.CompilerServices +[] +type StreamExtensions () = + [] + static member TryReadAll(stream : Stream, buffer : byte[], offset : int, count : int) = + Debug.Assert (count > 0) + let mutable (totalBytesRead : int) = Unchecked.defaultof + let mutable (isFinished : bool) = false + let mutable (bytesRead : int) = 0 + do + totalBytesRead <- 0 + while totalBytesRead < count && not isFinished do + bytesRead <- stream.Read (buffer, (offset + totalBytesRead), (count - totalBytesRead)) + if bytesRead = 0 + then isFinished <- true // break; + else totalBytesRead <- totalBytesRead + bytesRead + totalBytesRead + +type COFFResourceReader() = + static member private ConfirmSectionValues(hdr : SectionHeader, fileSize : System.Int64) = + if int64 hdr.PointerToRawData + int64 hdr.SizeOfRawData > fileSize + then raise <| ResourceException("CoffResourceInvalidSectionSize") + () + static member ReadWin32ResourcesFromCOFF(stream : Stream) = + let mutable peHeaders = new PEHeaders(stream) + let mutable rsrc1 = SectionHeader() + let mutable rsrc2 = SectionHeader() + let mutable (foundCount : int) = 0 + for sectionHeader in peHeaders.SectionHeaders do + if sectionHeader.Name = ".rsrc$01" + then + rsrc1 <- sectionHeader + foundCount <- foundCount + 1 + else + if sectionHeader.Name = ".rsrc$02" + then + rsrc2 <- sectionHeader + foundCount <- foundCount + 1 + if foundCount <> 2 + then raise <| ResourceException("CoffResourceMissingSection") + COFFResourceReader.ConfirmSectionValues (rsrc1, stream.Length) + COFFResourceReader.ConfirmSectionValues (rsrc2, stream.Length) + let mutable imageResourceSectionBytes = Array.zeroCreate (rsrc1.SizeOfRawData + rsrc2.SizeOfRawData) + stream.Seek (int64 rsrc1.PointerToRawData, SeekOrigin.Begin) |> ignore + stream.TryReadAll (imageResourceSectionBytes, 0, rsrc1.SizeOfRawData) |> ignore + stream.Seek (int64 rsrc2.PointerToRawData, SeekOrigin.Begin) |> ignore + stream.TryReadAll (imageResourceSectionBytes, rsrc1.SizeOfRawData, rsrc2.SizeOfRawData) |> ignore + let mutable (SizeOfRelocationEntry : int) = 10 + try + let mutable relocLastAddress = rsrc1.PointerToRelocations + (int rsrc1.NumberOfRelocations * SizeOfRelocationEntry) + if int64 relocLastAddress > stream.Length + then raise <| ResourceException("CoffResourceInvalidRelocation") + with + :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidRelocation")) + let mutable relocationOffsets = Array.zeroCreate (int rsrc1.NumberOfRelocations) + let mutable relocationSymbolIndices = Array.zeroCreate (int rsrc1.NumberOfRelocations) + let mutable reader = new BinaryReader(stream, Encoding.Unicode) + stream.Position <- int64 rsrc1.PointerToRelocations + do + let mutable (i : int) = 0 + while (i < int rsrc1.NumberOfRelocations) do + relocationOffsets.[i] <- reader.ReadUInt32 () + relocationSymbolIndices.[i] <- reader.ReadUInt32 () + reader.ReadUInt16 () |> ignore //we do nothing with the "Type" + i <- i + 1 + stream.Position <- int64 peHeaders.CoffHeader.PointerToSymbolTable + let mutable (ImageSizeOfSymbol : System.UInt32) = 18u + try + let mutable lastSymAddress = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 peHeaders.CoffHeader.NumberOfSymbols * int64 ImageSizeOfSymbol (* ERROR UnknownNode *) + if lastSymAddress > stream.Length + then raise <| ResourceException("CoffResourceInvalidSymbol") + with + :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidSymbol")) + let mutable outputStream = new MemoryStream(imageResourceSectionBytes) + let mutable writer = new BinaryWriter(outputStream) + do + let mutable (i : int) = 0 + while (i < relocationSymbolIndices.Length) do + if int relocationSymbolIndices.[i] > peHeaders.CoffHeader.NumberOfSymbols + then raise <| ResourceException("CoffResourceInvalidRelocation") + let mutable offsetOfSymbol = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 relocationSymbolIndices.[i] * int64 ImageSizeOfSymbol + stream.Position <- offsetOfSymbol + stream.Position <- stream.Position + 8L + let mutable symValue = reader.ReadUInt32 () + let mutable symSection = reader.ReadInt16 () + let mutable symType = reader.ReadUInt16 () + let mutable (IMAGE_SYM_TYPE_NULL : System.UInt16) = uint16 0x0000 + if symType <> IMAGE_SYM_TYPE_NULL || symSection <> 3s + then raise <| ResourceException("CoffResourceInvalidSymbol") + outputStream.Position <- int64 relocationOffsets.[i] + writer.Write (uint32 (int64 symValue + int64 rsrc1.SizeOfRawData)) + i <- i + 1 + + ResourceSection(imageResourceSectionBytes, relocationOffsets) + +type ICONDIRENTRY = + struct + val mutable bWidth: BYTE + val mutable bHeight: BYTE + val mutable bColorCount: BYTE + val mutable bReserved: BYTE + val mutable wPlanes: WORD + val mutable wBitCount: WORD + val mutable dwBytesInRes: DWORD + val mutable dwImageOffset: DWORD + end + +type VersionHelper() = + /// + /// Parses a version string of the form "major [ '.' minor [ '.' build [ '.' revision ] ] ]". + /// + /// The version string to parse. + /// If parsing succeeds, the parsed version. Otherwise a version that represents as much of the input as could be parsed successfully. + /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. + static member TryParse(s : string, [] version : byref) = + VersionHelper.TryParse (s, false, UInt16.MaxValue, true, ref version) + /// + /// Parses a version string of the form "major [ '.' minor [ '.' ( '*' | ( build [ '.' ( '*' | revision ) ] ) ) ] ]" + /// as accepted by System.Reflection.AssemblyVersionAttribute. + /// + /// The version string to parse. + /// Indicates whether or not a wildcard is accepted as the terminal component. + /// + /// If parsing succeeded, the parsed version. Otherwise a version instance with all parts set to zero. + /// If contains * the version build and/or revision numbers are set to . + /// + /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. + + static member TryParseAssemblyVersion(s : string, allowWildcard : System.Boolean, [] version : byref) = + VersionHelper.TryParse (s, allowWildcard, (UInt16.MaxValue - 1us), false, ref version) + + static member private NullVersion = new Version(0, 0, 0, 0) + /// + /// Parses a version string of the form "major [ '.' minor [ '.' ( '*' | ( build [ '.' ( '*' | revision ) ] ) ) ] ]" + /// as accepted by System.Reflection.AssemblyVersionAttribute. + /// + /// The version string to parse. + /// Indicates whether or not we're parsing an assembly version string. If so, wildcards are accepted and each component must be less than 65535. + /// The maximum value that a version component may have. + /// Allow the parsing of version elements where invalid characters exist. e.g. 1.2.2a.1 + /// + /// If parsing succeeded, the parsed version. When is true a version with values up to the first invalid character set. Otherwise a version with all parts set to zero. + /// If contains * and wildcard is allowed the version build and/or revision numbers are set to . + /// + /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. + static member private TryParse(s : string, allowWildcard : System.Boolean, maxValue : System.UInt16, allowPartialParse : System.Boolean, [] version : byref) = + Debug.Assert (not allowWildcard || maxValue < UInt16.MaxValue) + if String.IsNullOrWhiteSpace (s) + then + version <- VersionHelper.NullVersion + false + else + let mutable (elements : string[]) = s.Split ('.') + let mutable (hasWildcard : System.Boolean) = allowWildcard && elements.[(int (elements.Length - 1))] = "*" + if hasWildcard && elements.Length < 3 || elements.Length > 4 + then + version <- VersionHelper.NullVersion + false + else + let mutable (values : uint16[]) = Array.zeroCreate 4 + let mutable (lastExplicitValue : int) = + if hasWildcard + then elements.Length - 1 + else elements.Length + let mutable (parseError : System.Boolean) = false + let mutable earlyReturn = None + do + let mutable (i : int) = 0 + let mutable breakLoop = false + while (i < lastExplicitValue) && not breakLoop do + if not (UInt16.TryParse (elements.[i], System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref values.[i])) || values.[i] > maxValue + then + if not allowPartialParse + then + earlyReturn <- Some false + breakLoop <- true + version <- VersionHelper.NullVersion + else + parseError <- true + if String.IsNullOrWhiteSpace (elements.[i]) + then + values.[i] <- 0us + breakLoop <- true + else + if values.[i] > maxValue + then + values.[i] <- 0us + breakLoop <- true + else + let mutable (invalidFormat : System.Boolean) = false + //let mutable (number : System.Numerics.BigInteger) = 0I + do + let mutable idx = 0 + let mutable breakLoop = false + while (idx < elements.[i].Length) && not breakLoop do + if not (Char.IsDigit (elements.[i].[idx])) + then + invalidFormat <- true + VersionHelper.TryGetValue ((elements.[i].Substring (0, idx)), ref values.[i]) |> ignore + breakLoop <- true + else + idx <- idx + 1 + let mutable doBreak = true + if not invalidFormat + then + if VersionHelper.TryGetValue (elements.[i], ref values.[i]) + then + //For this scenario the old compiler would continue processing the remaining version elements + //so continue processing + doBreak <- false + () (* ERROR ContinueNotSupported *) + (* ERROR BreakNotSupported *) + if not breakLoop then + i <- i + 1 + if hasWildcard + then + do + let mutable (i : int) = lastExplicitValue + while (i < values.Length) do + values.[i] <- UInt16.MaxValue + i <- i + 1 + version <- new Version(int values.[0], int values.[1], int values.[2], int values.[3]) + not parseError + static member private TryGetValue(s : string, [] value : byref) : bool = + let mutable (number : System.Numerics.BigInteger) = Unchecked.defaultof + if System.Numerics.BigInteger.TryParse (s, System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref number) + then + value <- uint16 (number % bigint 65536) + true + else + value <- 0us + false + static member GenerateVersionFromPatternAndCurrentTime(time : DateTime, pattern : Version) = + if pattern = Unchecked.defaultof<_> || pattern.Revision <> int UInt16.MaxValue + then pattern + else + let mutable time = time + // MSDN doc on the attribute: + // "The default build number increments daily. The default revision number is the number of seconds since midnight local time + // (without taking into account time zone adjustments for daylight saving time), divided by 2." + if time = Unchecked.defaultof + then time <- DateTime.Now + let mutable (revision : int) = int time.TimeOfDay.TotalSeconds / 2 + Debug.Assert (revision < int UInt16.MaxValue) + if pattern.Build = int UInt16.MaxValue + then + let mutable (days : TimeSpan) = time.Date - new DateTime(2000, 1, 1) + let mutable (build : int) = Math.Min (int UInt16.MaxValue, (int days.TotalDays)) + new Version(pattern.Major, pattern.Minor, int (uint16 build), int (uint16 revision)) + else new Version(pattern.Major, pattern.Minor, pattern.Build, int (uint16 revision)) + +type VersionResourceSerializer() = + member val private _commentsContents = Unchecked.defaultof with get, set + member val private _companyNameContents = Unchecked.defaultof with get, set + member val private _fileDescriptionContents = Unchecked.defaultof with get, set + member val private _fileVersionContents = Unchecked.defaultof with get, set + member val private _internalNameContents = Unchecked.defaultof with get, set + member val private _legalCopyrightContents = Unchecked.defaultof with get, set + member val private _legalTrademarksContents = Unchecked.defaultof with get, set + member val private _originalFileNameContents = Unchecked.defaultof with get, set + member val private _productNameContents = Unchecked.defaultof with get, set + member val private _productVersionContents = Unchecked.defaultof with get, set + member val private _assemblyVersionContents = Unchecked.defaultof with get, set + static member val private vsVersionInfoKey = "VS_VERSION_INFO" with get, set + static member val private varFileInfoKey = "VarFileInfo" with get, set + static member val private translationKey = "Translation" with get, set + static member val private stringFileInfoKey = "StringFileInfo" with get, set + member val private _langIdAndCodePageKey = Unchecked.defaultof with get, set + static member val private CP_WINUNICODE = 1200u + static member val private sizeVS_FIXEDFILEINFO = uint16 (sizeof * 13) + member val private _isDll = Unchecked.defaultof with get, set + new(isDll : System.Boolean, comments : string, companyName : string, fileDescription : string, fileVersion : string, internalName : string, legalCopyright : string, legalTrademark : string, originalFileName : string, productName : string, productVersion : string, assemblyVersion : Version) as this = + (VersionResourceSerializer ()) + then + this._isDll <- isDll + this._commentsContents <- comments + this._companyNameContents <- companyName + this._fileDescriptionContents <- fileDescription + this._fileVersionContents <- fileVersion + this._internalNameContents <- internalName + this._legalCopyrightContents <- legalCopyright + this._legalTrademarksContents <- legalTrademark + this._originalFileNameContents <- originalFileName + this._productNameContents <- productName + this._productVersionContents <- productVersion + this._assemblyVersionContents <- assemblyVersion + this._langIdAndCodePageKey <- System.String.Format ("{0:x4}{1:x4}", 0, VersionResourceSerializer.CP_WINUNICODE) + static member val private VFT_APP = 0x00000001u + static member val private VFT_DLL = 0x00000002u + member private this.GetVerStrings() = seq { + if this._commentsContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("Comments", this._commentsContents) + if this._companyNameContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("CompanyName", this._companyNameContents) + if this._fileDescriptionContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("FileDescription", this._fileDescriptionContents) + yield KeyValuePair<_,_>("FileVersion", this._fileVersionContents) + if this._internalNameContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("InternalName", this._internalNameContents) + if this._legalCopyrightContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("LegalCopyright", this._legalCopyrightContents) + if this._legalTrademarksContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("LegalTrademarks", this._legalTrademarksContents) + if this._originalFileNameContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("OriginalFilename", this._originalFileNameContents) + if this._productNameContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("ProductName", this._productNameContents) + yield KeyValuePair<_,_>("ProductVersion", this._fileVersionContents) + if this._assemblyVersionContents <> Unchecked.defaultof<_> + then yield KeyValuePair<_,_>("Assembly Version", this._assemblyVersionContents.ToString()) + } + member private this.FileType + with get() : uint32 = + if this._isDll + then VersionResourceSerializer.VFT_DLL + else VersionResourceSerializer.VFT_APP + member private this.WriteVSFixedFileInfo(writer : BinaryWriter) = + let mutable (fileVersion : Version) = Unchecked.defaultof + VersionHelper.TryParse (this._fileVersionContents, ref fileVersion) |> ignore + let mutable (productVersion : Version) = Unchecked.defaultof + VersionHelper.TryParse (this._productVersionContents, ref productVersion) |> ignore + writer.Write (0xFEEF04BDu) + writer.Write (0x00010000u) + writer.Write ((uint32 fileVersion.Major <<< 16) ||| uint32 fileVersion.Minor) + writer.Write ((uint32 fileVersion.Build <<< 16) ||| uint32 fileVersion.Revision) + writer.Write ((uint32 productVersion.Major <<< 16) ||| uint32 productVersion.Minor) + writer.Write ((uint32 productVersion.Build <<< 16) ||| uint32 productVersion.Revision) + writer.Write (0x0000003Fu) + writer.Write (0u) + writer.Write (0x00000004u) + writer.Write (this.FileType) + writer.Write (0u) + writer.Write (0u) + writer.Write (0u) + static member private PadKeyLen(cb : int) = + VersionResourceSerializer.PadToDword (cb + 3 * sizeof) - 3 * sizeof + static member private PadToDword(cb : int) = + cb + 3 &&& ~~~3 + static member val private HDRSIZE = (int (3 * sizeof)) with get, set + static member private SizeofVerString(lpszKey : string, lpszValue : string) = + let mutable (cbKey : int) = Unchecked.defaultof + let mutable (cbValue : int) = Unchecked.defaultof + cbKey <- lpszKey.Length + 1 * 2 + cbValue <- lpszValue.Length + 1 * 2 + VersionResourceSerializer.PadKeyLen(cbKey) + cbValue + VersionResourceSerializer.HDRSIZE + static member private WriteVersionString(keyValuePair : KeyValuePair, writer : BinaryWriter) = + System.Diagnostics.Debug.Assert (keyValuePair.Value <> Unchecked.defaultof<_>) + let mutable (cbBlock : System.UInt16) = uint16 <| VersionResourceSerializer.SizeofVerString (keyValuePair.Key, keyValuePair.Value) + let mutable (cbKey : int) = keyValuePair.Key.Length + 1 * 2 + //let mutable (cbVal : int) = keyValuePair.Value.Length + 1 * 2 + let mutable startPos = writer.BaseStream.Position + Debug.Assert (startPos &&& 3L = 0L) + writer.Write (cbBlock) + writer.Write (uint16 (keyValuePair.Value.Length + 1)) + writer.Write (1us) + writer.Write (keyValuePair.Key.ToCharArray ()) + writer.Write (uint16 0) //(WORD)'\0' + writer.Write (Array.zeroCreate (VersionResourceSerializer.PadKeyLen (cbKey) - cbKey) : byte[]) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (keyValuePair.Value.ToCharArray ()) + writer.Write (uint16 0) // (WORD)'\0' + System.Diagnostics.Debug.Assert (int64 cbBlock = writer.BaseStream.Position - startPos) + static member private KEYSIZE(sz : string) = + VersionResourceSerializer.PadKeyLen (sz.Length + 1 * sizeof) / sizeof + static member private KEYBYTES(sz : string) = + VersionResourceSerializer.KEYSIZE (sz) * sizeof + member private this.GetStringsSize() = + let mutable (sum : int) = 0 + for verString in this.GetVerStrings () do + sum <- sum + 3 &&& ~~~3 + sum <- sum + VersionResourceSerializer.SizeofVerString (verString.Key, verString.Value) + sum + member this.GetDataSize() = + let mutable (sizeEXEVERRESOURCE : int) = + sizeof * 3 * 5 + 2 * sizeof + + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.vsVersionInfoKey) + + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) + + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey) + + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.stringFileInfoKey) + + VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + + int VersionResourceSerializer.sizeVS_FIXEDFILEINFO + this.GetStringsSize () + sizeEXEVERRESOURCE + member this.WriteVerResource(writer : BinaryWriter) = + let mutable debugPos = writer.BaseStream.Position + let mutable dataSize = this.GetDataSize () + writer.Write (WORD dataSize) + writer.Write (WORD VersionResourceSerializer.sizeVS_FIXEDFILEINFO) + writer.Write (WORD 0us) + writer.Write (VersionResourceSerializer.vsVersionInfoKey.ToCharArray ()) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.vsVersionInfoKey) - VersionResourceSerializer.vsVersionInfoKey.Length * 2) : byte[]) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + this.WriteVSFixedFileInfo (writer) + writer.Write (WORD (sizeof * 2 + 2 * VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey))) + writer.Write (WORD 0us) + writer.Write (WORD 1us) + writer.Write (VersionResourceSerializer.varFileInfoKey.ToCharArray ()) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) - VersionResourceSerializer.varFileInfoKey.Length * 2): byte[]) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (WORD (sizeof * 2 + VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey))) + writer.Write (WORD (sizeof * 2)) + writer.Write (WORD 0us) + writer.Write (VersionResourceSerializer.translationKey.ToCharArray ()) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey) - VersionResourceSerializer.translationKey.Length * 2): byte[]) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (0us) + writer.Write (WORD VersionResourceSerializer.CP_WINUNICODE) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (WORD (2 * VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.stringFileInfoKey) + VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + this.GetStringsSize ())) + writer.Write (0us) + writer.Write (1us) + writer.Write (VersionResourceSerializer.stringFileInfoKey.ToCharArray ()) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.stringFileInfoKey) - VersionResourceSerializer.stringFileInfoKey.Length * 2): byte[]) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (WORD (VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + this.GetStringsSize ())) + writer.Write (0us) + writer.Write (1us) + writer.Write (this._langIdAndCodePageKey.ToCharArray ()) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) - this._langIdAndCodePageKey.Length * 2): byte[]) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position - debugPos = int64 dataSize - int64 (this.GetStringsSize ())) + debugPos <- writer.BaseStream.Position + for entry in this.GetVerStrings () do + let mutable writerPos = writer.BaseStream.Position + writer.Write (Array.zeroCreate (int ((writerPos + 3L) &&& ~~~3L - writerPos)): byte[]) + System.Diagnostics.Debug.Assert (entry.Value <> Unchecked.defaultof<_>) + VersionResourceSerializer.WriteVersionString (entry, writer) + System.Diagnostics.Debug.Assert (writer.BaseStream.Position - debugPos = int64 (this.GetStringsSize ())) + +type Win32ResourceConversions() = + static member AppendIconToResourceStream(resStream : Stream, iconStream : Stream) = + let mutable iconReader = new BinaryReader(iconStream) + let mutable reserved = iconReader.ReadUInt16 () + if reserved <> 0us + then raise <| ResourceException("IconStreamUnexpectedFormat") + let mutable ``type`` = iconReader.ReadUInt16 () + if ``type`` <> 1us + then raise <| ResourceException("IconStreamUnexpectedFormat") + let mutable count = iconReader.ReadUInt16 () + if count = 0us + then raise <| ResourceException("IconStreamUnexpectedFormat") + let mutable iconDirEntries : ICONDIRENTRY [] = Array.zeroCreate (int count) + do + let mutable (i : System.UInt16) = 0us + while (i < count) do + iconDirEntries.[(int i)].bWidth <- iconReader.ReadByte () + iconDirEntries.[(int i)].bHeight <- iconReader.ReadByte () + iconDirEntries.[(int i)].bColorCount <- iconReader.ReadByte () + iconDirEntries.[(int i)].bReserved <- iconReader.ReadByte () + iconDirEntries.[(int i)].wPlanes <- iconReader.ReadUInt16 () + iconDirEntries.[(int i)].wBitCount <- iconReader.ReadUInt16 () + iconDirEntries.[(int i)].dwBytesInRes <- iconReader.ReadUInt32 () + iconDirEntries.[(int i)].dwImageOffset <- iconReader.ReadUInt32 () + i <- i + 1us + + do + let mutable (i : System.UInt16) = 0us + while (i < count) do + iconStream.Position <- int64 iconDirEntries.[(int i)].dwImageOffset + if iconReader.ReadUInt32 () = 40u + then + iconStream.Position <- iconStream.Position + 8L + iconDirEntries.[(int i)].wPlanes <- iconReader.ReadUInt16 () + iconDirEntries.[(int i)].wBitCount <- iconReader.ReadUInt16 () + i <- i + 1us + + let mutable resWriter = new BinaryWriter(resStream) + let mutable (RT_ICON : WORD) = 3us + do + let mutable (i : System.UInt16) = 0us + while (i < count) do + resStream.Position <- resStream.Position + 3L &&& ~~~3L + resWriter.Write (iconDirEntries.[(int i)].dwBytesInRes) + resWriter.Write (0x00000020u) + resWriter.Write (0xFFFFus) + resWriter.Write (RT_ICON) + resWriter.Write (0xFFFFus) + resWriter.Write ((i + 1us)) + resWriter.Write (0x00000000u) + resWriter.Write (0x1010us) + resWriter.Write (0x0000us) + resWriter.Write (0x00000000u) + resWriter.Write (0x00000000u) + iconStream.Position <- int64 iconDirEntries.[(int i)].dwImageOffset + resWriter.Write (iconReader.ReadBytes (int (iconDirEntries.[int i].dwBytesInRes))) + i <- i + 1us + + let mutable (RT_GROUP_ICON : WORD) = (RT_ICON + 11us) + resStream.Position <- resStream.Position + 3L &&& ~~~3L + resWriter.Write (uint32 (3 * sizeof + int count * 14)) + resWriter.Write (0x00000020u) + resWriter.Write (0xFFFFus) + resWriter.Write (RT_GROUP_ICON) + resWriter.Write (0xFFFFus) + resWriter.Write (0x7F00us) + resWriter.Write (0x00000000u) + resWriter.Write (0x1030us) + resWriter.Write (0x0000us) + resWriter.Write (0x00000000u) + resWriter.Write (0x00000000u) + resWriter.Write (0x0000us) + resWriter.Write (0x0001us) + resWriter.Write (count) + do + let mutable (i : System.UInt16) = 0us + while (i < count) do + resWriter.Write (iconDirEntries.[(int i)].bWidth) + resWriter.Write (iconDirEntries.[(int i)].bHeight) + resWriter.Write (iconDirEntries.[(int i)].bColorCount) + resWriter.Write (iconDirEntries.[(int i)].bReserved) + resWriter.Write (iconDirEntries.[(int i)].wPlanes) + resWriter.Write (iconDirEntries.[(int i)].wBitCount) + resWriter.Write (iconDirEntries.[(int i)].dwBytesInRes) + resWriter.Write ((i + 1us)) + i <- i + 1us + () + static member AppendVersionToResourceStream(resStream : Stream, isDll : System.Boolean, fileVersion : string, originalFileName : string, internalName : string, productVersion : string, assemblyVersion : Version, ?fileDescription : string, ?legalCopyright : string, ?legalTrademarks : string, ?productName : string, ?comments : string, ?companyName : string) = + let fileDescription = (defaultArg fileDescription) " " + let legalCopyright = (defaultArg legalCopyright) " " + let legalTrademarks = (defaultArg legalTrademarks) Unchecked.defaultof<_> + let productName = (defaultArg productName) Unchecked.defaultof<_> + let comments = (defaultArg comments) Unchecked.defaultof<_> + let companyName = (defaultArg companyName) Unchecked.defaultof<_> + let mutable resWriter = new BinaryWriter(resStream, Encoding.Unicode) + resStream.Position <- resStream.Position + 3L &&& ~~~3L + let mutable (RT_VERSION : DWORD) = 16u + let mutable ver = new VersionResourceSerializer(isDll, comments, companyName, fileDescription, fileVersion, internalName, legalCopyright, legalTrademarks, originalFileName, productName, productVersion, assemblyVersion) + let mutable startPos = resStream.Position + let mutable dataSize = ver.GetDataSize () + let mutable (headerSize : int) = 0x20 + resWriter.Write (uint32 dataSize) + resWriter.Write (uint32 headerSize) + resWriter.Write (0xFFFFus) + resWriter.Write (uint16 RT_VERSION) + resWriter.Write (0xFFFFus) + resWriter.Write (0x0001us) + resWriter.Write (0x00000000u) + resWriter.Write (0x0030us) + resWriter.Write (0x0000us) + resWriter.Write (0x00000000u) + resWriter.Write (0x00000000u) + ver.WriteVerResource (resWriter) + System.Diagnostics.Debug.Assert (resStream.Position - startPos = int64 dataSize + int64 headerSize) + static member AppendManifestToResourceStream(resStream : Stream, manifestStream : Stream, isDll : System.Boolean) = + resStream.Position <- resStream.Position + 3L &&& ~~~3L (* ERROR UnknownPrefixOperator "~" *) + let mutable (RT_MANIFEST : WORD) = 24us + let mutable resWriter = new BinaryWriter(resStream) + resWriter.Write (uint32 manifestStream.Length) + resWriter.Write (0x00000020u) + resWriter.Write (0xFFFFus) + resWriter.Write (RT_MANIFEST) + resWriter.Write (0xFFFFus) + resWriter.Write ( + if isDll then 0x0002us else 0x0001us) + resWriter.Write (0x00000000u) + resWriter.Write (0x1030us) + resWriter.Write (0x0000us) + resWriter.Write (0x00000000u) + resWriter.Write (0x00000000u) + manifestStream.CopyTo (resStream) \ No newline at end of file diff --git a/src/absil/cvtres.fsi b/src/absil/cvtres.fsi new file mode 100644 index 0000000000..351d45626f --- /dev/null +++ b/src/absil/cvtres.fsi @@ -0,0 +1,37 @@ +module internal FSharp.Compiler.AbstractIL.Internal.CVTres + +open System +open System.IO + +type BYTE = System.Byte +type DWORD = System.UInt32 +type WCHAR = System.Char +type WORD = System.UInt16 + +[] +type RESOURCE_STRING = + member Ordinal: WORD with get, set + member theString : string with get, set + +[] +type RESOURCE = + member pstringType : RESOURCE_STRING with get, set + member pstringName : RESOURCE_STRING with get, set + member DataSize : DWORD with get, set + member HeaderSize : DWORD with get, set + member DataVersion : DWORD with get, set + member MemoryFlags : WORD with get, set + member LanguageId : WORD with get, set + member Version : DWORD with get, set + member Characteristics : DWORD with get, set + member data : byte[] with get, set + +[] +type CvtResFile = + static member ReadResFile : stream:Stream -> System.Collections.Generic.List + +[] +type Win32ResourceConversions = + static member AppendIconToResourceStream : resStream:Stream * iconStream:Stream -> unit + static member AppendVersionToResourceStream : resStream:Stream * isDll:System.Boolean * fileVersion:string * originalFileName:string * internalName:string * productVersion:string * assemblyVersion:Version * ?fileDescription:string * ?legalCopyright:string * ?legalTrademarks:string * ?productName:string * ?comments:string * ?companyName:string -> unit + static member AppendManifestToResourceStream : resStream:Stream * manifestStream:Stream * isDll:System.Boolean -> unit diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index 280bbf0c38..38c1c5ff81 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -20,9 +20,7 @@ open Internal.Utilities open Internal.Utilities.Collections open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal -#if !FX_NO_PDB_READER -open FSharp.Compiler.AbstractIL.Internal.Support -#endif +open FSharp.Compiler.AbstractIL.Internal.Support open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.Internal.BinaryConstants open FSharp.Compiler.AbstractIL.IL @@ -1551,14 +1549,10 @@ let readNativeResources (pectxt: PEReader) = [ if pectxt.nativeResourcesSize <> 0x0 && pectxt.nativeResourcesAddr <> 0x0 then let start = pectxt.anyV2P (pectxt.fileName + ": native resources", pectxt.nativeResourcesAddr) if pectxt.noFileOnDisk then -#if !FX_NO_LINKEDRESOURCES let unlinkedResource = let linkedResource = seekReadBytes (pectxt.pefile.GetView()) start pectxt.nativeResourcesSize unlinkResource pectxt.nativeResourcesAddr linkedResource yield ILNativeResource.Out unlinkedResource -#else - () -#endif else yield ILNativeResource.In (pectxt.fileName, pectxt.nativeResourcesAddr, start, pectxt.nativeResourcesSize ) ] diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index 97280194f7..d2880289a8 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -22,16 +22,15 @@ open System.Diagnostics.SymbolStore open System.Runtime.InteropServices open System.Runtime.CompilerServices + let DateTime1970Jan01 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) (* ECMA Spec (Oct2002), Part II, 24.2.2 PE File Header. *) let absilWriteGetTimeStamp () = (DateTime.UtcNow - DateTime1970Jan01).TotalSeconds |> int -#if !FX_NO_LINKEDRESOURCES // Force inline, so GetLastWin32Error calls are immediately after interop calls as seen by FxCop under Debug build. let inline ignore _x = () // Native Resource linking/unlinking type IStream = System.Runtime.InteropServices.ComTypes.IStream -#endif let check _action (hresult) = if uint32 hresult >= 0x80000000ul then @@ -56,7 +55,6 @@ let bytesToQWord ((b0: byte), (b1: byte), (b2: byte), (b3: byte), (b4: byte), (b let dwToBytes n = [| byte (n &&& 0xff) ; byte ((n >>> 8) &&& 0xff) ; byte ((n >>> 16) &&& 0xff) ; byte ((n >>> 24) &&& 0xff) |], 4 let wToBytes (n: int16) = [| byte (n &&& 0xffs) ; byte ((n >>> 8) &&& 0xffs) |], 2 -#if !FX_NO_LINKEDRESOURCES // REVIEW: factor these classes under one hierarchy, use reflection for creation from buffer and toBytes() // Though, everything I'd like to unify is static - metaclasses? type IMAGE_FILE_HEADER (m: int16, secs: int16, tds: int32, ptst: int32, nos: int32, soh: int16, c: int16) = @@ -583,7 +581,7 @@ type ResFormatNode(tid: int32, nid: int32, lid: int32, dataOffset: int32, pbLink !size -let linkNativeResources (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = +let linkNativeResourcesViaCVTres (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = let nPEFileType = match fileType with X86 -> 0 | X64 -> 2 let mutable tempResFiles: string list = [] let mutable objBytes: byte[] = [||] @@ -751,6 +749,39 @@ let linkNativeResources (unlinkedResources: byte[] list) (ulLinkedResourceBaseR // return the buffer pResBuffer +let linkNativeResourcesManaged (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = + ignore fileType + ignore outputFilePath + + let resources = + unlinkedResources + |> Seq.map (fun s -> new MemoryStream(s)) + |> Seq.map (fun s -> + let res = CVTres.CvtResFile.ReadResFile s + s.Dispose() + res) + |> Seq.collect id + // See MakeWin32ResourceList https://github.com/dotnet/roslyn/blob/f40b89234db51da1e1153c14af184e618504be41/src/Compilers/Core/Portable/Compilation/Compilation.cs + |> Seq.map (fun r -> + WriteNativeRes.Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, + id = int (int16 r.pstringName.Ordinal), name = r.pstringName.theString, + typeId = int (int16 r.pstringType.Ordinal), typeName = r.pstringType.theString)) + let bb = new System.Reflection.Metadata.BlobBuilder() + WriteNativeRes.NativeResourceWriter.SerializeWin32Resources(bb, resources, ulLinkedResourceBaseRVA) + bb.ToArray() + +let linkNativeResources (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = +#if ENABLE_MONO_SUPPORT + if IL.runningOnMono then + linkNativeResourcesManaged unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath + else +#endif +#if !FX_NO_LINKEDRESOURCES + linkNativeResourcesViaCVTres unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath +#else + linkNativeResourcesManaged unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath +#endif + let unlinkResource (ulLinkedResourceBaseRVA: int32) (pbLinkedResource: byte[]) = let mutable nResNodes = 0 @@ -854,7 +885,6 @@ let unlinkResource (ulLinkedResourceBaseRVA: int32) (pbLinkedResource: byte[]) = resBufferOffset <- resBufferOffset + pResNodes.[i].Save(ulLinkedResourceBaseRVA, pbLinkedResource, pResBuffer, resBufferOffset) pResBuffer -#endif #if !FX_NO_PDB_WRITER // PDB Writing diff --git a/src/absil/ilsupp.fsi b/src/absil/ilsupp.fsi index 48e7de602b..6b70a89b45 100644 --- a/src/absil/ilsupp.fsi +++ b/src/absil/ilsupp.fsi @@ -29,9 +29,7 @@ open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.IL -#if !FX_NO_LINKEDRESOURCES type IStream = System.Runtime.InteropServices.ComTypes.IStream -#endif /// Unmanaged resource file linker - for native resources (not managed ones). /// The function may be called twice, once with a zero-RVA and @@ -39,10 +37,8 @@ type IStream = System.Runtime.InteropServices.ComTypes.IStream /// required buffer is returned. type PEFileType = X86 | X64 -#if !FX_NO_LINKEDRESOURCES val linkNativeResources: unlinkedResources:byte[] list -> rva:int32 -> PEFileType -> tempFilePath:string -> byte[] val unlinkResource: int32 -> byte[] -> byte[] -#endif #if !FX_NO_PDB_WRITER /// PDB reader and associated types diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 47aa56664d..94ab05e66a 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -3744,28 +3744,18 @@ let writeBinaryAndReportMappings (outfile, match modul.NativeResources with | [] -> [||] | resources -> -#if ENABLE_MONO_SUPPORT - if runningOnMono then - [||] - else -#endif -#if FX_NO_LINKEDRESOURCES - ignore resources - ignore resourceFormat - [||] -#else - let unlinkedResources = - resources |> List.map (function - | ILNativeResource.Out bytes -> bytes - | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> - let linkedResource = File.ReadBinaryChunk (fileName, start, len) - unlinkResource linkedResourceBase linkedResource) - - begin - try linkNativeResources unlinkedResources next resourceFormat (Path.GetDirectoryName outfile) - with e -> failwith ("Linking a native resource failed: "+e.Message+"") - end -#endif + let unlinkedResources = + resources |> List.map (function + | ILNativeResource.Out bytes -> bytes + | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> + let linkedResource = File.ReadBinaryChunk (fileName, start, len) + unlinkResource linkedResourceBase linkedResource) + + begin + try linkNativeResources unlinkedResources next resourceFormat (Path.GetDirectoryName outfile) + with e -> failwith ("Linking a native resource failed: "+e.Message+"") + end + let nativeResourcesSize = nativeResources.Length let nativeResourcesChunk, next = chunk nativeResourcesSize next @@ -4169,14 +4159,12 @@ let writeBinaryAndReportMappings (outfile, writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) - // DATA SECTION -#if !FX_NO_LINKEDRESOURCES + // DATA SECTION match nativeResources with | [||] -> () | resources -> write (Some (dataSectionVirtToPhys nativeResourcesChunk.addr)) os "raw native resources" [| |] writeBytes os resources -#endif if dummydatap.size <> 0x0 then write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |] diff --git a/src/absil/writenativeres.fs b/src/absil/writenativeres.fs new file mode 100644 index 0000000000..b2a7badf10 --- /dev/null +++ b/src/absil/writenativeres.fs @@ -0,0 +1,192 @@ +// Quite literal port of https://github.com/dotnet/roslyn/blob/fab7134296816fc80019c60b0f5bef7400cf23ea/src/Compilers/Core/Portable/PEWriter/NativeResourceWriter.cs +// And its dependencies (some classes) +module internal FSharp.Compiler.AbstractIL.Internal.WriteNativeRes + +open System +open System.Collections.Generic +open System.Linq +open System.Diagnostics +open System.IO +open System.Reflection.Metadata +//open Roslyn.Utilities; + +type DWORD = System.UInt32 + +type Win32Resource(data : byte[], codePage : DWORD, languageId : DWORD, id : int, name : string, typeId : int, typeName : string) = + member val Data = data + member val CodePage = codePage + member val LanguageId = languageId + member val Id = id + member val Name = name + member val TypeId = typeId + member val TypeName = typeName + +type Directory(name, id) = + member val Name = name + member val ID = id + member val NumberOfNamedEntries = Unchecked.defaultof with get, set + member val NumberOfIdEntries = Unchecked.defaultof with get, set + member val Entries = new List() + +type NativeResourceWriter() = + static member private CompareResources (left : Win32Resource) (right : Win32Resource) = + let mutable (result : int) = NativeResourceWriter.CompareResourceIdentifiers (left.TypeId, left.TypeName, right.TypeId, right.TypeName) + if result = 0 + then NativeResourceWriter.CompareResourceIdentifiers (left.Id, left.Name, right.Id, right.Name) + else result + static member private CompareResourceIdentifiers(xOrdinal : int, xString : string, yOrdinal : int, yString : string) = + if xString = Unchecked.defaultof<_> + then + if yString = Unchecked.defaultof<_> + then xOrdinal - yOrdinal + else 1 + else + if yString = Unchecked.defaultof<_> + then - 1 + else String.Compare (xString, yString, StringComparison.OrdinalIgnoreCase) + static member SortResources(resources : IEnumerable) = + resources.OrderBy ((fun d -> d), Comparer<_>.Create(Comparison<_> NativeResourceWriter.CompareResources)) :> IEnumerable + static member SerializeWin32Resources(builder : BlobBuilder, theResources : IEnumerable, resourcesRva : int) = + let theResources = NativeResourceWriter.SortResources (theResources) + let mutable (typeDirectory : Directory) = new Directory(String.Empty, 0) + let mutable (nameDirectory : Directory) = Unchecked.defaultof<_> + let mutable (languageDirectory : Directory) = Unchecked.defaultof<_> + let mutable (lastTypeID : int) = Int32.MinValue + let mutable (lastTypeName : string) = Unchecked.defaultof<_> + let mutable (lastID : int) = Int32.MinValue + let mutable (lastName : string) = Unchecked.defaultof<_> + let mutable (sizeOfDirectoryTree : System.UInt32) = 16u + for (r : Win32Resource) in theResources do + let mutable (typeDifferent : System.Boolean) = r.TypeId < 0 && r.TypeName <> lastTypeName || r.TypeId > lastTypeID + if typeDifferent + then + lastTypeID <- r.TypeId + lastTypeName <- r.TypeName + if lastTypeID < 0 + then + Debug.Assert ((typeDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with types encoded as strings precede those encoded as ints") + typeDirectory.NumberOfNamedEntries <- typeDirectory.NumberOfNamedEntries + 1us + else + typeDirectory.NumberOfIdEntries <- typeDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u + nameDirectory <- new Directory(lastTypeName, lastTypeID) + typeDirectory.Entries.Add (nameDirectory) + if typeDifferent || r.Id < 0 && r.Name <> lastName || r.Id > lastID + then + lastID <- r.Id + lastName <- r.Name + if lastID < 0 + then + Debug.Assert ((nameDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with names encoded as strings precede those encoded as ints") + nameDirectory.NumberOfNamedEntries <- nameDirectory.NumberOfNamedEntries + 1us + else + nameDirectory.NumberOfIdEntries <- nameDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u + languageDirectory <- new Directory(lastName, lastID) + nameDirectory.Entries.Add (languageDirectory) + languageDirectory.NumberOfIdEntries <- languageDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 8u + languageDirectory.Entries.Add (r) + let mutable dataWriter = new BlobBuilder() + NativeResourceWriter.WriteDirectory (typeDirectory, builder, (0u), (0u), sizeOfDirectoryTree, resourcesRva, dataWriter) + builder.LinkSuffix (dataWriter) + builder.WriteByte (0uy) + builder.Align (4) + static member private WriteDirectory(directory : Directory, writer : BlobBuilder, offset : System.UInt32, level : System.UInt32, sizeOfDirectoryTree : System.UInt32, virtualAddressBase : int, dataWriter : BlobBuilder) = + writer.WriteUInt32 (0u) + writer.WriteUInt32 (0u) + writer.WriteUInt32 (0u) + writer.WriteUInt16 (directory.NumberOfNamedEntries) + writer.WriteUInt16 (directory.NumberOfIdEntries) + let mutable (n : System.UInt32) = uint32 directory.Entries.Count + let mutable (k : System.UInt32) = offset + 16u + n * 8u + do + let mutable (i : uint32) = 0u + while (i < n) do + let mutable (id : int) = Unchecked.defaultof + let mutable (name : string) = Unchecked.defaultof + let mutable (nameOffset : System.UInt32) = uint32 dataWriter.Count + sizeOfDirectoryTree + let mutable (directoryOffset : System.UInt32) = k + let isDir = + match directory.Entries.[int i] with + | :? Directory as subDir -> + id <- subDir.ID + name <- subDir.Name + if level = 0u + then k <- k + NativeResourceWriter.SizeOfDirectory (subDir) + else k <- k + 16u + 8u * uint32 subDir.Entries.Count + true + | :? Win32Resource as r -> + id <- + if level = 0u + then r.TypeId + else + if level = 1u + then r.Id + else int r.LanguageId + name <- + if level = 0u + then r.TypeName + else + if level = 1u + then r.Name + else Unchecked.defaultof<_> + dataWriter.WriteUInt32 ((uint32 virtualAddressBase + sizeOfDirectoryTree + 16u + uint32 dataWriter.Count)) + let mutable (data : byte[]) = (new List(r.Data)).ToArray () + dataWriter.WriteUInt32 (uint32 data.Length) + dataWriter.WriteUInt32 (r.CodePage) + dataWriter.WriteUInt32 (0u) + dataWriter.WriteBytes (data) + while (dataWriter.Count % 4 <> 0) do + dataWriter.WriteByte (0uy) + false + | e -> failwithf "Unknown entry %s" (if isNull e then "" else e.GetType().FullName) + if id >= 0 + then writer.WriteInt32 (id) + else + if name = Unchecked.defaultof<_> + then name <- String.Empty + writer.WriteUInt32 (nameOffset ||| 0x80000000u) + dataWriter.WriteUInt16 (uint16 name.Length) + dataWriter.WriteUTF16 (name) + if isDir + then writer.WriteUInt32 (directoryOffset ||| 0x80000000u) + else writer.WriteUInt32 (nameOffset) + i <- i + 1u + + k <- offset + 16u + n * 8u + do + let mutable (i : int) = 0 + while (uint32 i < n) do + match directory.Entries.[i] with + | :? Directory as subDir -> + NativeResourceWriter.WriteDirectory (subDir, writer, k, (level + 1u), sizeOfDirectoryTree, virtualAddressBase, dataWriter) + if level = 0u + then k <- k + NativeResourceWriter.SizeOfDirectory (subDir) + else k <- k + 16u + 8u * uint32 subDir.Entries.Count + | _ -> () + i <- i + 1 + () + static member private SizeOfDirectory(directory : Directory) = + let mutable (n : System.UInt32) = uint32 directory.Entries.Count + let mutable (size : System.UInt32) = 16u + 8u * n + do + let mutable (i : int) = 0 + while (uint32 i < n) do + match directory.Entries.[i] with + | :? Directory as subDir -> + size <- size + 16u + 8u * uint32 subDir.Entries.Count + | _ -> () + i <- i + 1 + size + (* + static member SerializeWin32Resources(builder : BlobBuilder, resourceSections : ResourceSection, resourcesRva : int) = + let mutable sectionWriter = new BlobWriter(builder.ReserveBytes (resourceSections.SectionBytes.Length)) + sectionWriter.WriteBytes (resourceSections.SectionBytes) + let mutable readStream = new MemoryStream(resourceSections.SectionBytes) + let mutable reader = new BinaryReader(readStream) + for (addressToFixup : int) in resourceSections.Relocations do + sectionWriter.Offset <- addressToFixup + reader.BaseStream.Position <- addressToFixup + sectionWriter.WriteUInt32 (reader.ReadUInt32 () + resourcesRva :> System.UInt32) + ()*) \ No newline at end of file diff --git a/src/absil/writenativeres.fsi b/src/absil/writenativeres.fsi new file mode 100644 index 0000000000..8728e5d538 --- /dev/null +++ b/src/absil/writenativeres.fsi @@ -0,0 +1,34 @@ + +module internal FSharp.Compiler.AbstractIL.Internal.WriteNativeRes + + +open System +open System.Collections.Generic +open System.Linq +open System.Diagnostics +open System.IO +open System.Reflection.Metadata +//open Roslyn.Utilities; + +type DWORD = System.UInt32 + +type Win32Resource = + class + new : data:byte [] * codePage:DWORD * languageId:DWORD * id:int * + name:string * typeId:int * typeName:string -> Win32Resource + member CodePage : DWORD + member Data : byte [] + member Id : int + member LanguageId : DWORD + member Name : string + member TypeId : int + member TypeName : string + end + +[] +type NativeResourceWriter = + static member SortResources : resources : IEnumerable -> IEnumerable + static member SerializeWin32Resources : builder:BlobBuilder * theResources:IEnumerable * resourcesRva:int -> unit + (* + static member SerializeWin32Resources(builder : BlobBuilder, resourceSections : ResourceSection, resourcesRva : int) -> unit + ()*) \ No newline at end of file diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index 8c4343fa01..98a5f99134 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -224,6 +224,18 @@ AbsIL\ilsign.fs + + AbsIL\writenativeres.fsi + + + AbsIL\writenativeres.fs + + + AbsIL\cvtres.fsi + + + AbsIL\cvtres.fs + AbsIL\ilsupp.fsi diff --git a/vsintegration/Utils/LanguageServiceProfiling/Options.fs b/vsintegration/Utils/LanguageServiceProfiling/Options.fs index 8ffb41aef0..574ff34158 100644 --- a/vsintegration/Utils/LanguageServiceProfiling/Options.fs +++ b/vsintegration/Utils/LanguageServiceProfiling/Options.fs @@ -77,6 +77,10 @@ let FCS (repositoryDir: string) : Options = @"src\absil\ilprint.fs" @"src\absil\ilmorph.fsi" @"src\absil\ilmorph.fs" + @"src\absil\writenativeres.fsi" + @"src\absil\writenativeres.fs" + @"src\absil\cvtres.fsi" + @"src\absil\cvtres.fs" @"src\absil\ilsupp.fsi" @"src\absil\ilsupp.fs" @"src\fsharp\FSharp.Compiler.Service\ilpars.fs" From 03da1664e6a9f95967a7343fc92bc4977145e504 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 28 Aug 2019 16:12:10 -0700 Subject: [PATCH 043/146] update package feed url (#7459) --- NuGet.config | 5 ++--- eng/Versions.props | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1b0f596f07..ef069a5bdf 100644 --- a/NuGet.config +++ b/NuGet.config @@ -18,10 +18,9 @@ - - + + - diff --git a/eng/Versions.props b/eng/Versions.props index 95e131a0c0..3556edc478 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -60,10 +60,9 @@ https://dotnet.myget.org/F/interactive-window/api/v3/index.json; https://myget.org/F/vs-devcore/api/v3/index.json; https://myget.org/F/vs-editor/api/v3/index.json; - https://vside.myget.org/F/vssdk/api/v3/index.json; - https://vside.myget.org/F/vs-impl/api/v3/index.json; + https://pkgs.dev.azure.com/azure-public/vside/_packaging/vssdk/nuget/v3/index.json; + https://pkgs.dev.azure.com/azure-public/vside/_packaging/vs-impl/nuget/v3/index.json; https://myget.org/F/roslyn_concord/api/v3/index.json; - https://vside.myget.org/F/devcore/api/v3/index.json; $([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)..\RoslynPackageVersion.txt').Trim()) From 783ae8084aac926350db1cc90315b4d7d6bc4df9 Mon Sep 17 00:00:00 2001 From: Grzegorz Dziadkiewicz Date: Thu, 29 Aug 2019 07:31:33 +0200 Subject: [PATCH 044/146] #6928 - Removed SByte and Byte from default case requirement and added check for complete match. (#7445) * #6928 - Removed SByte and Byte from default case requirement and added check for complete match. * Upgrade new tests (#6928) --- src/fsharp/PatternMatchCompilation.fs | 6 +- .../Warnings/PatternMatchingWarningTests.fs | 536 ++++++++++++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + 3 files changed, 540 insertions(+), 3 deletions(-) create mode 100644 tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 0bf4df1c25..3b172de1e3 100644 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -528,9 +528,7 @@ let (|ConstNeedsDefaultCase|_|) c = | Const.Decimal _ | Const.String _ | Const.Single _ - | Const.Double _ - | Const.SByte _ - | Const.Byte _ + | Const.Double _ | Const.Int16 _ | Const.UInt16 _ | Const.Int32 _ @@ -1084,6 +1082,8 @@ let CompilePatternBasic match simulSetOfDiscrims with | DecisionTreeTest.Const (Const.Bool _b) :: _ when simulSetOfCases.Length = 2 -> None + | DecisionTreeTest.Const (Const.Byte _) :: _ when simulSetOfCases.Length = 256 -> None + | DecisionTreeTest.Const (Const.SByte _) :: _ when simulSetOfCases.Length = 256 -> None | DecisionTreeTest.Const (Const.Unit) :: _ -> None | DecisionTreeTest.UnionCase (ucref, _) :: _ when simulSetOfCases.Length = ucref.TyconRef.UnionCasesArray.Length -> None | DecisionTreeTest.ActivePatternCase _ :: _ -> error(InternalError("DecisionTreeTest.ActivePatternCase should have been eliminated", matchm)) diff --git a/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs new file mode 100644 index 0000000000..f8f9804ef2 --- /dev/null +++ b/tests/fsharp/Compiler/Warnings/PatternMatchingWarningTests.fs @@ -0,0 +1,536 @@ +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.SourceCodeServices + +[] +module PatternMatchingWarningTests = + + [] + let ``Complete pattern match on byte should not trigger FS0025 warning`` () = + CompilerAssert.Pass + """ + let f x = + match x with + | 0uy -> 0 + | 1uy -> 1 + | 2uy -> 2 + | 3uy -> 3 + | 4uy -> 4 + | 5uy -> 5 + | 6uy -> 6 + | 7uy -> 7 + | 8uy -> 8 + | 9uy -> 9 + | 10uy -> 10 + | 11uy -> 11 + | 12uy -> 12 + | 13uy -> 13 + | 14uy -> 14 + | 15uy -> 15 + | 16uy -> 16 + | 17uy -> 17 + | 18uy -> 18 + | 19uy -> 19 + | 20uy -> 20 + | 21uy -> 21 + | 22uy -> 22 + | 23uy -> 23 + | 24uy -> 24 + | 25uy -> 25 + | 26uy -> 26 + | 27uy -> 27 + | 28uy -> 28 + | 29uy -> 29 + | 30uy -> 30 + | 31uy -> 31 + | 32uy -> 32 + | 33uy -> 33 + | 34uy -> 34 + | 35uy -> 35 + | 36uy -> 36 + | 37uy -> 37 + | 38uy -> 38 + | 39uy -> 39 + | 40uy -> 40 + | 41uy -> 41 + | 42uy -> 42 + | 43uy -> 43 + | 44uy -> 44 + | 45uy -> 45 + | 46uy -> 46 + | 47uy -> 47 + | 48uy -> 48 + | 49uy -> 49 + | 50uy -> 50 + | 51uy -> 51 + | 52uy -> 52 + | 53uy -> 53 + | 54uy -> 54 + | 55uy -> 55 + | 56uy -> 56 + | 57uy -> 57 + | 58uy -> 58 + | 59uy -> 59 + | 60uy -> 60 + | 61uy -> 61 + | 62uy -> 62 + | 63uy -> 63 + | 64uy -> 64 + | 65uy -> 65 + | 66uy -> 66 + | 67uy -> 67 + | 68uy -> 68 + | 69uy -> 69 + | 70uy -> 70 + | 71uy -> 71 + | 72uy -> 72 + | 73uy -> 73 + | 74uy -> 74 + | 75uy -> 75 + | 76uy -> 76 + | 77uy -> 77 + | 78uy -> 78 + | 79uy -> 79 + | 80uy -> 80 + | 81uy -> 81 + | 82uy -> 82 + | 83uy -> 83 + | 84uy -> 84 + | 85uy -> 85 + | 86uy -> 86 + | 87uy -> 87 + | 88uy -> 88 + | 89uy -> 89 + | 90uy -> 90 + | 91uy -> 91 + | 92uy -> 92 + | 93uy -> 93 + | 94uy -> 94 + | 95uy -> 95 + | 96uy -> 96 + | 97uy -> 97 + | 98uy -> 98 + | 99uy -> 99 + | 100uy -> 100 + | 101uy -> 101 + | 102uy -> 102 + | 103uy -> 103 + | 104uy -> 104 + | 105uy -> 105 + | 106uy -> 106 + | 107uy -> 107 + | 108uy -> 108 + | 109uy -> 109 + | 110uy -> 110 + | 111uy -> 111 + | 112uy -> 112 + | 113uy -> 113 + | 114uy -> 114 + | 115uy -> 115 + | 116uy -> 116 + | 117uy -> 117 + | 118uy -> 118 + | 119uy -> 119 + | 120uy -> 120 + | 121uy -> 121 + | 122uy -> 122 + | 123uy -> 123 + | 124uy -> 124 + | 125uy -> 125 + | 126uy -> 126 + | 127uy -> 127 + | 128uy -> 128 + | 129uy -> 129 + | 130uy -> 130 + | 131uy -> 131 + | 132uy -> 132 + | 133uy -> 133 + | 134uy -> 134 + | 135uy -> 135 + | 136uy -> 136 + | 137uy -> 137 + | 138uy -> 138 + | 139uy -> 139 + | 140uy -> 140 + | 141uy -> 141 + | 142uy -> 142 + | 143uy -> 143 + | 144uy -> 144 + | 145uy -> 145 + | 146uy -> 146 + | 147uy -> 147 + | 148uy -> 148 + | 149uy -> 149 + | 150uy -> 150 + | 151uy -> 151 + | 152uy -> 152 + | 153uy -> 153 + | 154uy -> 154 + | 155uy -> 155 + | 156uy -> 156 + | 157uy -> 157 + | 158uy -> 158 + | 159uy -> 159 + | 160uy -> 160 + | 161uy -> 161 + | 162uy -> 162 + | 163uy -> 163 + | 164uy -> 164 + | 165uy -> 165 + | 166uy -> 166 + | 167uy -> 167 + | 168uy -> 168 + | 169uy -> 169 + | 170uy -> 170 + | 171uy -> 171 + | 172uy -> 172 + | 173uy -> 173 + | 174uy -> 174 + | 175uy -> 175 + | 176uy -> 176 + | 177uy -> 177 + | 178uy -> 178 + | 179uy -> 179 + | 180uy -> 180 + | 181uy -> 181 + | 182uy -> 182 + | 183uy -> 183 + | 184uy -> 184 + | 185uy -> 185 + | 186uy -> 186 + | 187uy -> 187 + | 188uy -> 188 + | 189uy -> 189 + | 190uy -> 190 + | 191uy -> 191 + | 192uy -> 192 + | 193uy -> 193 + | 194uy -> 194 + | 195uy -> 195 + | 196uy -> 196 + | 197uy -> 197 + | 198uy -> 198 + | 199uy -> 199 + | 200uy -> 200 + | 201uy -> 201 + | 202uy -> 202 + | 203uy -> 203 + | 204uy -> 204 + | 205uy -> 205 + | 206uy -> 206 + | 207uy -> 207 + | 208uy -> 208 + | 209uy -> 209 + | 210uy -> 210 + | 211uy -> 211 + | 212uy -> 212 + | 213uy -> 213 + | 214uy -> 214 + | 215uy -> 215 + | 216uy -> 216 + | 217uy -> 217 + | 218uy -> 218 + | 219uy -> 219 + | 220uy -> 220 + | 221uy -> 221 + | 222uy -> 222 + | 223uy -> 223 + | 224uy -> 224 + | 225uy -> 225 + | 226uy -> 226 + | 227uy -> 227 + | 228uy -> 228 + | 229uy -> 229 + | 230uy -> 230 + | 231uy -> 231 + | 232uy -> 232 + | 233uy -> 233 + | 234uy -> 234 + | 235uy -> 235 + | 236uy -> 236 + | 237uy -> 237 + | 238uy -> 238 + | 239uy -> 239 + | 240uy -> 240 + | 241uy -> 241 + | 242uy -> 242 + | 243uy -> 243 + | 244uy -> 244 + | 245uy -> 245 + | 246uy -> 246 + | 247uy -> 247 + | 248uy -> 248 + | 249uy -> 249 + | 250uy -> 250 + | 251uy -> 251 + | 252uy -> 252 + | 253uy -> 253 + | 254uy -> 254 + | 255uy -> 255 + printfn "" + """ + [] + let ``Complete pattern match on sbyte should not trigger FS0025 warning`` () = + CompilerAssert.Pass + """ + let f x = + match x with + | -128y -> -128 + | -127y -> -127 + | -126y -> -126 + | -125y -> -125 + | -124y -> -124 + | -123y -> -123 + | -122y -> -122 + | -121y -> -121 + | -120y -> -120 + | -119y -> -119 + | -118y -> -118 + | -117y -> -117 + | -116y -> -116 + | -115y -> -115 + | -114y -> -114 + | -113y -> -113 + | -112y -> -112 + | -111y -> -111 + | -110y -> -110 + | -109y -> -109 + | -108y -> -108 + | -107y -> -107 + | -106y -> -106 + | -105y -> -105 + | -104y -> -104 + | -103y -> -103 + | -102y -> -102 + | -101y -> -101 + | -100y -> -100 + | -99y -> -99 + | -98y -> -98 + | -97y -> -97 + | -96y -> -96 + | -95y -> -95 + | -94y -> -94 + | -93y -> -93 + | -92y -> -92 + | -91y -> -91 + | -90y -> -90 + | -89y -> -89 + | -88y -> -88 + | -87y -> -87 + | -86y -> -86 + | -85y -> -85 + | -84y -> -84 + | -83y -> -83 + | -82y -> -82 + | -81y -> -81 + | -80y -> -80 + | -79y -> -79 + | -78y -> -78 + | -77y -> -77 + | -76y -> -76 + | -75y -> -75 + | -74y -> -74 + | -73y -> -73 + | -72y -> -72 + | -71y -> -71 + | -70y -> -70 + | -69y -> -69 + | -68y -> -68 + | -67y -> -67 + | -66y -> -66 + | -65y -> -65 + | -64y -> -64 + | -63y -> -63 + | -62y -> -62 + | -61y -> -61 + | -60y -> -60 + | -59y -> -59 + | -58y -> -58 + | -57y -> -57 + | -56y -> -56 + | -55y -> -55 + | -54y -> -54 + | -53y -> -53 + | -52y -> -52 + | -51y -> -51 + | -50y -> -50 + | -49y -> -49 + | -48y -> -48 + | -47y -> -47 + | -46y -> -46 + | -45y -> -45 + | -44y -> -44 + | -43y -> -43 + | -42y -> -42 + | -41y -> -41 + | -40y -> -40 + | -39y -> -39 + | -38y -> -38 + | -37y -> -37 + | -36y -> -36 + | -35y -> -35 + | -34y -> -34 + | -33y -> -33 + | -32y -> -32 + | -31y -> -31 + | -30y -> -30 + | -29y -> -29 + | -28y -> -28 + | -27y -> -27 + | -26y -> -26 + | -25y -> -25 + | -24y -> -24 + | -23y -> -23 + | -22y -> -22 + | -21y -> -21 + | -20y -> -20 + | -19y -> -19 + | -18y -> -18 + | -17y -> -17 + | -16y -> -16 + | -15y -> -15 + | -14y -> -14 + | -13y -> -13 + | -12y -> -12 + | -11y -> -11 + | -10y -> -10 + | -9y -> -9 + | -8y -> -8 + | -7y -> -7 + | -6y -> -6 + | -5y -> -5 + | -4y -> -4 + | -3y -> -3 + | -2y -> -2 + | -1y -> -1 + | 0y -> 0 + | 1y -> 1 + | 2y -> 2 + | 3y -> 3 + | 4y -> 4 + | 5y -> 5 + | 6y -> 6 + | 7y -> 7 + | 8y -> 8 + | 9y -> 9 + | 10y -> 10 + | 11y -> 11 + | 12y -> 12 + | 13y -> 13 + | 14y -> 14 + | 15y -> 15 + | 16y -> 16 + | 17y -> 17 + | 18y -> 18 + | 19y -> 19 + | 20y -> 20 + | 21y -> 21 + | 22y -> 22 + | 23y -> 23 + | 24y -> 24 + | 25y -> 25 + | 26y -> 26 + | 27y -> 27 + | 28y -> 28 + | 29y -> 29 + | 30y -> 30 + | 31y -> 31 + | 32y -> 32 + | 33y -> 33 + | 34y -> 34 + | 35y -> 35 + | 36y -> 36 + | 37y -> 37 + | 38y -> 38 + | 39y -> 39 + | 40y -> 40 + | 41y -> 41 + | 42y -> 42 + | 43y -> 43 + | 44y -> 44 + | 45y -> 45 + | 46y -> 46 + | 47y -> 47 + | 48y -> 48 + | 49y -> 49 + | 50y -> 50 + | 51y -> 51 + | 52y -> 52 + | 53y -> 53 + | 54y -> 54 + | 55y -> 55 + | 56y -> 56 + | 57y -> 57 + | 58y -> 58 + | 59y -> 59 + | 60y -> 60 + | 61y -> 61 + | 62y -> 62 + | 63y -> 63 + | 64y -> 64 + | 65y -> 65 + | 66y -> 66 + | 67y -> 67 + | 68y -> 68 + | 69y -> 69 + | 70y -> 70 + | 71y -> 71 + | 72y -> 72 + | 73y -> 73 + | 74y -> 74 + | 75y -> 75 + | 76y -> 76 + | 77y -> 77 + | 78y -> 78 + | 79y -> 79 + | 80y -> 80 + | 81y -> 81 + | 82y -> 82 + | 83y -> 83 + | 84y -> 84 + | 85y -> 85 + | 86y -> 86 + | 87y -> 87 + | 88y -> 88 + | 89y -> 89 + | 90y -> 90 + | 91y -> 91 + | 92y -> 92 + | 93y -> 93 + | 94y -> 94 + | 95y -> 95 + | 96y -> 96 + | 97y -> 97 + | 98y -> 98 + | 99y -> 99 + | 100y -> 100 + | 101y -> 101 + | 102y -> 102 + | 103y -> 103 + | 104y -> 104 + | 105y -> 105 + | 106y -> 106 + | 107y -> 107 + | 108y -> 108 + | 109y -> 109 + | 110y -> 110 + | 111y -> 111 + | 112y -> 112 + | 113y -> 113 + | 114y -> 114 + | 115y -> 115 + | 116y -> 116 + | 117y -> 117 + | 118y -> 118 + | 119y -> 119 + | 120y -> 120 + | 121y -> 121 + | 122y -> 122 + | 123y -> 123 + | 124y -> 124 + | 125y -> 125 + | 126y -> 126 + | 127y -> 127 + printfn "" + """ diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index b15599486d..1b1d3386ac 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -53,6 +53,7 @@ + From 8710f8cafb5b65a91b8183b0495b3c1acb7b9d89 Mon Sep 17 00:00:00 2001 From: Jan Wosnitza Date: Thu, 29 Aug 2019 07:33:47 +0200 Subject: [PATCH 045/146] Dynamic compiling in Unity Player (2019.1.6f1) (#7427) * add type annotation * annotate parameter * Update src/fsharp/NameResolution.fs Co-Authored-By: Phillip Carter --- src/fsharp/NameResolution.fs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 6f03bbc1d4..57b81f0ff4 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -1894,7 +1894,8 @@ let rec ResolveLongIndentAsModuleOrNamespace sink atMostOne amap m first fullyQu | _ -> raze (namespaceNotFound.Force()) -let ResolveLongIndentAsModuleOrNamespaceThen sink atMostOne amap m fullyQualified (nenv: NameResolutionEnv) ad id rest isOpenDecl f = +// Note - 'rest' is annotated due to a bug currently in Unity (see: https://github.com/dotnet/fsharp/pull/7427) +let ResolveLongIndentAsModuleOrNamespaceThen sink atMostOne amap m fullyQualified (nenv: NameResolutionEnv) ad id (rest: Ident list) isOpenDecl f = match ResolveLongIndentAsModuleOrNamespace sink ResultCollectionSettings.AllResults amap m true fullyQualified nenv ad id [] isOpenDecl with | Result modrefs -> match rest with From afd2b7650a524eede1122d446d42fcb84a56df91 Mon Sep 17 00:00:00 2001 From: Kevin Ransom Date: Thu, 29 Aug 2019 00:27:01 -0700 Subject: [PATCH 046/146] Fix native resource issue with emptry streams --- src/absil/cvtres.fs | 64 +++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/src/absil/cvtres.fs b/src/absil/cvtres.fs index baf9eec79d..cf448b9561 100644 --- a/src/absil/cvtres.fs +++ b/src/absil/cvtres.fs @@ -54,37 +54,39 @@ type CvtResFile() = static member ReadResFile(stream : Stream) = let mutable reader = new BinaryReader(stream, Encoding.Unicode) let mutable resourceNames = new List() - let mutable startPos = stream.Position - let mutable initial32Bits = reader.ReadUInt32 () - if initial32Bits <> uint32 0 - then raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") - stream.Position <- startPos - while (stream.Position < stream.Length) do - let mutable cbData = reader.ReadUInt32 () - let mutable cbHdr = reader.ReadUInt32 () - if cbHdr < 2u * uint32 sizeof - then raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) - if cbData = 0u - then - stream.Position <- stream.Position + int64 cbHdr - 2L * int64 sizeof - else - let mutable pAdditional = RESOURCE() - pAdditional.HeaderSize <- cbHdr - pAdditional.DataSize <- cbData - pAdditional.pstringType <- CvtResFile.ReadStringOrID (reader) - pAdditional.pstringName <- CvtResFile.ReadStringOrID (reader) - stream.Position <- stream.Position + 3L &&& ~~~3L - pAdditional.DataVersion <- reader.ReadUInt32 () - pAdditional.MemoryFlags <- reader.ReadUInt16 () - pAdditional.LanguageId <- reader.ReadUInt16 () - pAdditional.Version <- reader.ReadUInt32 () - pAdditional.Characteristics <- reader.ReadUInt32 () - pAdditional.data <- Array.zeroCreate (int pAdditional.DataSize) - reader.Read (pAdditional.data, 0, pAdditional.data.Length) |> ignore - stream.Position <- stream.Position + 3L &&& ~~~3L - if pAdditional.pstringType.theString = Unchecked.defaultof<_> && (pAdditional.pstringType.Ordinal = uint16 CvtResFile.RT_DLGINCLUDE) - then () (* ERROR ContinueNotSupported *) - else resourceNames.Add (pAdditional) + // The stream might be empty ... so lets check + if not (reader.PeekChar() = -1) then + let mutable startPos = stream.Position + let mutable initial32Bits = reader.ReadUInt32 () + if initial32Bits <> uint32 0 + then raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") + stream.Position <- startPos + while (stream.Position < stream.Length) do + let mutable cbData = reader.ReadUInt32 () + let mutable cbHdr = reader.ReadUInt32 () + if cbHdr < 2u * uint32 sizeof + then raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) + if cbData = 0u + then + stream.Position <- stream.Position + int64 cbHdr - 2L * int64 sizeof + else + let mutable pAdditional = RESOURCE() + pAdditional.HeaderSize <- cbHdr + pAdditional.DataSize <- cbData + pAdditional.pstringType <- CvtResFile.ReadStringOrID (reader) + pAdditional.pstringName <- CvtResFile.ReadStringOrID (reader) + stream.Position <- stream.Position + 3L &&& ~~~3L + pAdditional.DataVersion <- reader.ReadUInt32 () + pAdditional.MemoryFlags <- reader.ReadUInt16 () + pAdditional.LanguageId <- reader.ReadUInt16 () + pAdditional.Version <- reader.ReadUInt32 () + pAdditional.Characteristics <- reader.ReadUInt32 () + pAdditional.data <- Array.zeroCreate (int pAdditional.DataSize) + reader.Read (pAdditional.data, 0, pAdditional.data.Length) |> ignore + stream.Position <- stream.Position + 3L &&& ~~~3L + if pAdditional.pstringType.theString = Unchecked.defaultof<_> && (pAdditional.pstringType.Ordinal = uint16 CvtResFile.RT_DLGINCLUDE) + then () (* ERROR ContinueNotSupported *) + else resourceNames.Add (pAdditional) resourceNames static member private ReadStringOrID(fhIn : BinaryReader) = let mutable (pstring : RESOURCE_STRING) = RESOURCE_STRING() From 20f79d8509d52ace64788034377ec827759dde59 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 29 Aug 2019 10:45:20 -0700 Subject: [PATCH 047/146] Update src/absil/cvtres.fs Co-Authored-By: Phillip Carter --- src/absil/cvtres.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/absil/cvtres.fs b/src/absil/cvtres.fs index cf448b9561..0f03a51328 100644 --- a/src/absil/cvtres.fs +++ b/src/absil/cvtres.fs @@ -54,7 +54,7 @@ type CvtResFile() = static member ReadResFile(stream : Stream) = let mutable reader = new BinaryReader(stream, Encoding.Unicode) let mutable resourceNames = new List() - // The stream might be empty ... so lets check + // The stream might be empty, so let's check if not (reader.PeekChar() = -1) then let mutable startPos = stream.Position let mutable initial32Bits = reader.ReadUInt32 () @@ -722,4 +722,4 @@ type Win32ResourceConversions() = resWriter.Write (0x0000us) resWriter.Write (0x00000000u) resWriter.Write (0x00000000u) - manifestStream.CopyTo (resStream) \ No newline at end of file + manifestStream.CopyTo (resStream) From 927fec6b6cf4322524d3f8cf984d5c77873baef9 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 30 Aug 2019 21:01:18 +0300 Subject: [PATCH 048/146] Fix record pattern ranges (#7471) * Fix record pattern ranges * Update baseline --- src/fsharp/pars.fsy | 2 +- tests/fsharp/typecheck/sigs/neg15.bsl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 56e6dbfb40..66d72782e3 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -2850,7 +2850,7 @@ atomicPattern: { SynPat.QuoteExpr($1,lhs parseState) } | CHAR DOT_DOT CHAR { SynPat.DeprecatedCharRange ($1,$3,rhs2 parseState 1 3) } | LBRACE recordPatternElementsAux rbrace - { let rs,m = $2 in SynPat.Record (rs,m) } + { let rs, m = $2 in SynPat.Record (rs, rhs2 parseState 1 3) } | LBRACK listPatternElements RBRACK { SynPat.ArrayOrList(false,$2,lhs parseState) } | LBRACK_BAR listPatternElements BAR_RBRACK diff --git a/tests/fsharp/typecheck/sigs/neg15.bsl b/tests/fsharp/typecheck/sigs/neg15.bsl index b51e2f312d..c8c59c1dc2 100644 --- a/tests/fsharp/typecheck/sigs/neg15.bsl +++ b/tests/fsharp/typecheck/sigs/neg15.bsl @@ -21,9 +21,9 @@ neg15.fs(112,18,112,78): typecheck error FS1093: The union cases or fields of th neg15.fs(112,18,112,78): typecheck error FS1093: The union cases or fields of the type 'RecordTypeWithPrivateRepresentation' are not accessible from this code location -neg15.fs(113,19,113,76): typecheck error FS1093: The union cases or fields of the type 'RecordTypeWithPrivateRepresentation' are not accessible from this code location +neg15.fs(113,17,113,76): typecheck error FS1093: The union cases or fields of the type 'RecordTypeWithPrivateRepresentation' are not accessible from this code location -neg15.fs(114,19,114,52): typecheck error FS1092: The type 'PrivateRecordType' is not accessible from this code location +neg15.fs(114,17,114,52): typecheck error FS1092: The type 'PrivateRecordType' is not accessible from this code location neg15.fs(115,19,115,48): typecheck error FS0072: Lookup on object of indeterminate type based on information prior to this program point. A type annotation may be needed prior to this program point to constrain the type of the object. This may allow the lookup to be resolved. From 7c983b34f641681cf12e81d0fd61f5c44bba00d5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2019 11:07:17 -0700 Subject: [PATCH 049/146] [master] Update dependencies from dotnet/arcade (#7452) * Update dependencies from https://github.com/dotnet/arcade build 20190825.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19425.1 * Update dependencies from https://github.com/dotnet/arcade build 20190826.12 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19426.12 * Update dependencies from https://github.com/dotnet/arcade build 20190827.8 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19427.8 * Update dependencies from https://github.com/dotnet/arcade build 20190828.9 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19428.9 * Update dependencies from https://github.com/dotnet/arcade build 20190829.16 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19429.16 * Update dependencies from https://github.com/dotnet/arcade build 20190830.3 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19430.3 --- eng/Version.Details.xml | 4 ++-- eng/common/darc-init.ps1 | 4 ++-- eng/common/darc-init.sh | 6 +++++- eng/common/native/CommonLibrary.psm1 | 2 ++ eng/common/performance/perfhelixpublish.proj | 8 ++++---- eng/common/post-build/symbols-validation.ps1 | 20 +++++++++---------- eng/common/sdl/execute-all-sdl-tools.ps1 | 4 ++-- eng/common/sdl/init-sdl.ps1 | 3 +++ eng/common/sdl/packages.config | 4 ++-- eng/common/sdl/run-sdl.ps1 | 10 +++++----- eng/common/templates/job/execute-sdl.yml | 15 ++++++++------ .../templates/post-build/common-variables.yml | 4 ++-- .../templates/post-build/post-build.yml | 6 ++++-- eng/common/tools.ps1 | 2 ++ eng/common/tools.sh | 15 ++++++++++---- global.json | 2 +- 16 files changed, 66 insertions(+), 43 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a290e42803..5c37dee817 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - a7b5eb8de300b6a30bd797c4ecc8769f7028aeec + 316c80d0c373be63f991cc4d586db85273c1c553 diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index 8854d979f3..46d175fdfd 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -1,9 +1,9 @@ param ( $darcVersion = $null, - $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" + $versionEndpoint = "https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16", + $verbosity = "m" ) -$verbosity = "m" . $PSScriptRoot\tools.ps1 function InstallDarcCli ($darcVersion) { diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index abdd0bc05a..242429bca6 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -3,6 +3,7 @@ source="${BASH_SOURCE[0]}" darcVersion='' versionEndpoint="https://maestro-prod.westus2.cloudapp.azure.com/api/assets/darc-version?api-version=2019-01-16" +verbosity=m while [[ $# > 0 ]]; do opt="$(echo "$1" | awk '{print tolower($0)}')" @@ -15,6 +16,10 @@ while [[ $# > 0 ]]; do versionEndpoint=$2 shift ;; + --verbosity) + verbosity=$2 + shift + ;; *) echo "Invalid argument: $1" usage @@ -34,7 +39,6 @@ while [[ -h "$source" ]]; do [[ $source != /* ]] && source="$scriptroot/$source" done scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" -verbosity=m . "$scriptroot/tools.sh" diff --git a/eng/common/native/CommonLibrary.psm1 b/eng/common/native/CommonLibrary.psm1 index 2a08d5246e..41416862d9 100644 --- a/eng/common/native/CommonLibrary.psm1 +++ b/eng/common/native/CommonLibrary.psm1 @@ -152,6 +152,8 @@ function Get-File { } else { Write-Verbose "Downloading $Uri" + # Don't display the console progress UI - it's a huge perf hit + $ProgressPreference = 'SilentlyContinue' while($Attempt -Lt $DownloadRetries) { try { diff --git a/eng/common/performance/perfhelixpublish.proj b/eng/common/performance/perfhelixpublish.proj index d07b1fa6e2..e5826b5323 100644 --- a/eng/common/performance/perfhelixpublish.proj +++ b/eng/common/performance/perfhelixpublish.proj @@ -83,8 +83,8 @@ $(WorkItemDirectory) - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(BaselineArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --partition-count $(PartitionCount) --partition-index %(HelixWorkItem.Index)" $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults);$(FinalCommand) 4:00 @@ -93,8 +93,8 @@ $(WorkItemDirectory) - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument) --artifacts $(ArtifactsDirectory)" - $(WorkItemCommand) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument) --artifacts $(ArtifactsDirectory)" + $(WorkItemCommand) --bdn-artifacts $(BaselineArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(BaselineCoreRunArgument)" + $(WorkItemCommand) --bdn-artifacts $(ArtifactsDirectory) --bdn-arguments="--anyCategories $(BDNCategories) $(ExtraBenchmarkDotNetArguments) $(CoreRunArgument)" $(DotnetExe) run -f $(_Framework) -p $(ResultsComparer) --base $(BaselineArtifactsDirectory) --diff $(ArtifactsDirectory) --threshold 2$(Percent) --xml $(XMLResults) 4:00 diff --git a/eng/common/post-build/symbols-validation.ps1 b/eng/common/post-build/symbols-validation.ps1 index d5ec51b150..096ac321d1 100644 --- a/eng/common/post-build/symbols-validation.ps1 +++ b/eng/common/post-build/symbols-validation.ps1 @@ -37,10 +37,10 @@ function FirstMatchingSymbolDescriptionOrDefault { # DWARF file for a .dylib $DylibDwarf = $SymbolPath.Replace($Extension, ".dylib.dwarf") - $dotnetsymbolExe = "$env:USERPROFILE\.dotnet\tools" - $dotnetsymbolExe = Resolve-Path "$dotnetsymbolExe\dotnet-symbol.exe" + $dotnetSymbolExe = "$env:USERPROFILE\.dotnet\tools" + $dotnetSymbolExe = Resolve-Path "$dotnetSymbolExe\dotnet-symbol.exe" - & $dotnetsymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null + & $dotnetSymbolExe --symbols --modules --windows-pdbs $TargetServerParam $FullPath -o $SymbolsPath | Out-Null if (Test-Path $PdbPath) { return "PDB" @@ -159,25 +159,25 @@ function CheckSymbolsAvailable { } } -function Installdotnetsymbol { - $dotnetsymbolPackageName = "dotnet-symbol" +function InstallDotnetSymbol { + $dotnetSymbolPackageName = "dotnet-symbol" $dotnetRoot = InitializeDotNetCli -install:$true $dotnet = "$dotnetRoot\dotnet.exe" $toolList = & "$dotnet" tool list --global - if (($toolList -like "*$dotnetsymbolPackageName*") -and ($toolList -like "*$dotnetsymbolVersion*")) { - Write-Host "dotnet-symbol version $dotnetsymbolVersion is already installed." + if (($toolList -like "*$dotnetSymbolPackageName*") -and ($toolList -like "*$dotnetSymbolVersion*")) { + Write-Host "dotnet-symbol version $dotnetSymbolVersion is already installed." } else { - Write-Host "Installing dotnet-symbol version $dotnetsymbolVersion..." + Write-Host "Installing dotnet-symbol version $dotnetSymbolVersion..." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." - & "$dotnet" tool install $dotnetsymbolPackageName --version $dotnetsymbolVersion --verbosity "minimal" --global + & "$dotnet" tool install $dotnetSymbolPackageName --version $dotnetSymbolVersion --verbosity "minimal" --global } } try { - Installdotnetsymbol + InstallDotnetSymbol CheckSymbolsAvailable } diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index 6d9bdcf72b..fa239484f2 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -53,8 +53,8 @@ if ($ValidPath -eq $False) exit 1 } -& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $ArtifactsDirectory -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel -$gdnFolder = Join-Path $ArtifactsDirectory ".gdn" +& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory (Split-Path $SourceDirectory -Parent) -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel +$gdnFolder = Join-Path (Split-Path $SourceDirectory -Parent) ".gdn" if ($TsaOnboard) { if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) { diff --git a/eng/common/sdl/init-sdl.ps1 b/eng/common/sdl/init-sdl.ps1 index 26e01c0673..c737eb0e71 100644 --- a/eng/common/sdl/init-sdl.ps1 +++ b/eng/common/sdl/init-sdl.ps1 @@ -11,6 +11,9 @@ $ErrorActionPreference = "Stop" Set-StrictMode -Version 2.0 $LASTEXITCODE = 0 +# Don't display the console progress UI - it's a huge perf hit +$ProgressPreference = 'SilentlyContinue' + # Construct basic auth from AzDO access token; construct URI to the repository's gdn folder stored in that repository; construct location of zip file $encodedPat = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$AzureDevOpsAccessToken")) $escapedRepository = [Uri]::EscapeDataString("/$Repository/$BranchName/.gdn") diff --git a/eng/common/sdl/packages.config b/eng/common/sdl/packages.config index 3f97ac2f16..256ffbfb93 100644 --- a/eng/common/sdl/packages.config +++ b/eng/common/sdl/packages.config @@ -1,4 +1,4 @@ - + - + diff --git a/eng/common/sdl/run-sdl.ps1 b/eng/common/sdl/run-sdl.ps1 index b90c4399ba..9bc25314ae 100644 --- a/eng/common/sdl/run-sdl.ps1 +++ b/eng/common/sdl/run-sdl.ps1 @@ -32,16 +32,16 @@ foreach ($tool in $ToolsList) { Write-Host $tool # We have to manually configure tools that run on source to look at the source directory only if ($tool -eq "credscan") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory : $TargetDirectory `" `" OutputType : pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory : $TargetDirectory " "OutputType : pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" TargetDirectory < $TargetDirectory `" `" OutputType < pre `" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " TargetDirectory < $TargetDirectory " "OutputType < pre" $(If ($CrScanAdditionalRunConfigParams) {$CrScanAdditionalRunConfigParams}) if ($LASTEXITCODE -ne 0) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE } } if ($tool -eq "policheck") { - Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target : $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" - & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target : $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) + Write-Host "$GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args `" Target < $TargetDirectory `" $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams})" + & $GuardianCliLocation configure --working-directory $WorkingDirectory --tool $tool --output-path $gdnConfigFile --logger-level $GuardianLoggerLevel --noninteractive --force --args " Target < $TargetDirectory " $(If ($PoliCheckAdditionalRunConfigParams) {$PoliCheckAdditionalRunConfigParams}) if ($LASTEXITCODE -ne 0) { Write-Host "Guardian configure for $tool failed with exit code $LASTEXITCODE." exit $LASTEXITCODE @@ -56,4 +56,4 @@ Write-Host "$GuardianCliLocation run --working-directory $WorkingDirectory --bas if ($LASTEXITCODE -ne 0) { Write-Host "Guardian run for $ToolsList using $configParam failed with exit code $LASTEXITCODE." exit $LASTEXITCODE -} \ No newline at end of file +} diff --git a/eng/common/templates/job/execute-sdl.yml b/eng/common/templates/job/execute-sdl.yml index 91621cf88f..a7f9964195 100644 --- a/eng/common/templates/job/execute-sdl.yml +++ b/eng/common/templates/job/execute-sdl.yml @@ -1,7 +1,10 @@ parameters: overrideParameters: '' # Optional: to override values for parameters. additionalParameters: '' # Optional: parameters that need user specific values eg: '-SourceToolsList @("abc","def") -ArtifactToolsList @("ghi","jkl")' - continueOnError: false # optional: determines whether to continue the build if the step errors; + # There is some sort of bug (has been reported) in Azure DevOps where if this parameter is named + # 'continueOnError', the parameter value is not correctly picked up. + # This can also be remedied by the caller (post-build.yml) if it does not use a nested parameter + sdlContinueOnError: false # optional: determines whether to continue the build if the step errors; dependsOn: '' # Optional: dependencies of the job jobs: @@ -26,12 +29,12 @@ jobs: -InputPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\BlobArtifacts displayName: Extract Blob Artifacts - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - powershell: eng/common/sdl/extract-artifact-packages.ps1 -InputPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts -ExtractPath $(Build.SourcesDirectory)\artifacts\PackageArtifacts displayName: Extract Package Artifacts - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - task: NuGetToolInstaller@1 displayName: 'Install NuGet.exe' - task: NuGetCommand@2 @@ -45,12 +48,12 @@ jobs: - ${{ if ne(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 ${{ parameters.overrideParameters }} displayName: Execute SDL - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} - ${{ if eq(parameters.overrideParameters, '') }}: - powershell: eng/common/sdl/execute-all-sdl-tools.ps1 - -GuardianPackageName Microsoft.Guardian.Cli.0.7.1 + -GuardianPackageName Microsoft.Guardian.Cli.0.7.2 -NugetPackageDirectory $(Build.SourcesDirectory)\.packages -AzureDevOpsAccessToken $(dn-bot-dotnet-build-rw-code-rw) ${{ parameters.additionalParameters }} displayName: Execute SDL - continueOnError: ${{ parameters.continueOnError }} + continueOnError: ${{ parameters.sdlContinueOnError }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index b00d85d8ce..7b3fdb1361 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -49,6 +49,6 @@ variables: # Default locations for Installers and checksums - name: ChecksumsBlobFeedUrl - value: https://dotnetcli.blob.core.windows.net/dotnet/index.json - - name: InstallersBlobFeedUrl value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json + - name: InstallersBlobFeedUrl + value: https://dotnetcli.blob.core.windows.net/dotnet/index.json diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 3f239fae2b..34667b6c09 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -1,11 +1,12 @@ parameters: - enableSourceLinkValidation: true + enableSourceLinkValidation: false enableSigningValidation: true - enableSymbolValidation: true + enableSymbolValidation: false enableNugetValidation: true publishInstallersAndChecksums: false SDLValidationParameters: enable: false + continueOnError: false params: '' # These parameters let the user customize the call to sdk-task.ps1 for publishing @@ -92,6 +93,7 @@ stages: - template: /eng/common/templates/job/execute-sdl.yml parameters: additionalParameters: ${{ parameters.SDLValidationParameters.params }} + continueOnError: ${{ parameters.SDLValidationParameters.continueOnError }} - template: \eng\common\templates\post-build\channels\netcore-dev-5.yml parameters: diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 9c12b1b4fd..bb5638930a 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -163,6 +163,7 @@ function GetDotNetInstallScript([string] $dotnetRoot) { $installScript = Join-Path $dotnetRoot "dotnet-install.ps1" if (!(Test-Path $installScript)) { Create-Directory $dotnetRoot + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Invoke-WebRequest "https://dot.net/$dotnetInstallScriptVersion/dotnet-install.ps1" -OutFile $installScript } @@ -282,6 +283,7 @@ function InitializeXCopyMSBuild([string]$packageVersion, [bool]$install) { Create-Directory $packageDir Write-Host "Downloading $packageName $packageVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Invoke-WebRequest "https://dotnet.myget.org/F/roslyn-tools/api/v2/package/$packageName/$packageVersion/" -OutFile $packagePath Unzip $packagePath $packageDir } diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 3af9be6157..94a1edd7d0 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -208,12 +208,19 @@ function GetDotNetInstallScript { # Use curl if available, otherwise use wget if command -v curl > /dev/null; then - curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" - else - wget -q -O "$install_script" "$install_script_url" + curl "$install_script_url" -sSL --retry 10 --create-dirs -o "$install_script" || { + local exit_code=$? + Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." + ExitWithExitCode $exit_code + } + else + wget -q -O "$install_script" "$install_script_url" || { + local exit_code=$? + Write-PipelineTelemetryError -category 'InitializeToolset' "Failed to acquire dotnet install script (exit code '$exit_code')." + ExitWithExitCode $exit_code + } fi fi - # return value _GetDotNetInstallScript="$install_script" } diff --git a/global.json b/global.json index 44db835d2a..d83c45f986 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19424.1", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19430.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 68fd9c10edc225c26ba4be48c6eaeac3bcd3e0f3 Mon Sep 17 00:00:00 2001 From: jb Date: Mon, 2 Sep 2019 18:40:19 -0400 Subject: [PATCH 050/146] fix documentation typos (#7420) --- fcs/docsrc/content/caches.fsx | 4 ++-- fcs/docsrc/content/compiler.fsx | 4 ++-- fcs/docsrc/content/editor.fsx | 2 +- fcs/docsrc/content/interactive.fsx | 10 +++++----- fcs/docsrc/content/project.fsx | 2 +- fcs/docsrc/content/queue.fsx | 2 +- fcs/docsrc/content/react.fsx | 2 +- fcs/docsrc/content/symbols.fsx | 6 +++--- fcs/docsrc/content/tokenizer.fsx | 2 +- fcs/docsrc/content/untypedtree.fsx | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fcs/docsrc/content/caches.fsx b/fcs/docsrc/content/caches.fsx index a0a198896c..2f63c4b394 100644 --- a/fcs/docsrc/content/caches.fsx +++ b/fcs/docsrc/content/caches.fsx @@ -9,7 +9,7 @@ This is a design note on the FSharpChecker component and its caches. See also t Each FSharpChecker object maintains a set of caches. These are * ``scriptClosureCache`` - an MRU cache of default size ``projectCacheSize`` that caches the - computation of GetProjectOptionsFromScript. This computation can be lengthy as it can involve processing the transative closure + computation of GetProjectOptionsFromScript. This computation can be lengthy as it can involve processing the transitive closure of all ``#load`` directives, which in turn can mean parsing an unbounded number of script files * ``incrementalBuildersCache`` - an MRU cache of projects where a handle is being kept to their incremental checking state, @@ -50,7 +50,7 @@ The sizes of some of these caches can be adjusted by giving parameters to FSharp the cache sizes above indicate the "strong" size of the cache, where memory is held regardless of the memory pressure on the system. Some of the caches can also hold "weak" references which can be collected at will by the GC. -> Note: Because of these caches, uou should generally use one global, shared FSharpChecker for everything in an IDE application. +> Note: Because of these caches, you should generally use one global, shared FSharpChecker for everything in an IDE application. Low-Memory Condition diff --git a/fcs/docsrc/content/compiler.fsx b/fcs/docsrc/content/compiler.fsx index c87f755ed3..a7e5303a06 100644 --- a/fcs/docsrc/content/compiler.fsx +++ b/fcs/docsrc/content/compiler.fsx @@ -85,14 +85,14 @@ is not really an option. You still have to pass the "-o" option to name the output file, but the output file is not actually written to disk. -The 'None' option indicates that the initiatlization code for the assembly is not executed. +The 'None' option indicates that the initialization code for the assembly is not executed. *) let errors2, exitCode2, dynAssembly2 = checker.CompileToDynamicAssembly([| "-o"; fn3; "-a"; fn2 |], execute=None) |> Async.RunSynchronously (* -Passing 'Some' for the 'execute' parameter executes the initiatlization code for the assembly. +Passing 'Some' for the 'execute' parameter executes the initialization code for the assembly. *) let errors3, exitCode3, dynAssembly3 = checker.CompileToDynamicAssembly([| "-o"; fn3; "-a"; fn2 |], Some(stdout,stderr)) diff --git a/fcs/docsrc/content/editor.fsx b/fcs/docsrc/content/editor.fsx index b057e094d4..46ddd882e5 100644 --- a/fcs/docsrc/content/editor.fsx +++ b/fcs/docsrc/content/editor.fsx @@ -160,7 +160,7 @@ list of members of the string value `msg`. To do this, we call `GetDeclarationListInfo` with the location of the `.` symbol on the last line (ending with `printfn "%s" msg.`). The offsets are one-based, so the location is `7, 23`. -We also need to specify a function that says that the text has not changed and the current identifer +We also need to specify a function that says that the text has not changed and the current identifier where we need to perform the completion. *) // Get declarations (autocomplete) for a location diff --git a/fcs/docsrc/content/interactive.fsx b/fcs/docsrc/content/interactive.fsx index 656ae44a69..6226bcbee1 100644 --- a/fcs/docsrc/content/interactive.fsx +++ b/fcs/docsrc/content/interactive.fsx @@ -43,9 +43,9 @@ open System open System.IO open System.Text -// Intialize output and input streams -let sbOut = StringBuilder() -let sbErr = StringBuilder() +// Initialize output and input streams +let sbOut = new StringBuilder() +let sbErr = new StringBuilder() let inStream = new StringReader("") let outStream = new StringWriter(sbOut) let errStream = new StringWriter(sbErr) @@ -121,7 +121,7 @@ result and an exception. The result part of ``EvalExpression`` and ``EvalExpressionNonThrowing`` is an optional ``FSharpValue``. If that value is not present then it just indicates that the expression didn't have a tangible -result that could be represented as a .NET object. This siutation shouldn't actually +result that could be represented as a .NET object. This situation shouldn't actually occur for any normal input expressions, and only for primitives used in libraries. *) @@ -239,7 +239,7 @@ The 'fsi' object ------------------ If you want your scripting code to be able to access the 'fsi' object, you should pass in an implementation of this object explicitly. -Normally the one fromm FSharp.Compiler.Interactive.Settings.dll is used. +Normally the one from FSharp.Compiler.Interactive.Settings.dll is used. *) let fsiConfig2 = FsiEvaluationSession.GetDefaultConfiguration(fsiSession) diff --git a/fcs/docsrc/content/project.fsx b/fcs/docsrc/content/project.fsx index 015563a220..a537000435 100644 --- a/fcs/docsrc/content/project.fsx +++ b/fcs/docsrc/content/project.fsx @@ -314,7 +314,7 @@ F# projects normally use the '.fsproj' project file format. A project cracking facility for legacy old-style .fsproj is provided as a separate NuGet package: FSharp.Compiler.Service.ProjectCracker. -Projecet cracking for modern project files should be done using a library such as DotNetProjInfo. +Project cracking for modern project files should be done using a library such as DotNetProjInfo. See FsAutoComplete for example code. The legacy NuGet package `FSharp.Compiler.Service.ProjectCracker` contains a diff --git a/fcs/docsrc/content/queue.fsx b/fcs/docsrc/content/queue.fsx index ccc7ccabbf..7cf14a7b70 100644 --- a/fcs/docsrc/content/queue.fsx +++ b/fcs/docsrc/content/queue.fsx @@ -36,7 +36,7 @@ These use cross-threaded access to the TAST data produced by other FSharpChecker Some tools throw a lot of interactive work at the FSharpChecker operations queue. If you are writing such a component, consider running your project against a debug build of FSharp.Compiler.Service.dll to see the Trace.WriteInformation messages indicating the length of the -operations queuea and the time to process requests. +operations queue and the time to process requests. For those writing interactive editors which use FCS, you should be cautious about operations that request a check of the entire project. diff --git a/fcs/docsrc/content/react.fsx b/fcs/docsrc/content/react.fsx index ef5ccbf495..be108b92ad 100644 --- a/fcs/docsrc/content/react.fsx +++ b/fcs/docsrc/content/react.fsx @@ -67,7 +67,7 @@ If your host happens to be Visual Studio, then this is one technique you can use ... - // Unadvise file changes... + // Unadvised file changes... Com.ThrowOnFailure0(vsFileWatch.UnadviseFileChange(cookie)) diff --git a/fcs/docsrc/content/symbols.fsx b/fcs/docsrc/content/symbols.fsx index c25f0d1c31..ab6b4657dc 100644 --- a/fcs/docsrc/content/symbols.fsx +++ b/fcs/docsrc/content/symbols.fsx @@ -101,7 +101,7 @@ Now get the value that corresponds to the function defined in the code: let fnVal = moduleEntity.MembersFunctionsAndValues.[0] (** -Now look around at the properties describing the function value. All fo the following evaluate to `true`: +Now look around at the properties describing the function value. All of the following evaluate to `true`: *) fnVal.Attributes.Count = 1 fnVal.CurriedParameterGroups.Count // 1 @@ -178,9 +178,9 @@ for assembly in projectContext.GetReferencedAssemblies() do (** **Notes:** - - If incomplete code is present, some or all of the attirbutes may not be quite as expected. + - If incomplete code is present, some or all of the attributes may not be quite as expected. - If some assembly references are missing (which is actually very, very common), then 'IsUnresolved' may - be true on values, members and/or entites related to external assemblies. You should be sure to make your + be true on values, members and/or entities related to external assemblies. You should be sure to make your code robust against IsUnresolved exceptions. *) diff --git a/fcs/docsrc/content/tokenizer.fsx b/fcs/docsrc/content/tokenizer.fsx index 7a46a3c91f..93a1dd3bf1 100644 --- a/fcs/docsrc/content/tokenizer.fsx +++ b/fcs/docsrc/content/tokenizer.fsx @@ -49,7 +49,7 @@ on the `FSharpSourceTokenizer` object that we created earlier: let tokenizer = sourceTok.CreateLineTokenizer("let answer=42") (** Now, we can write a simple recursive function that calls `ScanToken` on the `tokenizer` -until it returns `None` (indicating the end of line). When the function suceeds, it +until it returns `None` (indicating the end of line). When the function succeeds, it returns `FSharpTokenInfo` object with all the interesting details: *) /// Tokenize a single line of F# code diff --git a/fcs/docsrc/content/untypedtree.fsx b/fcs/docsrc/content/untypedtree.fsx index 3cb4e80765..162fedfa19 100644 --- a/fcs/docsrc/content/untypedtree.fsx +++ b/fcs/docsrc/content/untypedtree.fsx @@ -155,7 +155,7 @@ be another source of calls to `visitExpression`. ### Walking over declarations As mentioned earlier, the AST of a file contains a number of module or namespace declarations -(top-level node) that contain declarations inside a module (let bindings or types) or inisde +(top-level node) that contain declarations inside a module (let bindings or types) or inside a namespace (just types). The following functions walks over declarations - we ignore types, nested modules and all other elements and look only at top-level `let` bindings (values and functions): From d9c253aae03548bf7822719a37b62c265e540965 Mon Sep 17 00:00:00 2001 From: Don Syme Date: Tue, 3 Sep 2019 17:30:16 +0100 Subject: [PATCH 051/146] cleanup cvtres.fs (#7476) --- src/absil/cvtres.fs | 224 +++++++++++++++++++++++--------------------- 1 file changed, 115 insertions(+), 109 deletions(-) diff --git a/src/absil/cvtres.fs b/src/absil/cvtres.fs index 0f03a51328..aed18b0364 100644 --- a/src/absil/cvtres.fs +++ b/src/absil/cvtres.fs @@ -27,17 +27,13 @@ open Checked // make sure stuff works properly open System.Reflection.PortableExecutable -type ResourceException(name : string, ?inner : Exception) = - inherit Exception(name, defaultArg inner null) - //ew(name : string, ?inner : Exception) as this = - // (ResourceException ()) - // then - // let inner = (defaultArg inner) Unchecked.defaultof<_> - // () +type ResourceException(name: string, ?inner: Exception) = + inherit Exception(name, Option.toObj inner) type RESOURCE_STRING() = member val Ordinal = Unchecked.defaultof with get, set member val theString = Unchecked.defaultof with get, set + type RESOURCE() = member val pstringType = Unchecked.defaultof with get, set member val pstringName = Unchecked.defaultof with get, set @@ -49,6 +45,7 @@ type RESOURCE() = member val Version = Unchecked.defaultof with get, set member val Characteristics = Unchecked.defaultof with get, set member val data = Unchecked.defaultof with get, set + type CvtResFile() = static member val private RT_DLGINCLUDE = 17 with get, set static member ReadResFile(stream : Stream) = @@ -58,16 +55,15 @@ type CvtResFile() = if not (reader.PeekChar() = -1) then let mutable startPos = stream.Position let mutable initial32Bits = reader.ReadUInt32 () - if initial32Bits <> uint32 0 - then raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") + if initial32Bits <> uint32 0 then + raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") stream.Position <- startPos while (stream.Position < stream.Length) do let mutable cbData = reader.ReadUInt32 () let mutable cbHdr = reader.ReadUInt32 () - if cbHdr < 2u * uint32 sizeof - then raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) - if cbData = 0u - then + if cbHdr < 2u * uint32 sizeof then + raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) + if cbData = 0u then stream.Position <- stream.Position + int64 cbHdr - 2L * int64 sizeof else let mutable pAdditional = RESOURCE() @@ -84,15 +80,17 @@ type CvtResFile() = pAdditional.data <- Array.zeroCreate (int pAdditional.DataSize) reader.Read (pAdditional.data, 0, pAdditional.data.Length) |> ignore stream.Position <- stream.Position + 3L &&& ~~~3L - if pAdditional.pstringType.theString = Unchecked.defaultof<_> && (pAdditional.pstringType.Ordinal = uint16 CvtResFile.RT_DLGINCLUDE) - then () (* ERROR ContinueNotSupported *) - else resourceNames.Add (pAdditional) + if pAdditional.pstringType.theString = Unchecked.defaultof<_> && (pAdditional.pstringType.Ordinal = uint16 CvtResFile.RT_DLGINCLUDE) then + () (* ERROR ContinueNotSupported *) + else + resourceNames.Add (pAdditional) resourceNames + static member private ReadStringOrID(fhIn : BinaryReader) = let mutable (pstring : RESOURCE_STRING) = RESOURCE_STRING() let mutable (firstWord : WCHAR) = (fhIn.ReadChar ()) - if int firstWord = 0xFFFF - then pstring.Ordinal <- fhIn.ReadUInt16 () + if int firstWord = 0xFFFF then + pstring.Ordinal <- fhIn.ReadUInt16 () else pstring.Ordinal <- uint16 0xFFFF let mutable (sb : StringBuilder) = StringBuilder() @@ -103,7 +101,6 @@ type CvtResFile() = pstring.theString <- sb.ToString () pstring - [] type SectionCharacteristics = | TypeReg = 0u @@ -165,8 +162,10 @@ type ResourceSection() = member val Relocations = Unchecked.defaultof with get,set open System.Runtime.CompilerServices + [] type StreamExtensions () = + [] static member TryReadAll(stream : Stream, buffer : byte[], offset : int, count : int) = Debug.Assert (count > 0) @@ -177,33 +176,32 @@ type StreamExtensions () = totalBytesRead <- 0 while totalBytesRead < count && not isFinished do bytesRead <- stream.Read (buffer, (offset + totalBytesRead), (count - totalBytesRead)) - if bytesRead = 0 - then isFinished <- true // break; + if bytesRead = 0 then + isFinished <- true // break; else totalBytesRead <- totalBytesRead + bytesRead totalBytesRead type COFFResourceReader() = + static member private ConfirmSectionValues(hdr : SectionHeader, fileSize : System.Int64) = - if int64 hdr.PointerToRawData + int64 hdr.SizeOfRawData > fileSize - then raise <| ResourceException("CoffResourceInvalidSectionSize") - () + if int64 hdr.PointerToRawData + int64 hdr.SizeOfRawData > fileSize then + raise <| ResourceException("CoffResourceInvalidSectionSize") + static member ReadWin32ResourcesFromCOFF(stream : Stream) = let mutable peHeaders = new PEHeaders(stream) let mutable rsrc1 = SectionHeader() let mutable rsrc2 = SectionHeader() let mutable (foundCount : int) = 0 for sectionHeader in peHeaders.SectionHeaders do - if sectionHeader.Name = ".rsrc$01" - then + if sectionHeader.Name = ".rsrc$01" then rsrc1 <- sectionHeader foundCount <- foundCount + 1 else - if sectionHeader.Name = ".rsrc$02" - then + if sectionHeader.Name = ".rsrc$02" then rsrc2 <- sectionHeader foundCount <- foundCount + 1 - if foundCount <> 2 - then raise <| ResourceException("CoffResourceMissingSection") + if foundCount <> 2 then + raise <| ResourceException("CoffResourceMissingSection") COFFResourceReader.ConfirmSectionValues (rsrc1, stream.Length) COFFResourceReader.ConfirmSectionValues (rsrc2, stream.Length) let mutable imageResourceSectionBytes = Array.zeroCreate (rsrc1.SizeOfRawData + rsrc2.SizeOfRawData) @@ -214,8 +212,8 @@ type COFFResourceReader() = let mutable (SizeOfRelocationEntry : int) = 10 try let mutable relocLastAddress = rsrc1.PointerToRelocations + (int rsrc1.NumberOfRelocations * SizeOfRelocationEntry) - if int64 relocLastAddress > stream.Length - then raise <| ResourceException("CoffResourceInvalidRelocation") + if int64 relocLastAddress > stream.Length then + raise <| ResourceException("CoffResourceInvalidRelocation") with :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidRelocation")) let mutable relocationOffsets = Array.zeroCreate (int rsrc1.NumberOfRelocations) @@ -233,8 +231,8 @@ type COFFResourceReader() = let mutable (ImageSizeOfSymbol : System.UInt32) = 18u try let mutable lastSymAddress = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 peHeaders.CoffHeader.NumberOfSymbols * int64 ImageSizeOfSymbol (* ERROR UnknownNode *) - if lastSymAddress > stream.Length - then raise <| ResourceException("CoffResourceInvalidSymbol") + if lastSymAddress > stream.Length then + raise <| ResourceException("CoffResourceInvalidSymbol") with :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidSymbol")) let mutable outputStream = new MemoryStream(imageResourceSectionBytes) @@ -242,8 +240,8 @@ type COFFResourceReader() = do let mutable (i : int) = 0 while (i < relocationSymbolIndices.Length) do - if int relocationSymbolIndices.[i] > peHeaders.CoffHeader.NumberOfSymbols - then raise <| ResourceException("CoffResourceInvalidRelocation") + if int relocationSymbolIndices.[i] > peHeaders.CoffHeader.NumberOfSymbols then + raise <| ResourceException("CoffResourceInvalidRelocation") let mutable offsetOfSymbol = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 relocationSymbolIndices.[i] * int64 ImageSizeOfSymbol stream.Position <- offsetOfSymbol stream.Position <- stream.Position + 8L @@ -251,27 +249,27 @@ type COFFResourceReader() = let mutable symSection = reader.ReadInt16 () let mutable symType = reader.ReadUInt16 () let mutable (IMAGE_SYM_TYPE_NULL : System.UInt16) = uint16 0x0000 - if symType <> IMAGE_SYM_TYPE_NULL || symSection <> 3s - then raise <| ResourceException("CoffResourceInvalidSymbol") + if symType <> IMAGE_SYM_TYPE_NULL || symSection <> 3s then + raise <| ResourceException("CoffResourceInvalidSymbol") outputStream.Position <- int64 relocationOffsets.[i] writer.Write (uint32 (int64 symValue + int64 rsrc1.SizeOfRawData)) i <- i + 1 ResourceSection(imageResourceSectionBytes, relocationOffsets) +[] type ICONDIRENTRY = - struct - val mutable bWidth: BYTE - val mutable bHeight: BYTE - val mutable bColorCount: BYTE - val mutable bReserved: BYTE - val mutable wPlanes: WORD - val mutable wBitCount: WORD - val mutable dwBytesInRes: DWORD - val mutable dwImageOffset: DWORD - end + val mutable bWidth: BYTE + val mutable bHeight: BYTE + val mutable bColorCount: BYTE + val mutable bReserved: BYTE + val mutable wPlanes: WORD + val mutable wBitCount: WORD + val mutable dwBytesInRes: DWORD + val mutable dwImageOffset: DWORD type VersionHelper() = + /// /// Parses a version string of the form "major [ '.' minor [ '.' build [ '.' revision ] ] ]". /// @@ -280,6 +278,7 @@ type VersionHelper() = /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. static member TryParse(s : string, [] version : byref) = VersionHelper.TryParse (s, false, UInt16.MaxValue, true, ref version) + /// /// Parses a version string of the form "major [ '.' minor [ '.' ( '*' | ( build [ '.' ( '*' | revision ) ] ) ) ] ]" /// as accepted by System.Reflection.AssemblyVersionAttribute. @@ -296,6 +295,7 @@ type VersionHelper() = VersionHelper.TryParse (s, allowWildcard, (UInt16.MaxValue - 1us), false, ref version) static member private NullVersion = new Version(0, 0, 0, 0) + /// /// Parses a version string of the form "major [ '.' minor [ '.' ( '*' | ( build [ '.' ( '*' | revision ) ] ) ) ] ]" /// as accepted by System.Reflection.AssemblyVersionAttribute. @@ -311,22 +311,20 @@ type VersionHelper() = /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. static member private TryParse(s : string, allowWildcard : System.Boolean, maxValue : System.UInt16, allowPartialParse : System.Boolean, [] version : byref) = Debug.Assert (not allowWildcard || maxValue < UInt16.MaxValue) - if String.IsNullOrWhiteSpace (s) - then + if String.IsNullOrWhiteSpace (s) then version <- VersionHelper.NullVersion false else let mutable (elements : string[]) = s.Split ('.') let mutable (hasWildcard : System.Boolean) = allowWildcard && elements.[(int (elements.Length - 1))] = "*" - if hasWildcard && elements.Length < 3 || elements.Length > 4 - then + if hasWildcard && elements.Length < 3 || elements.Length > 4 then version <- VersionHelper.NullVersion false else let mutable (values : uint16[]) = Array.zeroCreate 4 let mutable (lastExplicitValue : int) = - if hasWildcard - then elements.Length - 1 + if hasWildcard then + elements.Length - 1 else elements.Length let mutable (parseError : System.Boolean) = false let mutable earlyReturn = None @@ -334,22 +332,18 @@ type VersionHelper() = let mutable (i : int) = 0 let mutable breakLoop = false while (i < lastExplicitValue) && not breakLoop do - if not (UInt16.TryParse (elements.[i], System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref values.[i])) || values.[i] > maxValue - then - if not allowPartialParse - then + if not (UInt16.TryParse (elements.[i], System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref values.[i])) || values.[i] > maxValue then + if not allowPartialParse then earlyReturn <- Some false breakLoop <- true version <- VersionHelper.NullVersion else parseError <- true - if String.IsNullOrWhiteSpace (elements.[i]) - then + if String.IsNullOrWhiteSpace (elements.[i]) then values.[i] <- 0us breakLoop <- true else - if values.[i] > maxValue - then + if values.[i] > maxValue then values.[i] <- 0us breakLoop <- true else @@ -359,18 +353,15 @@ type VersionHelper() = let mutable idx = 0 let mutable breakLoop = false while (idx < elements.[i].Length) && not breakLoop do - if not (Char.IsDigit (elements.[i].[idx])) - then + if not (Char.IsDigit (elements.[i].[idx])) then invalidFormat <- true VersionHelper.TryGetValue ((elements.[i].Substring (0, idx)), ref values.[i]) |> ignore breakLoop <- true else idx <- idx + 1 let mutable doBreak = true - if not invalidFormat - then - if VersionHelper.TryGetValue (elements.[i], ref values.[i]) - then + if not invalidFormat then + if VersionHelper.TryGetValue (elements.[i], ref values.[i]) then //For this scenario the old compiler would continue processing the remaining version elements //so continue processing doBreak <- false @@ -378,8 +369,7 @@ type VersionHelper() = (* ERROR BreakNotSupported *) if not breakLoop then i <- i + 1 - if hasWildcard - then + if hasWildcard then do let mutable (i : int) = lastExplicitValue while (i < values.Length) do @@ -387,29 +377,29 @@ type VersionHelper() = i <- i + 1 version <- new Version(int values.[0], int values.[1], int values.[2], int values.[3]) not parseError + static member private TryGetValue(s : string, [] value : byref) : bool = let mutable (number : System.Numerics.BigInteger) = Unchecked.defaultof - if System.Numerics.BigInteger.TryParse (s, System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref number) - then + if System.Numerics.BigInteger.TryParse (s, System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref number) then value <- uint16 (number % bigint 65536) true else value <- 0us false + static member GenerateVersionFromPatternAndCurrentTime(time : DateTime, pattern : Version) = - if pattern = Unchecked.defaultof<_> || pattern.Revision <> int UInt16.MaxValue - then pattern + if pattern = Unchecked.defaultof<_> || pattern.Revision <> int UInt16.MaxValue then + pattern else let mutable time = time // MSDN doc on the attribute: // "The default build number increments daily. The default revision number is the number of seconds since midnight local time // (without taking into account time zone adjustments for daylight saving time), divided by 2." - if time = Unchecked.defaultof - then time <- DateTime.Now + if time = Unchecked.defaultof then + time <- DateTime.Now let mutable (revision : int) = int time.TimeOfDay.TotalSeconds / 2 Debug.Assert (revision < int UInt16.MaxValue) - if pattern.Build = int UInt16.MaxValue - then + if pattern.Build = int UInt16.MaxValue then let mutable (days : TimeSpan) = time.Date - new DateTime(2000, 1, 1) let mutable (build : int) = Math.Min (int UInt16.MaxValue, (int days.TotalDays)) new Version(pattern.Major, pattern.Minor, int (uint16 build), int (uint16 revision)) @@ -435,6 +425,7 @@ type VersionResourceSerializer() = static member val private CP_WINUNICODE = 1200u static member val private sizeVS_FIXEDFILEINFO = uint16 (sizeof * 13) member val private _isDll = Unchecked.defaultof with get, set + new(isDll : System.Boolean, comments : string, companyName : string, fileDescription : string, fileVersion : string, internalName : string, legalCopyright : string, legalTrademark : string, originalFileName : string, productName : string, productVersion : string, assemblyVersion : Version) as this = (VersionResourceSerializer ()) then @@ -451,35 +442,39 @@ type VersionResourceSerializer() = this._productVersionContents <- productVersion this._assemblyVersionContents <- assemblyVersion this._langIdAndCodePageKey <- System.String.Format ("{0:x4}{1:x4}", 0, VersionResourceSerializer.CP_WINUNICODE) + static member val private VFT_APP = 0x00000001u static member val private VFT_DLL = 0x00000002u + member private this.GetVerStrings() = seq { - if this._commentsContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("Comments", this._commentsContents) - if this._companyNameContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("CompanyName", this._companyNameContents) - if this._fileDescriptionContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("FileDescription", this._fileDescriptionContents) + if this._commentsContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("Comments", this._commentsContents) + if this._companyNameContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("CompanyName", this._companyNameContents) + if this._fileDescriptionContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("FileDescription", this._fileDescriptionContents) yield KeyValuePair<_,_>("FileVersion", this._fileVersionContents) - if this._internalNameContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("InternalName", this._internalNameContents) - if this._legalCopyrightContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("LegalCopyright", this._legalCopyrightContents) - if this._legalTrademarksContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("LegalTrademarks", this._legalTrademarksContents) - if this._originalFileNameContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("OriginalFilename", this._originalFileNameContents) - if this._productNameContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("ProductName", this._productNameContents) + if this._internalNameContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("InternalName", this._internalNameContents) + if this._legalCopyrightContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("LegalCopyright", this._legalCopyrightContents) + if this._legalTrademarksContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("LegalTrademarks", this._legalTrademarksContents) + if this._originalFileNameContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("OriginalFilename", this._originalFileNameContents) + if this._productNameContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("ProductName", this._productNameContents) yield KeyValuePair<_,_>("ProductVersion", this._fileVersionContents) - if this._assemblyVersionContents <> Unchecked.defaultof<_> - then yield KeyValuePair<_,_>("Assembly Version", this._assemblyVersionContents.ToString()) + if this._assemblyVersionContents <> Unchecked.defaultof<_> then + yield KeyValuePair<_,_>("Assembly Version", this._assemblyVersionContents.ToString()) } - member private this.FileType - with get() : uint32 = - if this._isDll - then VersionResourceSerializer.VFT_DLL - else VersionResourceSerializer.VFT_APP + + member private this.FileType : uint32 = + if this._isDll then + VersionResourceSerializer.VFT_DLL + else + VersionResourceSerializer.VFT_APP + member private this.WriteVSFixedFileInfo(writer : BinaryWriter) = let mutable (fileVersion : Version) = Unchecked.defaultof VersionHelper.TryParse (this._fileVersionContents, ref fileVersion) |> ignore @@ -498,17 +493,22 @@ type VersionResourceSerializer() = writer.Write (0u) writer.Write (0u) writer.Write (0u) + static member private PadKeyLen(cb : int) = VersionResourceSerializer.PadToDword (cb + 3 * sizeof) - 3 * sizeof + static member private PadToDword(cb : int) = cb + 3 &&& ~~~3 + static member val private HDRSIZE = (int (3 * sizeof)) with get, set + static member private SizeofVerString(lpszKey : string, lpszValue : string) = let mutable (cbKey : int) = Unchecked.defaultof let mutable (cbValue : int) = Unchecked.defaultof cbKey <- lpszKey.Length + 1 * 2 cbValue <- lpszValue.Length + 1 * 2 VersionResourceSerializer.PadKeyLen(cbKey) + cbValue + VersionResourceSerializer.HDRSIZE + static member private WriteVersionString(keyValuePair : KeyValuePair, writer : BinaryWriter) = System.Diagnostics.Debug.Assert (keyValuePair.Value <> Unchecked.defaultof<_>) let mutable (cbBlock : System.UInt16) = uint16 <| VersionResourceSerializer.SizeofVerString (keyValuePair.Key, keyValuePair.Value) @@ -526,16 +526,20 @@ type VersionResourceSerializer() = writer.Write (keyValuePair.Value.ToCharArray ()) writer.Write (uint16 0) // (WORD)'\0' System.Diagnostics.Debug.Assert (int64 cbBlock = writer.BaseStream.Position - startPos) + static member private KEYSIZE(sz : string) = VersionResourceSerializer.PadKeyLen (sz.Length + 1 * sizeof) / sizeof + static member private KEYBYTES(sz : string) = VersionResourceSerializer.KEYSIZE (sz) * sizeof + member private this.GetStringsSize() = let mutable (sum : int) = 0 for verString in this.GetVerStrings () do sum <- sum + 3 &&& ~~~3 sum <- sum + VersionResourceSerializer.SizeofVerString (verString.Key, verString.Value) sum + member this.GetDataSize() = let mutable (sizeEXEVERRESOURCE : int) = sizeof * 3 * 5 + 2 * sizeof + @@ -546,6 +550,7 @@ type VersionResourceSerializer() = VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + int VersionResourceSerializer.sizeVS_FIXEDFILEINFO this.GetStringsSize () + sizeEXEVERRESOURCE + member this.WriteVerResource(writer : BinaryWriter) = let mutable debugPos = writer.BaseStream.Position let mutable dataSize = this.GetDataSize () @@ -596,14 +601,14 @@ type Win32ResourceConversions() = static member AppendIconToResourceStream(resStream : Stream, iconStream : Stream) = let mutable iconReader = new BinaryReader(iconStream) let mutable reserved = iconReader.ReadUInt16 () - if reserved <> 0us - then raise <| ResourceException("IconStreamUnexpectedFormat") + if reserved <> 0us then + raise <| ResourceException("IconStreamUnexpectedFormat") let mutable ``type`` = iconReader.ReadUInt16 () - if ``type`` <> 1us - then raise <| ResourceException("IconStreamUnexpectedFormat") + if ``type`` <> 1us then + raise <| ResourceException("IconStreamUnexpectedFormat") let mutable count = iconReader.ReadUInt16 () - if count = 0us - then raise <| ResourceException("IconStreamUnexpectedFormat") + if count = 0us then + raise <| ResourceException("IconStreamUnexpectedFormat") let mutable iconDirEntries : ICONDIRENTRY [] = Array.zeroCreate (int count) do let mutable (i : System.UInt16) = 0us @@ -622,8 +627,7 @@ type Win32ResourceConversions() = let mutable (i : System.UInt16) = 0us while (i < count) do iconStream.Position <- int64 iconDirEntries.[(int i)].dwImageOffset - if iconReader.ReadUInt32 () = 40u - then + if iconReader.ReadUInt32 () = 40u then iconStream.Position <- iconStream.Position + 8L iconDirEntries.[(int i)].wPlanes <- iconReader.ReadUInt16 () iconDirEntries.[(int i)].wBitCount <- iconReader.ReadUInt16 () @@ -679,6 +683,7 @@ type Win32ResourceConversions() = resWriter.Write ((i + 1us)) i <- i + 1us () + static member AppendVersionToResourceStream(resStream : Stream, isDll : System.Boolean, fileVersion : string, originalFileName : string, internalName : string, productVersion : string, assemblyVersion : Version, ?fileDescription : string, ?legalCopyright : string, ?legalTrademarks : string, ?productName : string, ?comments : string, ?companyName : string) = let fileDescription = (defaultArg fileDescription) " " let legalCopyright = (defaultArg legalCopyright) " " @@ -706,6 +711,7 @@ type Win32ResourceConversions() = resWriter.Write (0x00000000u) ver.WriteVerResource (resWriter) System.Diagnostics.Debug.Assert (resStream.Position - startPos = int64 dataSize + int64 headerSize) + static member AppendManifestToResourceStream(resStream : Stream, manifestStream : Stream, isDll : System.Boolean) = resStream.Position <- resStream.Position + 3L &&& ~~~3L (* ERROR UnknownPrefixOperator "~" *) let mutable (RT_MANIFEST : WORD) = 24us From aa270fc874c2935c4ac3056103ca2758d9252854 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 3 Sep 2019 11:59:06 -0700 Subject: [PATCH 052/146] Allow resource text to work with %x format strings (#7474) --- .../FSharp.Build/FSharpEmbedResourceText.fs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs index a40017edf5..f0fd45b486 100644 --- a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs +++ b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs @@ -155,20 +155,23 @@ type FSharpEmbedResourceText() = let mutable holes = ResizeArray() // order let sb = new System.Text.StringBuilder() let AddHole holeType = - sb.Append(sprintf "{%d}" holeNumber) |> ignore + match holeType with + | "System.UInt32" -> sb.Append(sprintf "{%d:x}" holeNumber) |> ignore + | _ -> sb.Append(sprintf "{%d}" holeNumber) |> ignore holeNumber <- holeNumber + 1 holes.Add(holeType) while i < txt.Length do if txt.[i] = '%' then if i+1 = txt.Length then - Err(filename, lineNum, "(at end of string) % must be followed by d, f, s, or %") + Err(filename, lineNum, "(at end of string) % must be followed by d, x, f, s, or %") else match txt.[i+1] with | 'd' -> AddHole "System.Int32" + | 'x' -> AddHole "System.UInt32" | 'f' -> AddHole "System.Double" | 's' -> AddHole "System.String" | '%' -> sb.Append('%') |> ignore - | c -> Err(filename, lineNum, sprintf "'%%%c' is not a valid sequence, only %%d %%f %%s or %%%%" c) + | c -> Err(filename, lineNum, sprintf "'%%%c' is not a valid sequence, only %%d %%x %%f %%s or %%%%" c) i <- i + 2 else match txt.[i] with @@ -279,6 +282,7 @@ open Printf match fmt.[i] with | '%' -> go args ty (i+1) | 'd' + | 'x' | 'f' | 's' -> buildFunctionForOneArgPat ty (fun rty n -> go (n :: args) rty (i+1)) | _ -> failwith ""bad format specifier"" @@ -406,10 +410,11 @@ open Printf fprintfn out " /// %s" str fprintfn out " /// (Originally from %s:%d)" filename (lineNum+1) let justPercentsFromFormatString = - (holes |> Array.fold (fun acc holeType -> - acc + match holeType with - | "System.Int32" -> ",,,%d" - | "System.Double" -> ",,,%f" + (holes |> Array.fold (fun acc holeType -> + acc + match holeType with + | "System.Int32" -> ",,,%d" + | "System.UInt32" -> ",,,%x" + | "System.Double" -> ",,,%f" | "System.String" -> ",,,%s" | _ -> failwith "unreachable") "") + ",,," let errPrefix = match optErrNum with From edf434b6e81dd6cdc1adba25f202b47b9a3daeb6 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 3 Sep 2019 14:42:00 -0700 Subject: [PATCH 053/146] turn off broken source link validation (#7479) --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 53288c73d3..226d4e1194 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -330,3 +330,5 @@ stages: parameters: # Symbol validation is not entirely reliable as of yet, so should be turned off until https://github.com/dotnet/arcade/issues/2871 is resolved. enableSymbolValidation: false + # SourceLink improperly looks for generated files. See https://github.com/dotnet/arcade/issues/3069 + enableSourceLinkValidation: false From 321296bd2413279a53250f840be9932c20fa6457 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 3 Sep 2019 17:48:07 -0700 Subject: [PATCH 054/146] --standalone type forwarding (#7462) * Add type forwarding to static linker * Type forward using simple matches when required * Fix native resource issue with emptry streams * reduce churn * Use typeref morpher --- src/fsharp/fsc.fs | 93 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 12 deletions(-) diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 7799d409e5..3ea3849026 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -34,8 +34,8 @@ open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.IlxGen +open FSharp.Compiler.IlxGen open FSharp.Compiler.AccessibilityLogic open FSharp.Compiler.AttributeChecking open FSharp.Compiler.Ast @@ -1109,13 +1109,80 @@ module MainModuleBuilder = //---------------------------------------------------------------------------- /// Optional static linking of all DLLs that depend on the F# Library, plus other specified DLLs -module StaticLinker = +module StaticLinker = + + open FSharp.Compiler.AbstractIL + + // Handles TypeForwarding for the generated IL model + type TypeForwarding (tcImports: TcImports) = + + // Make a dictionary of ccus passed to the compiler will be looked up by qualified assembly name + let ccuThunksQualifiedName = + tcImports.GetCcusInDeclOrder() + |> List.filter(fun ccuThunk -> ccuThunk.QualifiedName |> Option.isSome) + |> List.map(fun ccuThunk -> ccuThunk.QualifiedName |> Option.defaultValue "Assembly Name Not Passed", ccuThunk) + |> dict + + // If we can't type forward using exact assembly match, we need to rely on the loader (Policy, Configuration or the coreclr load heuristics), so use try simple name + let ccuThunksSimpleName = + tcImports.GetCcusInDeclOrder() + |> List.filter(fun ccuThunk -> not (String.IsNullOrEmpty(ccuThunk.AssemblyName))) + |> List.map(fun ccuThunk -> ccuThunk.AssemblyName, ccuThunk) + |> dict + + let followTypeForwardForILTypeRef (tref:ILTypeRef) = + let typename = + let parts = tref.FullName.Split([|'.'|]) + match parts.Length with + | 0 -> None + | 1 -> Some (Array.empty, parts.[0]) + | n -> Some (parts.[0..n-2], parts.[n-1]) + + let scoref = tref.Scope + match scoref with + | ILScopeRef.Assembly scope -> + match ccuThunksQualifiedName.TryGetValue(scope.QualifiedName) with + | true, ccu -> + match typename with + | Some (parts, name) -> + let forwarded = ccu.TryForward(parts, name) + let result = + match forwarded with + | Some fwd -> fwd.CompilationPath.ILScopeRef + | None -> scoref + result + | None -> scoref + | false, _ -> + // Couldn't find an assembly with the version so try using a simple name + match ccuThunksSimpleName.TryGetValue(scope.Name) with + | true, ccu -> + match typename with + | Some (parts, name) -> + let forwarded = ccu.TryForward(parts, name) + let result = + match forwarded with + | Some fwd -> fwd.CompilationPath.ILScopeRef + | None -> scoref + result + | None -> scoref + | false, _ -> scoref + | _ -> scoref + + let typeForwardILTypeRef (tref: ILTypeRef) = + let scoref1 = tref.Scope + let scoref2 = followTypeForwardForILTypeRef tref + if scoref1 === scoref2 then tref + else ILTypeRef.Create (scoref2, tref.Enclosing, tref.Name) + + member __.TypeForwardILTypeRef tref = typeForwardILTypeRef tref + let debugStaticLinking = condition "FSHARP_DEBUG_STATIC_LINKING" - let StaticLinkILModules (tcConfig, ilGlobals, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = + let StaticLinkILModules (tcConfig:TcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules: (CcuThunk option * ILModuleDef) list) = if isNil dependentILModules then ilxMainModule, (fun x -> x) else + let typeForwarding = new TypeForwarding(tcImports) // Check no dependent assemblies use quotations let dependentCcuUsingQuotations = dependentILModules |> List.tryPick (function (Some ccu, _) when ccu.UsesFSharp20PlusQuotations -> Some ccu | _ -> None) @@ -1201,13 +1268,15 @@ module StaticLinker = (mkILMethods (topTypeDefs |> List.collect (fun td -> td.Methods.AsList)), mkILFields (topTypeDefs |> List.collect (fun td -> td.Fields.AsList))) - let ilxMainModule = - { ilxMainModule with - Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs (m.CustomAttrs.AsList @ savedManifestAttrs)) }) - CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs [ for m in moduls do yield! m.CustomAttrs.AsArray ]) - TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs) - Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList) - NativeResources = savedNativeResources } + let ilxMainModule = + let main = + { ilxMainModule with + Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs (m.CustomAttrs.AsList @ savedManifestAttrs)) }) + CustomAttrsStored = storeILCustomAttrs (mkILCustomAttrs [ for m in moduls do yield! m.CustomAttrs.AsArray ]) + TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs) + Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList) + NativeResources = savedNativeResources } + Morphs.morphILTypeRefsInILModuleMemoized ilGlobals typeForwarding.TypeForwardILTypeRef main ilxMainModule, rewriteExternalRefsToLocalRefs @@ -1578,8 +1647,8 @@ module StaticLinker = // Glue all this stuff into ilxMainModule let ilxMainModule, rewriteExternalRefsToLocalRefs = - StaticLinkILModules (tcConfig, ilGlobals, ilxMainModule, dependentILModules @ providerGeneratedILModules) - + StaticLinkILModules (tcConfig, ilGlobals, tcImports, ilxMainModule, dependentILModules @ providerGeneratedILModules) + // Rewrite type and assembly references let ilxMainModule = let isMscorlib = ilGlobals.primaryAssemblyName = PrimaryAssembly.Mscorlib.Name From b651877c763cce9474d55f1b72caa69425dbfe94 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 4 Sep 2019 10:20:07 -0700 Subject: [PATCH 055/146] Remove FX_NO_LINKED_RESOURCES (#7480) --- FSharp.Profiles.props | 1 - .../FSharp.Compiler.Service.fsproj | 15 +- src/absil/{cvtres.fs => ilnativeres.fs} | 501 ++++++++++++------ src/absil/{cvtres.fsi => ilnativeres.fsi} | 31 +- src/absil/ilsupp.fs | 195 +------ src/absil/ilsupp.fsi | 4 +- src/absil/ilwrite.fs | 19 +- src/absil/writenativeres.fs | 192 ------- src/absil/writenativeres.fsi | 34 -- src/fsharp/DotNetFrameworkDependencies.fs | 5 +- src/fsharp/FSComp.txt | 2 + .../FSharp.Build/FSharpEmbedResourceText.fs | 4 +- .../FSharp.Compiler.Private.fsproj | 14 +- src/fsharp/fsc.fs | 7 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 10 + src/fsharp/xlf/FSComp.txt.de.xlf | 10 + src/fsharp/xlf/FSComp.txt.es.xlf | 10 + src/fsharp/xlf/FSComp.txt.fr.xlf | 10 + src/fsharp/xlf/FSComp.txt.it.xlf | 10 + src/fsharp/xlf/FSComp.txt.ja.xlf | 10 + src/fsharp/xlf/FSComp.txt.ko.xlf | 10 + src/fsharp/xlf/FSComp.txt.pl.xlf | 10 + src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 10 + src/fsharp/xlf/FSComp.txt.ru.xlf | 10 + src/fsharp/xlf/FSComp.txt.tr.xlf | 10 + src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 10 + src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 10 + .../Utils/LanguageServiceProfiling/Options.fs | 6 +- 28 files changed, 538 insertions(+), 622 deletions(-) rename src/absil/{cvtres.fs => ilnativeres.fs} (62%) rename src/absil/{cvtres.fsi => ilnativeres.fsi} (56%) delete mode 100644 src/absil/writenativeres.fs delete mode 100644 src/absil/writenativeres.fsi diff --git a/FSharp.Profiles.props b/FSharp.Profiles.props index 534ba96c04..bee528e0c2 100644 --- a/FSharp.Profiles.props +++ b/FSharp.Profiles.props @@ -20,7 +20,6 @@ $(DefineConstants);FX_NO_CORHOST_SIGNER $(DefineConstants);FX_NO_EVENTWAITHANDLE_IDISPOSABLE $(DefineConstants);FX_NO_EXIT_CONTEXT_FLAGS - $(DefineConstants);FX_NO_LINKEDRESOURCES $(DefineConstants);FX_NO_PARAMETERIZED_THREAD_START $(DefineConstants);FX_NO_PDB_READER $(DefineConstants);FX_NO_PDB_WRITER diff --git a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj index 2fda400f4b..1c258ad308 100644 --- a/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj +++ b/fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj @@ -32,7 +32,6 @@ $(DefineConstants);FX_NO_PDB_READER $(DefineConstants);FX_NO_PDB_WRITER $(DefineConstants);FX_NO_SYMBOLSTORE - $(DefineConstants);FX_NO_LINKEDRESOURCES $(DefineConstants);FX_NO_APP_DOMAINS $(DefineConstants);FX_NO_RUNTIMEENVIRONMENT $(DefineConstants);FX_NO_WIN_REGISTRY @@ -225,17 +224,11 @@ - - AbsIL/writenativeres.fsi + + AbsIL/ilnativeres.fsi - - AbsIL/writenativeres.fs - - - AbsIL/cvtres.fsi - - - AbsIL/cvtres.fs + + AbsIL/ilnativeres.fs AbsIL/ilsupp.fsi diff --git a/src/absil/cvtres.fs b/src/absil/ilnativeres.fs similarity index 62% rename from src/absil/cvtres.fs rename to src/absil/ilnativeres.fs index aed18b0364..7b54df1e6f 100644 --- a/src/absil/cvtres.fs +++ b/src/absil/ilnativeres.fs @@ -1,40 +1,40 @@ -// Quite literal port of https://github.com/dotnet/roslyn/blob/d36121da4b527ee0617e4b0940b9d0b17b584470/src/Compilers/Core/Portable/CvtRes.cs -// And its dependencies (some classes) -module internal FSharp.Compiler.AbstractIL.Internal.CVTres +// Quite literal port of : +// https://github.com/dotnet/roslyn/blob/fab7134296816fc80019c60b0f5bef7400cf23ea/src/Compilers/Core/Portable/PEWriter/NativeResourceWriter.cs +// And https://github.com/dotnet/roslyn/blob/d36121da4b527ee0617e4b0940b9d0b17b584470/src/Compilers/Core/Portable/CvtRes.cs +// And their dependencies (some classes) + +module internal FSharp.Compiler.AbstractIL.Internal.NativeRes open System open System.Collections.Generic +open System.Diagnostics open System.IO open System.Linq +open System.Reflection.Metadata +open System.Reflection.PortableExecutable +open System.Runtime.CompilerServices open System.Text -open System.Diagnostics + +open Checked type BYTE = System.Byte type DWORD = System.UInt32 type WCHAR = System.Char type WORD = System.UInt16 -module CONVHELPER = - let inline WORD s = uint16 s - let inline DWORD s = uint32 s - let inline WCHAR s = char s - let inline BYTE s = byte s - -open CONVHELPER - -open Checked // make sure stuff works properly - -open System.Reflection.PortableExecutable - +let inline WORD s = uint16 s +let inline DWORD s = uint32 s +let inline WCHAR s = char s +let inline BYTE s = byte s type ResourceException(name: string, ?inner: Exception) = - inherit Exception(name, Option.toObj inner) + inherit Exception (name, Option.toObj inner) -type RESOURCE_STRING() = +type RESOURCE_STRING () = member val Ordinal = Unchecked.defaultof with get, set member val theString = Unchecked.defaultof with get, set -type RESOURCE() = +type RESOURCE () = member val pstringType = Unchecked.defaultof with get, set member val pstringName = Unchecked.defaultof with get, set member val DataSize = Unchecked.defaultof with get, set @@ -46,27 +46,34 @@ type RESOURCE() = member val Characteristics = Unchecked.defaultof with get, set member val data = Unchecked.defaultof with get, set -type CvtResFile() = +type CvtResFile () = static member val private RT_DLGINCLUDE = 17 with get, set - static member ReadResFile(stream : Stream) = - let mutable reader = new BinaryReader(stream, Encoding.Unicode) + + static member ReadResFile (stream: Stream) = + let mutable reader = new BinaryReader (stream, Encoding.Unicode) let mutable resourceNames = new List() + // The stream might be empty, so let's check - if not (reader.PeekChar() = -1) then + if not (reader.PeekChar () = -1) then let mutable startPos = stream.Position let mutable initial32Bits = reader.ReadUInt32 () if initial32Bits <> uint32 0 then - raise <| ResourceException("Stream does not begin with a null resource and is not in .RES format.") + raise <| ResourceException(FSComp.SR.nativeResourceFormatError()) stream.Position <- startPos while (stream.Position < stream.Length) do let mutable cbData = reader.ReadUInt32 () let mutable cbHdr = reader.ReadUInt32 () if cbHdr < 2u * uint32 sizeof then - raise <| ResourceException(String.Format ("Resource header beginning at offset 0x{0:x} is malformed.", (stream.Position - 8L))) - if cbData = 0u then + // TODO: + // Current FSComp.txt converter doesn't yet support %x and %lx so format it as a string + // Because the lkg build is out of our control, will need to do it this way until + // The conversion fix flows through to the lkg + let msg = String.Format("0x{0:x}", stream.Position - 8L) + raise <| ResourceException(FSComp.SR.nativeResourceHeaderMalformed msg) + if cbData = 0u then stream.Position <- stream.Position + int64 cbHdr - 2L * int64 sizeof - else - let mutable pAdditional = RESOURCE() + else + let mutable pAdditional = RESOURCE() pAdditional.HeaderSize <- cbHdr pAdditional.DataSize <- cbData pAdditional.pstringType <- CvtResFile.ReadStringOrID (reader) @@ -86,21 +93,22 @@ type CvtResFile() = resourceNames.Add (pAdditional) resourceNames - static member private ReadStringOrID(fhIn : BinaryReader) = - let mutable (pstring : RESOURCE_STRING) = RESOURCE_STRING() - let mutable (firstWord : WCHAR) = (fhIn.ReadChar ()) + static member private ReadStringOrID (fhIn: BinaryReader) = + let mutable (pstring: RESOURCE_STRING) = RESOURCE_STRING () + let mutable (firstWord: WCHAR) = (fhIn.ReadChar ()) if int firstWord = 0xFFFF then pstring.Ordinal <- fhIn.ReadUInt16 () - else + else pstring.Ordinal <- uint16 0xFFFF - let mutable (sb : StringBuilder) = StringBuilder() - let mutable (curChar : WCHAR) = firstWord + let mutable (sb: StringBuilder) = StringBuilder () + let mutable (curChar: WCHAR) = firstWord while (curChar <> char 0) do sb.Append(curChar) |> ignore - curChar <- fhIn.ReadChar() + curChar <- fhIn.ReadChar () pstring.theString <- sb.ToString () pstring + [] type SectionCharacteristics = | TypeReg = 0u @@ -151,27 +159,25 @@ type SectionCharacteristics = | MemWrite = 2147483648u type ResourceSection() = - new(sectionBytes : byte[], relocations : uint32[]) as this = + new(sectionBytes: byte[], relocations: uint32[]) as this = (ResourceSection ()) then Debug.Assert (sectionBytes :> obj <> Unchecked.defaultof<_>) Debug.Assert (relocations :> obj <> Unchecked.defaultof<_>) this.SectionBytes <- sectionBytes this.Relocations <- relocations + member val SectionBytes = Unchecked.defaultof with get,set member val Relocations = Unchecked.defaultof with get,set - -open System.Runtime.CompilerServices [] type StreamExtensions () = - [] - static member TryReadAll(stream : Stream, buffer : byte[], offset : int, count : int) = + static member TryReadAll (stream: Stream, buffer: byte[], offset: int, count: int) = Debug.Assert (count > 0) - let mutable (totalBytesRead : int) = Unchecked.defaultof - let mutable (isFinished : bool) = false - let mutable (bytesRead : int) = 0 + let mutable (totalBytesRead: int) = Unchecked.defaultof + let mutable (isFinished: bool) = false + let mutable (bytesRead: int) = 0 do totalBytesRead <- 0 while totalBytesRead < count && not isFinished do @@ -182,26 +188,25 @@ type StreamExtensions () = totalBytesRead type COFFResourceReader() = - - static member private ConfirmSectionValues(hdr : SectionHeader, fileSize : System.Int64) = + static member private ConfirmSectionValues (hdr: SectionHeader, fileSize: System.Int64) = if int64 hdr.PointerToRawData + int64 hdr.SizeOfRawData > fileSize then - raise <| ResourceException("CoffResourceInvalidSectionSize") + raise <| ResourceException ("CoffResourceInvalidSectionSize") - static member ReadWin32ResourcesFromCOFF(stream : Stream) = - let mutable peHeaders = new PEHeaders(stream) - let mutable rsrc1 = SectionHeader() - let mutable rsrc2 = SectionHeader() - let mutable (foundCount : int) = 0 + static member ReadWin32ResourcesFromCOFF (stream: Stream) = + let mutable peHeaders = new PEHeaders (stream) + let mutable rsrc1 = SectionHeader () + let mutable rsrc2 = SectionHeader () + let mutable (foundCount: int) = 0 for sectionHeader in peHeaders.SectionHeaders do - if sectionHeader.Name = ".rsrc$01" then + if sectionHeader.Name = ".rsrc$01" then rsrc1 <- sectionHeader foundCount <- foundCount + 1 else - if sectionHeader.Name = ".rsrc$02" then + if sectionHeader.Name = ".rsrc$02" then rsrc2 <- sectionHeader foundCount <- foundCount + 1 if foundCount <> 2 then - raise <| ResourceException("CoffResourceMissingSection") + raise <| ResourceException ("CoffResourceMissingSection") COFFResourceReader.ConfirmSectionValues (rsrc1, stream.Length) COFFResourceReader.ConfirmSectionValues (rsrc2, stream.Length) let mutable imageResourceSectionBytes = Array.zeroCreate (rsrc1.SizeOfRawData + rsrc2.SizeOfRawData) @@ -209,46 +214,46 @@ type COFFResourceReader() = stream.TryReadAll (imageResourceSectionBytes, 0, rsrc1.SizeOfRawData) |> ignore stream.Seek (int64 rsrc2.PointerToRawData, SeekOrigin.Begin) |> ignore stream.TryReadAll (imageResourceSectionBytes, rsrc1.SizeOfRawData, rsrc2.SizeOfRawData) |> ignore - let mutable (SizeOfRelocationEntry : int) = 10 + let mutable (SizeOfRelocationEntry: int) = 10 try let mutable relocLastAddress = rsrc1.PointerToRelocations + (int rsrc1.NumberOfRelocations * SizeOfRelocationEntry) if int64 relocLastAddress > stream.Length then - raise <| ResourceException("CoffResourceInvalidRelocation") + raise <| ResourceException ("CoffResourceInvalidRelocation") with :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidRelocation")) let mutable relocationOffsets = Array.zeroCreate (int rsrc1.NumberOfRelocations) let mutable relocationSymbolIndices = Array.zeroCreate (int rsrc1.NumberOfRelocations) - let mutable reader = new BinaryReader(stream, Encoding.Unicode) + let mutable reader = new BinaryReader (stream, Encoding.Unicode) stream.Position <- int64 rsrc1.PointerToRelocations do - let mutable (i : int) = 0 + let mutable (i: int) = 0 while (i < int rsrc1.NumberOfRelocations) do relocationOffsets.[i] <- reader.ReadUInt32 () relocationSymbolIndices.[i] <- reader.ReadUInt32 () reader.ReadUInt16 () |> ignore //we do nothing with the "Type" i <- i + 1 stream.Position <- int64 peHeaders.CoffHeader.PointerToSymbolTable - let mutable (ImageSizeOfSymbol : System.UInt32) = 18u + let mutable (ImageSizeOfSymbol: System.UInt32) = 18u try let mutable lastSymAddress = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 peHeaders.CoffHeader.NumberOfSymbols * int64 ImageSizeOfSymbol (* ERROR UnknownNode *) if lastSymAddress > stream.Length then - raise <| ResourceException("CoffResourceInvalidSymbol") + raise <| ResourceException ("CoffResourceInvalidSymbol") with :? OverflowException -> (raise <| ResourceException("CoffResourceInvalidSymbol")) - let mutable outputStream = new MemoryStream(imageResourceSectionBytes) - let mutable writer = new BinaryWriter(outputStream) + let mutable outputStream = new MemoryStream (imageResourceSectionBytes) + let mutable writer = new BinaryWriter (outputStream) do - let mutable (i : int) = 0 + let mutable (i: int) = 0 while (i < relocationSymbolIndices.Length) do if int relocationSymbolIndices.[i] > peHeaders.CoffHeader.NumberOfSymbols then - raise <| ResourceException("CoffResourceInvalidRelocation") + raise <| ResourceException ("CoffResourceInvalidRelocation") let mutable offsetOfSymbol = int64 peHeaders.CoffHeader.PointerToSymbolTable + int64 relocationSymbolIndices.[i] * int64 ImageSizeOfSymbol stream.Position <- offsetOfSymbol stream.Position <- stream.Position + 8L let mutable symValue = reader.ReadUInt32 () let mutable symSection = reader.ReadInt16 () let mutable symType = reader.ReadUInt16 () - let mutable (IMAGE_SYM_TYPE_NULL : System.UInt16) = uint16 0x0000 + let mutable (IMAGE_SYM_TYPE_NULL: System.UInt16) = uint16 0x0000 if symType <> IMAGE_SYM_TYPE_NULL || symSection <> 3s then raise <| ResourceException("CoffResourceInvalidSymbol") outputStream.Position <- int64 relocationOffsets.[i] @@ -269,14 +274,13 @@ type ICONDIRENTRY = val mutable dwImageOffset: DWORD type VersionHelper() = - /// /// Parses a version string of the form "major [ '.' minor [ '.' build [ '.' revision ] ] ]". /// /// The version string to parse. /// If parsing succeeds, the parsed version. Otherwise a version that represents as much of the input as could be parsed successfully. /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. - static member TryParse(s : string, [] version : byref) = + static member TryParse(s: string, [] version: byref) = VersionHelper.TryParse (s, false, UInt16.MaxValue, true, ref version) /// @@ -291,10 +295,10 @@ type VersionHelper() = /// /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. - static member TryParseAssemblyVersion(s : string, allowWildcard : System.Boolean, [] version : byref) = + static member TryParseAssemblyVersion (s: string, allowWildcard: System.Boolean, [] version: byref) = VersionHelper.TryParse (s, allowWildcard, (UInt16.MaxValue - 1us), false, ref version) - - static member private NullVersion = new Version(0, 0, 0, 0) + + static member private NullVersion = new Version (0, 0, 0, 0) /// /// Parses a version string of the form "major [ '.' minor [ '.' ( '*' | ( build [ '.' ( '*' | revision ) ] ) ) ] ]" @@ -309,59 +313,59 @@ type VersionHelper() = /// If contains * and wildcard is allowed the version build and/or revision numbers are set to . /// /// True when parsing succeeds completely (i.e. every character in the string was consumed), false otherwise. - static member private TryParse(s : string, allowWildcard : System.Boolean, maxValue : System.UInt16, allowPartialParse : System.Boolean, [] version : byref) = + static member private TryParse(s: string, allowWildcard: System.Boolean, maxValue: System.UInt16, allowPartialParse: System.Boolean, [] version: byref) = Debug.Assert (not allowWildcard || maxValue < UInt16.MaxValue) - if String.IsNullOrWhiteSpace (s) then + if String.IsNullOrWhiteSpace (s) then version <- VersionHelper.NullVersion false else - let mutable (elements : string[]) = s.Split ('.') - let mutable (hasWildcard : System.Boolean) = allowWildcard && elements.[(int (elements.Length - 1))] = "*" - if hasWildcard && elements.Length < 3 || elements.Length > 4 then + let mutable (elements: string[]) = s.Split ('.') + let mutable (hasWildcard: System.Boolean) = allowWildcard && elements.[(int (elements.Length - 1))] = "*" + if hasWildcard && elements.Length < 3 || elements.Length > 4 then version <- VersionHelper.NullVersion false else - let mutable (values : uint16[]) = Array.zeroCreate 4 - let mutable (lastExplicitValue : int) = + let mutable (values: uint16[]) = Array.zeroCreate 4 + let mutable (lastExplicitValue: int) = if hasWildcard then elements.Length - 1 else elements.Length - let mutable (parseError : System.Boolean) = false + let mutable (parseError: System.Boolean) = false let mutable earlyReturn = None do - let mutable (i : int) = 0 + let mutable (i: int) = 0 let mutable breakLoop = false while (i < lastExplicitValue) && not breakLoop do - if not (UInt16.TryParse (elements.[i], System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref values.[i])) || values.[i] > maxValue then + if not (UInt16.TryParse (elements.[i], System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref values.[i])) || values.[i] > maxValue then if not allowPartialParse then earlyReturn <- Some false breakLoop <- true version <- VersionHelper.NullVersion else parseError <- true - if String.IsNullOrWhiteSpace (elements.[i]) then + if String.IsNullOrWhiteSpace (elements.[i]) then values.[i] <- 0us breakLoop <- true else - if values.[i] > maxValue then + if values.[i] > maxValue then values.[i] <- 0us breakLoop <- true else - let mutable (invalidFormat : System.Boolean) = false - //let mutable (number : System.Numerics.BigInteger) = 0I + let mutable (invalidFormat: System.Boolean) = false + //let mutable (number: System.Numerics.BigInteger) = 0I do let mutable idx = 0 let mutable breakLoop = false while (idx < elements.[i].Length) && not breakLoop do - if not (Char.IsDigit (elements.[i].[idx])) then + if not (Char.IsDigit (elements.[i].[idx])) then invalidFormat <- true VersionHelper.TryGetValue ((elements.[i].Substring (0, idx)), ref values.[i]) |> ignore breakLoop <- true else idx <- idx + 1 let mutable doBreak = true - if not invalidFormat then - if VersionHelper.TryGetValue (elements.[i], ref values.[i]) then + if not invalidFormat then + if VersionHelper.TryGetValue (elements.[i], ref values.[i]) then //For this scenario the old compiler would continue processing the remaining version elements //so continue processing doBreak <- false @@ -369,25 +373,24 @@ type VersionHelper() = (* ERROR BreakNotSupported *) if not breakLoop then i <- i + 1 - if hasWildcard then - do - let mutable (i : int) = lastExplicitValue - while (i < values.Length) do - values.[i] <- UInt16.MaxValue - i <- i + 1 + if hasWildcard then + let mutable (i: int) = lastExplicitValue + while (i < values.Length) do + values.[i] <- UInt16.MaxValue + i <- i + 1 version <- new Version(int values.[0], int values.[1], int values.[2], int values.[3]) not parseError - static member private TryGetValue(s : string, [] value : byref) : bool = - let mutable (number : System.Numerics.BigInteger) = Unchecked.defaultof - if System.Numerics.BigInteger.TryParse (s, System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref number) then + static member private TryGetValue(s: string, [] value: byref): bool = + let mutable (number: System.Numerics.BigInteger) = Unchecked.defaultof + if System.Numerics.BigInteger.TryParse (s, System.Globalization.NumberStyles.None, System.Globalization.CultureInfo.InvariantCulture, ref number) then value <- uint16 (number % bigint 65536) true else value <- 0us false - static member GenerateVersionFromPatternAndCurrentTime(time : DateTime, pattern : Version) = + static member GenerateVersionFromPatternAndCurrentTime(time: DateTime, pattern: Version) = if pattern = Unchecked.defaultof<_> || pattern.Revision <> int UInt16.MaxValue then pattern else @@ -397,15 +400,16 @@ type VersionHelper() = // (without taking into account time zone adjustments for daylight saving time), divided by 2." if time = Unchecked.defaultof then time <- DateTime.Now - let mutable (revision : int) = int time.TimeOfDay.TotalSeconds / 2 + let mutable (revision: int) = int time.TimeOfDay.TotalSeconds / 2 Debug.Assert (revision < int UInt16.MaxValue) - if pattern.Build = int UInt16.MaxValue then - let mutable (days : TimeSpan) = time.Date - new DateTime(2000, 1, 1) - let mutable (build : int) = Math.Min (int UInt16.MaxValue, (int days.TotalDays)) + if pattern.Build = int UInt16.MaxValue then + let mutable (days: TimeSpan) = time.Date - new DateTime(2000, 1, 1) + let mutable (build: int) = Math.Min (int UInt16.MaxValue, (int days.TotalDays)) new Version(pattern.Major, pattern.Minor, int (uint16 build), int (uint16 revision)) - else new Version(pattern.Major, pattern.Minor, pattern.Build, int (uint16 revision)) + else + new Version(pattern.Major, pattern.Minor, pattern.Build, int (uint16 revision)) -type VersionResourceSerializer() = +type VersionResourceSerializer () = member val private _commentsContents = Unchecked.defaultof with get, set member val private _companyNameContents = Unchecked.defaultof with get, set member val private _fileDescriptionContents = Unchecked.defaultof with get, set @@ -422,11 +426,13 @@ type VersionResourceSerializer() = static member val private translationKey = "Translation" with get, set static member val private stringFileInfoKey = "StringFileInfo" with get, set member val private _langIdAndCodePageKey = Unchecked.defaultof with get, set + static member val private CP_WINUNICODE = 1200u static member val private sizeVS_FIXEDFILEINFO = uint16 (sizeof * 13) + member val private _isDll = Unchecked.defaultof with get, set - new(isDll : System.Boolean, comments : string, companyName : string, fileDescription : string, fileVersion : string, internalName : string, legalCopyright : string, legalTrademark : string, originalFileName : string, productName : string, productVersion : string, assemblyVersion : Version) as this = + new(isDll: System.Boolean, comments: string, companyName: string, fileDescription: string, fileVersion: string, internalName: string, legalCopyright: string, legalTrademark: string, originalFileName: string, productName: string, productVersion: string, assemblyVersion: Version) as this = (VersionResourceSerializer ()) then this._isDll <- isDll @@ -475,10 +481,10 @@ type VersionResourceSerializer() = else VersionResourceSerializer.VFT_APP - member private this.WriteVSFixedFileInfo(writer : BinaryWriter) = - let mutable (fileVersion : Version) = Unchecked.defaultof + member private this.WriteVSFixedFileInfo(writer: BinaryWriter) = + let mutable (fileVersion: Version) = Unchecked.defaultof VersionHelper.TryParse (this._fileVersionContents, ref fileVersion) |> ignore - let mutable (productVersion : Version) = Unchecked.defaultof + let mutable (productVersion: Version) = Unchecked.defaultof VersionHelper.TryParse (this._productVersionContents, ref productVersion) |> ignore writer.Write (0xFEEF04BDu) writer.Write (0x00010000u) @@ -494,26 +500,26 @@ type VersionResourceSerializer() = writer.Write (0u) writer.Write (0u) - static member private PadKeyLen(cb : int) = + static member private PadKeyLen(cb: int) = VersionResourceSerializer.PadToDword (cb + 3 * sizeof) - 3 * sizeof - static member private PadToDword(cb : int) = + static member private PadToDword(cb: int) = cb + 3 &&& ~~~3 static member val private HDRSIZE = (int (3 * sizeof)) with get, set - static member private SizeofVerString(lpszKey : string, lpszValue : string) = - let mutable (cbKey : int) = Unchecked.defaultof - let mutable (cbValue : int) = Unchecked.defaultof + static member private SizeofVerString(lpszKey: string, lpszValue: string) = + let mutable (cbKey: int) = Unchecked.defaultof + let mutable (cbValue: int) = Unchecked.defaultof cbKey <- lpszKey.Length + 1 * 2 cbValue <- lpszValue.Length + 1 * 2 VersionResourceSerializer.PadKeyLen(cbKey) + cbValue + VersionResourceSerializer.HDRSIZE - static member private WriteVersionString(keyValuePair : KeyValuePair, writer : BinaryWriter) = - System.Diagnostics.Debug.Assert (keyValuePair.Value <> Unchecked.defaultof<_>) - let mutable (cbBlock : System.UInt16) = uint16 <| VersionResourceSerializer.SizeofVerString (keyValuePair.Key, keyValuePair.Value) - let mutable (cbKey : int) = keyValuePair.Key.Length + 1 * 2 - //let mutable (cbVal : int) = keyValuePair.Value.Length + 1 * 2 + static member private WriteVersionString(keyValuePair: KeyValuePair, writer: BinaryWriter) = + Debug.Assert (keyValuePair.Value <> Unchecked.defaultof<_>) + let mutable (cbBlock: System.UInt16) = uint16 <| VersionResourceSerializer.SizeofVerString (keyValuePair.Key, keyValuePair.Value) + let mutable (cbKey: int) = keyValuePair.Key.Length + 1 * 2 + //let mutable (cbVal: int) = keyValuePair.Value.Length + 1 * 2 let mutable startPos = writer.BaseStream.Position Debug.Assert (startPos &&& 3L = 0L) writer.Write (cbBlock) @@ -521,27 +527,27 @@ type VersionResourceSerializer() = writer.Write (1us) writer.Write (keyValuePair.Key.ToCharArray ()) writer.Write (uint16 0) //(WORD)'\0' - writer.Write (Array.zeroCreate (VersionResourceSerializer.PadKeyLen (cbKey) - cbKey) : byte[]) + writer.Write (Array.zeroCreate (VersionResourceSerializer.PadKeyLen (cbKey) - cbKey): byte[]) Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) writer.Write (keyValuePair.Value.ToCharArray ()) writer.Write (uint16 0) // (WORD)'\0' - System.Diagnostics.Debug.Assert (int64 cbBlock = writer.BaseStream.Position - startPos) + Debug.Assert (int64 cbBlock = writer.BaseStream.Position - startPos) - static member private KEYSIZE(sz : string) = + static member private KEYSIZE(sz: string) = VersionResourceSerializer.PadKeyLen (sz.Length + 1 * sizeof) / sizeof - static member private KEYBYTES(sz : string) = + static member private KEYBYTES(sz: string) = VersionResourceSerializer.KEYSIZE (sz) * sizeof member private this.GetStringsSize() = - let mutable (sum : int) = 0 + let mutable (sum: int) = 0 for verString in this.GetVerStrings () do sum <- sum + 3 &&& ~~~3 sum <- sum + VersionResourceSerializer.SizeofVerString (verString.Key, verString.Value) sum - member this.GetDataSize() = - let mutable (sizeEXEVERRESOURCE : int) = + member this.GetDataSize () = + let mutable (sizeEXEVERRESOURCE: int) = sizeof * 3 * 5 + 2 * sizeof + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.vsVersionInfoKey) + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) + @@ -551,54 +557,54 @@ type VersionResourceSerializer() = int VersionResourceSerializer.sizeVS_FIXEDFILEINFO this.GetStringsSize () + sizeEXEVERRESOURCE - member this.WriteVerResource(writer : BinaryWriter) = + member this.WriteVerResource (writer: BinaryWriter) = let mutable debugPos = writer.BaseStream.Position let mutable dataSize = this.GetDataSize () writer.Write (WORD dataSize) writer.Write (WORD VersionResourceSerializer.sizeVS_FIXEDFILEINFO) writer.Write (WORD 0us) writer.Write (VersionResourceSerializer.vsVersionInfoKey.ToCharArray ()) - writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.vsVersionInfoKey) - VersionResourceSerializer.vsVersionInfoKey.Length * 2) : byte[]) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.vsVersionInfoKey) - VersionResourceSerializer.vsVersionInfoKey.Length * 2): byte[]) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) this.WriteVSFixedFileInfo (writer) writer.Write (WORD (sizeof * 2 + 2 * VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey))) writer.Write (WORD 0us) writer.Write (WORD 1us) writer.Write (VersionResourceSerializer.varFileInfoKey.ToCharArray ()) writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.varFileInfoKey) - VersionResourceSerializer.varFileInfoKey.Length * 2): byte[]) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) writer.Write (WORD (sizeof * 2 + VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey))) writer.Write (WORD (sizeof * 2)) writer.Write (WORD 0us) writer.Write (VersionResourceSerializer.translationKey.ToCharArray ()) writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.translationKey) - VersionResourceSerializer.translationKey.Length * 2): byte[]) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) writer.Write (0us) writer.Write (WORD VersionResourceSerializer.CP_WINUNICODE) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) writer.Write (WORD (2 * VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.stringFileInfoKey) + VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + this.GetStringsSize ())) writer.Write (0us) writer.Write (1us) writer.Write (VersionResourceSerializer.stringFileInfoKey.ToCharArray ()) writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (VersionResourceSerializer.stringFileInfoKey) - VersionResourceSerializer.stringFileInfoKey.Length * 2): byte[]) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) writer.Write (WORD (VersionResourceSerializer.HDRSIZE + VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) + this.GetStringsSize ())) writer.Write (0us) writer.Write (1us) writer.Write (this._langIdAndCodePageKey.ToCharArray ()) writer.Write (Array.zeroCreate (VersionResourceSerializer.KEYBYTES (this._langIdAndCodePageKey) - this._langIdAndCodePageKey.Length * 2): byte[]) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position - debugPos = int64 dataSize - int64 (this.GetStringsSize ())) + Debug.Assert (writer.BaseStream.Position &&& 3L = 0L) + Debug.Assert (writer.BaseStream.Position - debugPos = int64 dataSize - int64 (this.GetStringsSize ())) debugPos <- writer.BaseStream.Position for entry in this.GetVerStrings () do let mutable writerPos = writer.BaseStream.Position writer.Write (Array.zeroCreate (int ((writerPos + 3L) &&& ~~~3L - writerPos)): byte[]) - System.Diagnostics.Debug.Assert (entry.Value <> Unchecked.defaultof<_>) + Debug.Assert (entry.Value <> Unchecked.defaultof<_>) VersionResourceSerializer.WriteVersionString (entry, writer) - System.Diagnostics.Debug.Assert (writer.BaseStream.Position - debugPos = int64 (this.GetStringsSize ())) + Debug.Assert (writer.BaseStream.Position - debugPos = int64 (this.GetStringsSize ())) -type Win32ResourceConversions() = - static member AppendIconToResourceStream(resStream : Stream, iconStream : Stream) = +type Win32ResourceConversions () = + static member AppendIconToResourceStream(resStream: Stream, iconStream: Stream) = let mutable iconReader = new BinaryReader(iconStream) let mutable reserved = iconReader.ReadUInt16 () if reserved <> 0us then @@ -609,9 +615,9 @@ type Win32ResourceConversions() = let mutable count = iconReader.ReadUInt16 () if count = 0us then raise <| ResourceException("IconStreamUnexpectedFormat") - let mutable iconDirEntries : ICONDIRENTRY [] = Array.zeroCreate (int count) + let mutable iconDirEntries: ICONDIRENTRY [] = Array.zeroCreate (int count) do - let mutable (i : System.UInt16) = 0us + let mutable (i: System.UInt16) = 0us while (i < count) do iconDirEntries.[(int i)].bWidth <- iconReader.ReadByte () iconDirEntries.[(int i)].bHeight <- iconReader.ReadByte () @@ -622,9 +628,8 @@ type Win32ResourceConversions() = iconDirEntries.[(int i)].dwBytesInRes <- iconReader.ReadUInt32 () iconDirEntries.[(int i)].dwImageOffset <- iconReader.ReadUInt32 () i <- i + 1us - - do - let mutable (i : System.UInt16) = 0us + do + let mutable (i: System.UInt16) = 0us while (i < count) do iconStream.Position <- int64 iconDirEntries.[(int i)].dwImageOffset if iconReader.ReadUInt32 () = 40u then @@ -632,11 +637,11 @@ type Win32ResourceConversions() = iconDirEntries.[(int i)].wPlanes <- iconReader.ReadUInt16 () iconDirEntries.[(int i)].wBitCount <- iconReader.ReadUInt16 () i <- i + 1us - + let mutable resWriter = new BinaryWriter(resStream) - let mutable (RT_ICON : WORD) = 3us - do - let mutable (i : System.UInt16) = 0us + let mutable (RT_ICON: WORD) = 3us + do + let mutable (i: System.UInt16) = 0us while (i < count) do resStream.Position <- resStream.Position + 3L &&& ~~~3L resWriter.Write (iconDirEntries.[(int i)].dwBytesInRes) @@ -654,7 +659,7 @@ type Win32ResourceConversions() = resWriter.Write (iconReader.ReadBytes (int (iconDirEntries.[int i].dwBytesInRes))) i <- i + 1us - let mutable (RT_GROUP_ICON : WORD) = (RT_ICON + 11us) + let mutable (RT_GROUP_ICON: WORD) = (RT_ICON + 11us) resStream.Position <- resStream.Position + 3L &&& ~~~3L resWriter.Write (uint32 (3 * sizeof + int count * 14)) resWriter.Write (0x00000020u) @@ -670,8 +675,8 @@ type Win32ResourceConversions() = resWriter.Write (0x0000us) resWriter.Write (0x0001us) resWriter.Write (count) - do - let mutable (i : System.UInt16) = 0us + do + let mutable (i: System.UInt16) = 0us while (i < count) do resWriter.Write (iconDirEntries.[(int i)].bWidth) resWriter.Write (iconDirEntries.[(int i)].bHeight) @@ -684,7 +689,7 @@ type Win32ResourceConversions() = i <- i + 1us () - static member AppendVersionToResourceStream(resStream : Stream, isDll : System.Boolean, fileVersion : string, originalFileName : string, internalName : string, productVersion : string, assemblyVersion : Version, ?fileDescription : string, ?legalCopyright : string, ?legalTrademarks : string, ?productName : string, ?comments : string, ?companyName : string) = + static member AppendVersionToResourceStream (resStream: Stream, isDll: System.Boolean, fileVersion: string, originalFileName: string, internalName: string, productVersion: string, assemblyVersion: Version, ?fileDescription: string, ?legalCopyright: string, ?legalTrademarks: string, ?productName: string, ?comments: string, ?companyName: string) = let fileDescription = (defaultArg fileDescription) " " let legalCopyright = (defaultArg legalCopyright) " " let legalTrademarks = (defaultArg legalTrademarks) Unchecked.defaultof<_> @@ -693,11 +698,11 @@ type Win32ResourceConversions() = let companyName = (defaultArg companyName) Unchecked.defaultof<_> let mutable resWriter = new BinaryWriter(resStream, Encoding.Unicode) resStream.Position <- resStream.Position + 3L &&& ~~~3L - let mutable (RT_VERSION : DWORD) = 16u + let mutable (RT_VERSION: DWORD) = 16u let mutable ver = new VersionResourceSerializer(isDll, comments, companyName, fileDescription, fileVersion, internalName, legalCopyright, legalTrademarks, originalFileName, productName, productVersion, assemblyVersion) let mutable startPos = resStream.Position let mutable dataSize = ver.GetDataSize () - let mutable (headerSize : int) = 0x20 + let mutable (headerSize: int) = 0x20 resWriter.Write (uint32 dataSize) resWriter.Write (uint32 headerSize) resWriter.Write (0xFFFFus) @@ -710,22 +715,204 @@ type Win32ResourceConversions() = resWriter.Write (0x00000000u) resWriter.Write (0x00000000u) ver.WriteVerResource (resWriter) - System.Diagnostics.Debug.Assert (resStream.Position - startPos = int64 dataSize + int64 headerSize) + Debug.Assert (resStream.Position - startPos = int64 dataSize + int64 headerSize) - static member AppendManifestToResourceStream(resStream : Stream, manifestStream : Stream, isDll : System.Boolean) = + static member AppendManifestToResourceStream(resStream: Stream, manifestStream: Stream, isDll: System.Boolean) = resStream.Position <- resStream.Position + 3L &&& ~~~3L (* ERROR UnknownPrefixOperator "~" *) - let mutable (RT_MANIFEST : WORD) = 24us + let mutable (RT_MANIFEST: WORD) = 24us let mutable resWriter = new BinaryWriter(resStream) resWriter.Write (uint32 manifestStream.Length) resWriter.Write (0x00000020u) resWriter.Write (0xFFFFus) resWriter.Write (RT_MANIFEST) resWriter.Write (0xFFFFus) - resWriter.Write ( - if isDll then 0x0002us else 0x0001us) + resWriter.Write (if isDll then 0x0002us else 0x0001us) resWriter.Write (0x00000000u) resWriter.Write (0x1030us) resWriter.Write (0x0000us) resWriter.Write (0x00000000u) resWriter.Write (0x00000000u) manifestStream.CopyTo (resStream) + + +type Win32Resource (data: byte[], codePage: DWORD, languageId: DWORD, id: int, name: string, typeId: int, typeName: string) = + member val Data = data + member val CodePage = codePage + member val LanguageId = languageId + member val Id = id + member val Name = name + member val TypeId = typeId + member val TypeName = typeName + +type Directory (name, id) = + member val Name = name + member val ID = id + member val NumberOfNamedEntries = Unchecked.defaultof with get, set + member val NumberOfIdEntries = Unchecked.defaultof with get, set + member val Entries = new List() + +type NativeResourceWriter () = + static member private CompareResources (left: Win32Resource) (right: Win32Resource) = + let mutable (result: int) = NativeResourceWriter.CompareResourceIdentifiers (left.TypeId, left.TypeName, right.TypeId, right.TypeName) + if result = 0 then + NativeResourceWriter.CompareResourceIdentifiers (left.Id, left.Name, right.Id, right.Name) + else result + + static member private CompareResourceIdentifiers (xOrdinal: int, xString: string, yOrdinal: int, yString: string) = + if xString = Unchecked.defaultof<_> then + if yString = Unchecked.defaultof<_> then + xOrdinal - yOrdinal + else + 1 + else + if yString = Unchecked.defaultof<_> then + -1 + else + String.Compare (xString, yString, StringComparison.OrdinalIgnoreCase) + + static member SortResources (resources: IEnumerable) = + resources.OrderBy ((fun d -> d), Comparer<_>.Create(Comparison<_> NativeResourceWriter.CompareResources)) :> IEnumerable + + static member SerializeWin32Resources (builder: BlobBuilder, theResources: IEnumerable, resourcesRva: int) = + let theResources = NativeResourceWriter.SortResources (theResources) + let mutable (typeDirectory: Directory) = new Directory(String.Empty, 0) + let mutable (nameDirectory: Directory) = Unchecked.defaultof<_> + let mutable (languageDirectory: Directory) = Unchecked.defaultof<_> + let mutable (lastTypeID: int) = Int32.MinValue + let mutable (lastTypeName: string) = Unchecked.defaultof<_> + let mutable (lastID: int) = Int32.MinValue + let mutable (lastName: string) = Unchecked.defaultof<_> + let mutable (sizeOfDirectoryTree: System.UInt32) = 16u + for (r: Win32Resource) in theResources do + let mutable (typeDifferent: System.Boolean) = r.TypeId < 0 && r.TypeName <> lastTypeName || r.TypeId > lastTypeID + if typeDifferent then + lastTypeID <- r.TypeId + lastTypeName <- r.TypeName + if lastTypeID < 0 then + Debug.Assert ((typeDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with types encoded as strings precede those encoded as ints") + typeDirectory.NumberOfNamedEntries <- typeDirectory.NumberOfNamedEntries + 1us + else + typeDirectory.NumberOfIdEntries <- typeDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u + nameDirectory <- new Directory(lastTypeName, lastTypeID) + typeDirectory.Entries.Add (nameDirectory) + if typeDifferent || r.Id < 0 && r.Name <> lastName || r.Id > lastID then + lastID <- r.Id + lastName <- r.Name + if lastID < 0 then + Debug.Assert ((nameDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with names encoded as strings precede those encoded as ints") + nameDirectory.NumberOfNamedEntries <- nameDirectory.NumberOfNamedEntries + 1us + else + nameDirectory.NumberOfIdEntries <- nameDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u + languageDirectory <- new Directory (lastName, lastID) + nameDirectory.Entries.Add (languageDirectory) + languageDirectory.NumberOfIdEntries <- languageDirectory.NumberOfIdEntries + 1us + sizeOfDirectoryTree <- sizeOfDirectoryTree + 8u + languageDirectory.Entries.Add (r) + let mutable dataWriter = new BlobBuilder() + NativeResourceWriter.WriteDirectory (typeDirectory, builder, (0u), (0u), sizeOfDirectoryTree, resourcesRva, dataWriter) + builder.LinkSuffix (dataWriter) + builder.WriteByte (0uy) + builder.Align (4) + + static member private WriteDirectory (directory: Directory, writer: BlobBuilder, offset: System.UInt32, level: System.UInt32, sizeOfDirectoryTree: System.UInt32, virtualAddressBase: int, dataWriter: BlobBuilder) = + writer.WriteUInt32 (0u) + writer.WriteUInt32 (0u) + writer.WriteUInt32 (0u) + writer.WriteUInt16 (directory.NumberOfNamedEntries) + writer.WriteUInt16 (directory.NumberOfIdEntries) + let mutable (n: System.UInt32) = uint32 directory.Entries.Count + let mutable (k: System.UInt32) = offset + 16u + n * 8u + do + let mutable (i: uint32) = 0u + while (i < n) do + let mutable (id: int) = Unchecked.defaultof + let mutable (name: string) = Unchecked.defaultof + let mutable (nameOffset: System.UInt32) = uint32 dataWriter.Count + sizeOfDirectoryTree + let mutable (directoryOffset: System.UInt32) = k + let isDir = + match directory.Entries.[int i] with + | :? Directory as subDir -> + id <- subDir.ID + name <- subDir.Name + if level = 0u then k <- k + NativeResourceWriter.SizeOfDirectory (subDir) + else k <- k + 16u + 8u * uint32 subDir.Entries.Count + true + | :? Win32Resource as r -> + id <- + if level = 0u then + r.TypeId + else + if level = 1u then + r.Id + else + int r.LanguageId + name <- + if level = 0u then + r.TypeName + else + if level = 1u then + r.Name + else + Unchecked.defaultof<_> + dataWriter.WriteUInt32 ((uint32 virtualAddressBase + sizeOfDirectoryTree + 16u + uint32 dataWriter.Count)) + let mutable (data: byte[]) = (new List (r.Data)).ToArray () + dataWriter.WriteUInt32 (uint32 data.Length) + dataWriter.WriteUInt32 (r.CodePage) + dataWriter.WriteUInt32 (0u) + dataWriter.WriteBytes (data) + while (dataWriter.Count % 4 <> 0) do + dataWriter.WriteByte (0uy) + false + | e -> failwithf "Unknown entry %s" (if isNull e then "" else e.GetType().FullName) + if id >= 0 then writer.WriteInt32 (id) + else + if name = Unchecked.defaultof<_> then + name <- String.Empty + writer.WriteUInt32 (nameOffset ||| 0x80000000u) + dataWriter.WriteUInt16 (uint16 name.Length) + dataWriter.WriteUTF16 (name) + if isDir then writer.WriteUInt32 (directoryOffset ||| 0x80000000u) + else writer.WriteUInt32 (nameOffset) + i <- i + 1u + + k <- offset + 16u + n * 8u + do + let mutable (i: int) = 0 + while (uint32 i < n) do + match directory.Entries.[i] with + | :? Directory as subDir -> + NativeResourceWriter.WriteDirectory (subDir, writer, k, (level + 1u), sizeOfDirectoryTree, virtualAddressBase, dataWriter) + if level = 0u then + k <- k + NativeResourceWriter.SizeOfDirectory (subDir) + else + k <- k + 16u + 8u * uint32 subDir.Entries.Count + | _ -> () + i <- i + 1 + () + + static member private SizeOfDirectory (directory: Directory) = + let mutable (n: System.UInt32) = uint32 directory.Entries.Count + let mutable (size: System.UInt32) = 16u + 8u * n + do + let mutable (i: int) = 0 + while (uint32 i < n) do + match directory.Entries.[i] with + | :? Directory as subDir -> + size <- size + 16u + 8u * uint32 subDir.Entries.Count + | _ -> () + i <- i + 1 + size + + (* + static member SerializeWin32Resources (builder: BlobBuilder, resourceSections: ResourceSection, resourcesRva: int) = + let mutable sectionWriter = new BlobWriter (builder.ReserveBytes (resourceSections.SectionBytes.Length)) + sectionWriter.WriteBytes (resourceSections.SectionBytes) + let mutable readStream = new MemoryStream (resourceSections.SectionBytes) + let mutable reader = new BinaryReader (readStream) + for (addressToFixup: int) in resourceSections.Relocations do + sectionWriter.Offset <- addressToFixup + reader.BaseStream.Position <- addressToFixup + sectionWriter.WriteUInt32 (reader.ReadUInt32 () + resourcesRva :> System.UInt32) + ()*) \ No newline at end of file diff --git a/src/absil/cvtres.fsi b/src/absil/ilnativeres.fsi similarity index 56% rename from src/absil/cvtres.fsi rename to src/absil/ilnativeres.fsi index 351d45626f..c958240085 100644 --- a/src/absil/cvtres.fsi +++ b/src/absil/ilnativeres.fsi @@ -1,7 +1,12 @@ -module internal FSharp.Compiler.AbstractIL.Internal.CVTres + +module internal FSharp.Compiler.AbstractIL.Internal.NativeRes open System +open System.Collections.Generic +open System.Linq +open System.Diagnostics open System.IO +open System.Reflection.Metadata type BYTE = System.Byte type DWORD = System.UInt32 @@ -26,6 +31,17 @@ type RESOURCE = member Characteristics : DWORD with get, set member data : byte[] with get, set +type Win32Resource = + new : data:byte [] * codePage: DWORD * languageId: DWORD * id: int * + name: string * typeId:int * typeName : string -> Win32Resource + member CodePage: DWORD + member Data: byte [] + member Id: int + member LanguageId : DWORD + member Name: string + member TypeId: int + member TypeName: string + [] type CvtResFile = static member ReadResFile : stream:Stream -> System.Collections.Generic.List @@ -33,5 +49,14 @@ type CvtResFile = [] type Win32ResourceConversions = static member AppendIconToResourceStream : resStream:Stream * iconStream:Stream -> unit - static member AppendVersionToResourceStream : resStream:Stream * isDll:System.Boolean * fileVersion:string * originalFileName:string * internalName:string * productVersion:string * assemblyVersion:Version * ?fileDescription:string * ?legalCopyright:string * ?legalTrademarks:string * ?productName:string * ?comments:string * ?companyName:string -> unit - static member AppendManifestToResourceStream : resStream:Stream * manifestStream:Stream * isDll:System.Boolean -> unit + static member AppendVersionToResourceStream : resStream:Stream * isDll:System.Boolean * fileVersion:string * originalFileName:string * internalName:string * productVersion:string * assemblyVersion:Version * ?fileDescription:string * ?legalCopyright:string * ?legalTrademarks:string * ?productName:string * ?comments:string * ?companyName:string -> unit + static member AppendManifestToResourceStream : resStream:Stream * manifestStream:Stream * isDll:System.Boolean -> unit + +// Write native resources +[] +type NativeResourceWriter = + static member SortResources: resources: IEnumerable -> IEnumerable + static member SerializeWin32Resources: builder:BlobBuilder * theResources: IEnumerable * resourcesRva: int -> unit + (* + static member SerializeWin32Resources (builder : BlobBuilder, resourceSections : ResourceSection, resourcesRva : int) -> unit + ()*) \ No newline at end of file diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index d2880289a8..fb8a98b349 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -8,9 +8,11 @@ open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Bytes open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.Internal.Library +open FSharp.Compiler.AbstractIL.Internal.NativeRes #if FX_NO_CORHOST_SIGNER open FSharp.Compiler.AbstractIL.Internal.StrongNameSign #endif + open System open System.IO open System.Text @@ -37,8 +39,6 @@ let check _action (hresult) = System.Runtime.InteropServices.Marshal.ThrowExceptionForHR hresult //printf "action = %s, hresult = 0x%nx \n" action hresult -type PEFileType = X86 | X64 - let MAX_PATH = 260 let E_FAIL = 0x80004005 @@ -581,207 +581,24 @@ type ResFormatNode(tid: int32, nid: int32, lid: int32, dataOffset: int32, pbLink !size -let linkNativeResourcesViaCVTres (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = - let nPEFileType = match fileType with X86 -> 0 | X64 -> 2 - let mutable tempResFiles: string list = [] - let mutable objBytes: byte[] = [||] - - let unlinkedResources = unlinkedResources |> List.filter (fun arr -> arr.Length > 0) - if isNil unlinkedResources then // bail if there's nothing to link - objBytes - else - // Part 1: Write unlinked resources to an object file for linking - // check if the first dword is 0x0 - let firstDWord = bytesToDWord(unlinkedResources.[0].[0], unlinkedResources.[0].[1], unlinkedResources.[0].[2], unlinkedResources.[0].[3]) - if firstDWord = 0 then - // build the command line invocation string for cvtres.exe - let corSystemDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() - // We'll use the current dir and a random file name rather than System.IO.Path.GetTempFileName - // to try and prevent the command line invocation string from being > MAX_PATH - - let outputFilePaths = - if outputFilePath = "" then - [ FileSystem.GetTempPathShim() ] - else - [ FileSystem.GetTempPathShim() ; (outputFilePath + "\\") ] - - // Get a unique random file - let rec GetUniqueRandomFileName path = - let tfn = path + System.IO.Path.GetRandomFileName() - if FileSystem.SafeExists tfn then - GetUniqueRandomFileName path - else - tfn - - - let machine = if 2 = nPEFileType then "X64" else "X86" - let cmdLineArgsPreamble = sprintf "/NOLOGO /READONLY /MACHINE:%s" machine - - let cvtres = corSystemDir + "cvtres.exe " - - let createCvtresArgs path = - let tempObjFileName = GetUniqueRandomFileName path - let mutable cmdLineArgs = sprintf "%s \"/Out:%s\"" cmdLineArgsPreamble tempObjFileName - let mutable resFiles: string list = [] - - for _ulr in unlinkedResources do - let tempResFileName = GetUniqueRandomFileName path - resFiles <- tempResFileName :: resFiles - cmdLineArgs <- cmdLineArgs + " \"" + tempResFileName + "\"" - let trf = resFiles - let cmd = cmdLineArgs - cmd, tempObjFileName, trf - - let cmdLineArgs, tempObjFileName, tempResFileNames = - let attempts = - outputFilePaths |> - List.map (fun path -> createCvtresArgs path) |> - List.filter (fun ((argstring: string), (_t: string), (_f: string list)) -> (cvtres.Length + argstring.Length) < MAX_PATH) - let invoc, tmp, files = - match attempts with - | [] -> createCvtresArgs ".\\" // hope for the best... - | (i, t, f) :: _rest -> i, t, f // use the first one, since they're listed in order of precedence - tempResFiles <- files - (invoc, tmp, files) - - let cvtresInvocation = cvtres + cmdLineArgs - - try - let mutable iFiles = 0 - - for ulr in unlinkedResources do - // REVIEW: What can go wrong here? What happens when the various file calls fail - // dump the unlinked resource bytes into the temp file - System.IO.File.WriteAllBytes(tempResFileNames.[iFiles], ulr) - iFiles <- iFiles + 1 - - // call cvtres.exe using the full cmd line string we've generated - - // check to see if the generated string is too long - if it is, fail with E_FAIL - if cvtresInvocation.Length >= MAX_PATH then - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - // REVIEW: We really shouldn't be calling out to cvtres - let mutable psi = System.Diagnostics.ProcessStartInfo cvtres - psi.Arguments <- cmdLineArgs - psi.CreateNoWindow <- true ; // REVIEW: For some reason, this still creates a window unless WindowStyle is set to hidden - psi.WindowStyle <- System.Diagnostics.ProcessWindowStyle.Hidden - let p = System.Diagnostics.Process.Start psi - - // Wait for the process to finish - p.WaitForExit() - - check "Process.Start" p.ExitCode // TODO: really need to check against 0 - - // Conversion was successful, so read the object file - objBytes <- FileSystem.ReadAllBytesShim tempObjFileName - //Array.Copy(objBytes, pbUnlinkedResource, pbUnlinkedResource.Length) - FileSystem.FileDelete tempObjFileName - finally - // clean up the temp files - List.iter (fun tempResFileName -> FileSystem.FileDelete tempResFileName) tempResFiles - - // Part 2: Read the COFF file held in pbUnlinkedResource, spit it out into pResBuffer and apply the COFF fixups - // pResBuffer will become the .rsrc section of the PE file - if (objBytes = Unchecked.defaultof) then - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - let hMod = bytesToIFH objBytes 0 - - if hMod.SizeOfOptionalHeader <> 0s then - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - let rsrc01Name = 0x313024637273722eL // ".rsrc$01" - let rsrc02Name = 0x323024637273722eL // ".rsrc$02" - let nullHdr = Unchecked.defaultof - let mutable rsrc01 = nullHdr - let mutable rsrc02 = nullHdr - - for i = 0 to int hMod.NumberOfSections do - let pSection = bytesToISH objBytes (IMAGE_FILE_HEADER.Width + (IMAGE_SECTION_HEADER.Width * i)) - if pSection.Name = rsrc01Name then - rsrc01 <- pSection - else if pSection.Name = rsrc02Name then - rsrc02 <- pSection - - if (nullHdr = rsrc01) || (nullHdr = rsrc02) then - // One of the rsrc sections wasn't found - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - let size = rsrc01.SizeOfRawData + rsrc02.SizeOfRawData - - let pResBuffer = Bytes.zeroCreate size - - // Copy over the raw data - Bytes.blit objBytes rsrc01.PointerToRawData pResBuffer 0 rsrc01.SizeOfRawData - - // map all the relocs in .rsrc$01 using the reloc and symbol tables in the COFF object - let symbolTableHead = hMod.PointerToSymbolTable - let IMAGE_SYM_CLASS_STATIC = 0x3uy - let IMAGE_SYM_TYPE_NULL = 0x0s - - let GetSymbolEntry (buffer: byte[]) (idx: int) = - bytesToIS buffer (symbolTableHead + (idx * IMAGE_SYMBOL.Width) ) - - for iReloc = 0 to int (rsrc01.NumberOfRelocations - 1s) do - let pReloc = bytesToIR objBytes (rsrc01.PointerToRelocations + (iReloc * IMAGE_RELOCATION.Width)) - let IdxSymbol = pReloc.SymbolTableIndex - let pSymbolEntry = GetSymbolEntry objBytes IdxSymbol - - // Ensure the symbol entry is valid for a resource - if ((pSymbolEntry.StorageClass <> IMAGE_SYM_CLASS_STATIC) || - (pSymbolEntry.Type <> IMAGE_SYM_TYPE_NULL) || - (pSymbolEntry.SectionNumber <> 3s)) then - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - // Ensure that RVA is a valid address inside rsrc02 - if pSymbolEntry.Value >= rsrc02.SizeOfRawData then - // pSymbolEntry.Value is too big - System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(E_FAIL) - - // store the value - let vBuff, vSize = dwToBytes (ulLinkedResourceBaseRVA + rsrc01.SizeOfRawData + pSymbolEntry.Value) - //Bytes.blit objBytes rsrc02.PointerToRawData pResBuffer pReloc.VirtualAddress rsrc02.SizeOfRawData - Bytes.blit vBuff 0 pResBuffer pReloc.VirtualAddress vSize - // Copy $02 (resource raw into pResBuffer - Bytes.blit objBytes rsrc02.PointerToRawData pResBuffer rsrc01.SizeOfRawData rsrc02.SizeOfRawData - - // return the buffer - pResBuffer - -let linkNativeResourcesManaged (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = - ignore fileType - ignore outputFilePath - +let linkNativeResources (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) = let resources = unlinkedResources |> Seq.map (fun s -> new MemoryStream(s)) |> Seq.map (fun s -> - let res = CVTres.CvtResFile.ReadResFile s + let res = CvtResFile.ReadResFile s s.Dispose() res) |> Seq.collect id // See MakeWin32ResourceList https://github.com/dotnet/roslyn/blob/f40b89234db51da1e1153c14af184e618504be41/src/Compilers/Core/Portable/Compilation/Compilation.cs |> Seq.map (fun r -> - WriteNativeRes.Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, + Win32Resource(data = r.data, codePage = 0u, languageId = uint32 r.LanguageId, id = int (int16 r.pstringName.Ordinal), name = r.pstringName.theString, typeId = int (int16 r.pstringType.Ordinal), typeName = r.pstringType.theString)) let bb = new System.Reflection.Metadata.BlobBuilder() - WriteNativeRes.NativeResourceWriter.SerializeWin32Resources(bb, resources, ulLinkedResourceBaseRVA) + NativeResourceWriter.SerializeWin32Resources(bb, resources, ulLinkedResourceBaseRVA) bb.ToArray() -let linkNativeResources (unlinkedResources: byte[] list) (ulLinkedResourceBaseRVA: int32) (fileType: PEFileType) (outputFilePath: string) = -#if ENABLE_MONO_SUPPORT - if IL.runningOnMono then - linkNativeResourcesManaged unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath - else -#endif -#if !FX_NO_LINKEDRESOURCES - linkNativeResourcesViaCVTres unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath -#else - linkNativeResourcesManaged unlinkedResources ulLinkedResourceBaseRVA fileType outputFilePath -#endif - let unlinkResource (ulLinkedResourceBaseRVA: int32) (pbLinkedResource: byte[]) = let mutable nResNodes = 0 diff --git a/src/absil/ilsupp.fsi b/src/absil/ilsupp.fsi index 6b70a89b45..a32cdb605f 100644 --- a/src/absil/ilsupp.fsi +++ b/src/absil/ilsupp.fsi @@ -35,9 +35,7 @@ type IStream = System.Runtime.InteropServices.ComTypes.IStream /// The function may be called twice, once with a zero-RVA and /// arbitrary buffer, and once with the real buffer. The size of the /// required buffer is returned. -type PEFileType = X86 | X64 - -val linkNativeResources: unlinkedResources:byte[] list -> rva:int32 -> PEFileType -> tempFilePath:string -> byte[] +val linkNativeResources: unlinkedResources:byte[] list -> rva:int32 -> byte[] val unlinkResource: int32 -> byte[] -> byte[] #if !FX_NO_PDB_WRITER diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 94ab05e66a..f46b33176c 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -3732,27 +3732,24 @@ let writeBinaryAndReportMappings (outfile, let nextPhys = align alignPhys (textSectionPhysLoc + textSectionSize) let textSectionPhysSize = nextPhys - textSectionPhysLoc let next = align alignVirt (textSectionAddr + textSectionSize) - - // .RSRC SECTION (DATA) + + // .RSRC SECTION (DATA) let dataSectionPhysLoc = nextPhys let dataSectionAddr = next let dataSectionVirtToPhys v = v - dataSectionAddr + dataSectionPhysLoc - - let resourceFormat = if modul.Is64Bit then Support.X64 else Support.X86 - - let nativeResources = + let nativeResources = match modul.NativeResources with | [] -> [||] | resources -> - let unlinkedResources = - resources |> List.map (function + let unlinkedResources = + resources |> List.map (function | ILNativeResource.Out bytes -> bytes - | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> + | ILNativeResource.In (fileName, linkedResourceBase, start, len) -> let linkedResource = File.ReadBinaryChunk (fileName, start, len) unlinkResource linkedResourceBase linkedResource) - + begin - try linkNativeResources unlinkedResources next resourceFormat (Path.GetDirectoryName outfile) + try linkNativeResources unlinkedResources next with e -> failwith ("Linking a native resource failed: "+e.Message+"") end diff --git a/src/absil/writenativeres.fs b/src/absil/writenativeres.fs deleted file mode 100644 index b2a7badf10..0000000000 --- a/src/absil/writenativeres.fs +++ /dev/null @@ -1,192 +0,0 @@ -// Quite literal port of https://github.com/dotnet/roslyn/blob/fab7134296816fc80019c60b0f5bef7400cf23ea/src/Compilers/Core/Portable/PEWriter/NativeResourceWriter.cs -// And its dependencies (some classes) -module internal FSharp.Compiler.AbstractIL.Internal.WriteNativeRes - -open System -open System.Collections.Generic -open System.Linq -open System.Diagnostics -open System.IO -open System.Reflection.Metadata -//open Roslyn.Utilities; - -type DWORD = System.UInt32 - -type Win32Resource(data : byte[], codePage : DWORD, languageId : DWORD, id : int, name : string, typeId : int, typeName : string) = - member val Data = data - member val CodePage = codePage - member val LanguageId = languageId - member val Id = id - member val Name = name - member val TypeId = typeId - member val TypeName = typeName - -type Directory(name, id) = - member val Name = name - member val ID = id - member val NumberOfNamedEntries = Unchecked.defaultof with get, set - member val NumberOfIdEntries = Unchecked.defaultof with get, set - member val Entries = new List() - -type NativeResourceWriter() = - static member private CompareResources (left : Win32Resource) (right : Win32Resource) = - let mutable (result : int) = NativeResourceWriter.CompareResourceIdentifiers (left.TypeId, left.TypeName, right.TypeId, right.TypeName) - if result = 0 - then NativeResourceWriter.CompareResourceIdentifiers (left.Id, left.Name, right.Id, right.Name) - else result - static member private CompareResourceIdentifiers(xOrdinal : int, xString : string, yOrdinal : int, yString : string) = - if xString = Unchecked.defaultof<_> - then - if yString = Unchecked.defaultof<_> - then xOrdinal - yOrdinal - else 1 - else - if yString = Unchecked.defaultof<_> - then - 1 - else String.Compare (xString, yString, StringComparison.OrdinalIgnoreCase) - static member SortResources(resources : IEnumerable) = - resources.OrderBy ((fun d -> d), Comparer<_>.Create(Comparison<_> NativeResourceWriter.CompareResources)) :> IEnumerable - static member SerializeWin32Resources(builder : BlobBuilder, theResources : IEnumerable, resourcesRva : int) = - let theResources = NativeResourceWriter.SortResources (theResources) - let mutable (typeDirectory : Directory) = new Directory(String.Empty, 0) - let mutable (nameDirectory : Directory) = Unchecked.defaultof<_> - let mutable (languageDirectory : Directory) = Unchecked.defaultof<_> - let mutable (lastTypeID : int) = Int32.MinValue - let mutable (lastTypeName : string) = Unchecked.defaultof<_> - let mutable (lastID : int) = Int32.MinValue - let mutable (lastName : string) = Unchecked.defaultof<_> - let mutable (sizeOfDirectoryTree : System.UInt32) = 16u - for (r : Win32Resource) in theResources do - let mutable (typeDifferent : System.Boolean) = r.TypeId < 0 && r.TypeName <> lastTypeName || r.TypeId > lastTypeID - if typeDifferent - then - lastTypeID <- r.TypeId - lastTypeName <- r.TypeName - if lastTypeID < 0 - then - Debug.Assert ((typeDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with types encoded as strings precede those encoded as ints") - typeDirectory.NumberOfNamedEntries <- typeDirectory.NumberOfNamedEntries + 1us - else - typeDirectory.NumberOfIdEntries <- typeDirectory.NumberOfIdEntries + 1us - sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u - nameDirectory <- new Directory(lastTypeName, lastTypeID) - typeDirectory.Entries.Add (nameDirectory) - if typeDifferent || r.Id < 0 && r.Name <> lastName || r.Id > lastID - then - lastID <- r.Id - lastName <- r.Name - if lastID < 0 - then - Debug.Assert ((nameDirectory.NumberOfIdEntries = 0us), "Not all Win32 resources with names encoded as strings precede those encoded as ints") - nameDirectory.NumberOfNamedEntries <- nameDirectory.NumberOfNamedEntries + 1us - else - nameDirectory.NumberOfIdEntries <- nameDirectory.NumberOfIdEntries + 1us - sizeOfDirectoryTree <- sizeOfDirectoryTree + 24u - languageDirectory <- new Directory(lastName, lastID) - nameDirectory.Entries.Add (languageDirectory) - languageDirectory.NumberOfIdEntries <- languageDirectory.NumberOfIdEntries + 1us - sizeOfDirectoryTree <- sizeOfDirectoryTree + 8u - languageDirectory.Entries.Add (r) - let mutable dataWriter = new BlobBuilder() - NativeResourceWriter.WriteDirectory (typeDirectory, builder, (0u), (0u), sizeOfDirectoryTree, resourcesRva, dataWriter) - builder.LinkSuffix (dataWriter) - builder.WriteByte (0uy) - builder.Align (4) - static member private WriteDirectory(directory : Directory, writer : BlobBuilder, offset : System.UInt32, level : System.UInt32, sizeOfDirectoryTree : System.UInt32, virtualAddressBase : int, dataWriter : BlobBuilder) = - writer.WriteUInt32 (0u) - writer.WriteUInt32 (0u) - writer.WriteUInt32 (0u) - writer.WriteUInt16 (directory.NumberOfNamedEntries) - writer.WriteUInt16 (directory.NumberOfIdEntries) - let mutable (n : System.UInt32) = uint32 directory.Entries.Count - let mutable (k : System.UInt32) = offset + 16u + n * 8u - do - let mutable (i : uint32) = 0u - while (i < n) do - let mutable (id : int) = Unchecked.defaultof - let mutable (name : string) = Unchecked.defaultof - let mutable (nameOffset : System.UInt32) = uint32 dataWriter.Count + sizeOfDirectoryTree - let mutable (directoryOffset : System.UInt32) = k - let isDir = - match directory.Entries.[int i] with - | :? Directory as subDir -> - id <- subDir.ID - name <- subDir.Name - if level = 0u - then k <- k + NativeResourceWriter.SizeOfDirectory (subDir) - else k <- k + 16u + 8u * uint32 subDir.Entries.Count - true - | :? Win32Resource as r -> - id <- - if level = 0u - then r.TypeId - else - if level = 1u - then r.Id - else int r.LanguageId - name <- - if level = 0u - then r.TypeName - else - if level = 1u - then r.Name - else Unchecked.defaultof<_> - dataWriter.WriteUInt32 ((uint32 virtualAddressBase + sizeOfDirectoryTree + 16u + uint32 dataWriter.Count)) - let mutable (data : byte[]) = (new List(r.Data)).ToArray () - dataWriter.WriteUInt32 (uint32 data.Length) - dataWriter.WriteUInt32 (r.CodePage) - dataWriter.WriteUInt32 (0u) - dataWriter.WriteBytes (data) - while (dataWriter.Count % 4 <> 0) do - dataWriter.WriteByte (0uy) - false - | e -> failwithf "Unknown entry %s" (if isNull e then "" else e.GetType().FullName) - if id >= 0 - then writer.WriteInt32 (id) - else - if name = Unchecked.defaultof<_> - then name <- String.Empty - writer.WriteUInt32 (nameOffset ||| 0x80000000u) - dataWriter.WriteUInt16 (uint16 name.Length) - dataWriter.WriteUTF16 (name) - if isDir - then writer.WriteUInt32 (directoryOffset ||| 0x80000000u) - else writer.WriteUInt32 (nameOffset) - i <- i + 1u - - k <- offset + 16u + n * 8u - do - let mutable (i : int) = 0 - while (uint32 i < n) do - match directory.Entries.[i] with - | :? Directory as subDir -> - NativeResourceWriter.WriteDirectory (subDir, writer, k, (level + 1u), sizeOfDirectoryTree, virtualAddressBase, dataWriter) - if level = 0u - then k <- k + NativeResourceWriter.SizeOfDirectory (subDir) - else k <- k + 16u + 8u * uint32 subDir.Entries.Count - | _ -> () - i <- i + 1 - () - static member private SizeOfDirectory(directory : Directory) = - let mutable (n : System.UInt32) = uint32 directory.Entries.Count - let mutable (size : System.UInt32) = 16u + 8u * n - do - let mutable (i : int) = 0 - while (uint32 i < n) do - match directory.Entries.[i] with - | :? Directory as subDir -> - size <- size + 16u + 8u * uint32 subDir.Entries.Count - | _ -> () - i <- i + 1 - size - (* - static member SerializeWin32Resources(builder : BlobBuilder, resourceSections : ResourceSection, resourcesRva : int) = - let mutable sectionWriter = new BlobWriter(builder.ReserveBytes (resourceSections.SectionBytes.Length)) - sectionWriter.WriteBytes (resourceSections.SectionBytes) - let mutable readStream = new MemoryStream(resourceSections.SectionBytes) - let mutable reader = new BinaryReader(readStream) - for (addressToFixup : int) in resourceSections.Relocations do - sectionWriter.Offset <- addressToFixup - reader.BaseStream.Position <- addressToFixup - sectionWriter.WriteUInt32 (reader.ReadUInt32 () + resourcesRva :> System.UInt32) - ()*) \ No newline at end of file diff --git a/src/absil/writenativeres.fsi b/src/absil/writenativeres.fsi deleted file mode 100644 index 8728e5d538..0000000000 --- a/src/absil/writenativeres.fsi +++ /dev/null @@ -1,34 +0,0 @@ - -module internal FSharp.Compiler.AbstractIL.Internal.WriteNativeRes - - -open System -open System.Collections.Generic -open System.Linq -open System.Diagnostics -open System.IO -open System.Reflection.Metadata -//open Roslyn.Utilities; - -type DWORD = System.UInt32 - -type Win32Resource = - class - new : data:byte [] * codePage:DWORD * languageId:DWORD * id:int * - name:string * typeId:int * typeName:string -> Win32Resource - member CodePage : DWORD - member Data : byte [] - member Id : int - member LanguageId : DWORD - member Name : string - member TypeId : int - member TypeName : string - end - -[] -type NativeResourceWriter = - static member SortResources : resources : IEnumerable -> IEnumerable - static member SerializeWin32Resources : builder:BlobBuilder * theResources:IEnumerable * resourcesRva:int -> unit - (* - static member SerializeWin32Resources(builder : BlobBuilder, resourceSections : ResourceSection, resourcesRva : int) -> unit - ()*) \ No newline at end of file diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 504bde5fa3..3d8e33082c 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -82,7 +82,10 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let file = try let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") - File.ReadAllText(depsJsonPath) + if File.Exists(depsJsonPath) then + File.ReadAllText(depsJsonPath) + else + "" with _ -> "" let tfmPrefix=".NETCoreApp,Version=v" diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 831597c031..416e6967e5 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1465,3 +1465,5 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3301,chkInvalidFunctionReturnType,"The function or method has an invalid return type '%s'. This is not permitted by the rules of Common IL." useSdkRefs,"Use reference assemblies for .NET framework references when available (Enabled by default)." fSharpBannerVersion,"%s for F# %s" +nativeResourceFormatError,"Stream does not begin with a null resource and is not in '.RES' format." +nativeResourceHeaderMalformed,"Resource header beginning at offset %s is malformed." \ No newline at end of file diff --git a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs index f0fd45b486..63c9bf1245 100644 --- a/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs +++ b/src/fsharp/FSharp.Build/FSharpEmbedResourceText.fs @@ -168,10 +168,11 @@ type FSharpEmbedResourceText() = match txt.[i+1] with | 'd' -> AddHole "System.Int32" | 'x' -> AddHole "System.UInt32" + | 'X' -> AddHole "System.UInt32" | 'f' -> AddHole "System.Double" | 's' -> AddHole "System.String" | '%' -> sb.Append('%') |> ignore - | c -> Err(filename, lineNum, sprintf "'%%%c' is not a valid sequence, only %%d %%x %%f %%s or %%%%" c) + | c -> Err(filename, lineNum, sprintf "'%%%c' is not a valid sequence, only %%d %%x %%X %%f %%s or %%%%" c) i <- i + 2 else match txt.[i] with @@ -282,7 +283,6 @@ open Printf match fmt.[i] with | '%' -> go args ty (i+1) | 'd' - | 'x' | 'f' | 's' -> buildFunctionForOneArgPat ty (fun rty n -> go (n :: args) rty (i+1)) | _ -> failwith ""bad format specifier"" diff --git a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj index 98a5f99134..1b8ddb24d3 100644 --- a/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj +++ b/src/fsharp/FSharp.Compiler.Private/FSharp.Compiler.Private.fsproj @@ -224,17 +224,11 @@ AbsIL\ilsign.fs - - AbsIL\writenativeres.fsi + + AbsIL\ilnativeres.fsi - - AbsIL\writenativeres.fs - - - AbsIL\cvtres.fsi - - - AbsIL\cvtres.fs + + AbsIL\ilnativeres.fs AbsIL\ilsupp.fsi diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 3ea3849026..b733a67973 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -496,11 +496,10 @@ module BinaryGenerationUtilities = for _ in 1..(4 - (initialAlignment + v.Length) % 4) % 4 do yield 0x0uy |] -// Generate nodes in a .res file format. These are then linked by Abstract IL using the -// linkNativeResources function, which invokes the cvtres.exe utility -module ResFileFormat = +// Generate nodes in a .res file format. These are then linked by Abstract IL using linkNativeResources +module ResFileFormat = open BinaryGenerationUtilities - + let ResFileNode(dwTypeID, dwNameID, wMemFlags, wLangID, data: byte[]) = [| yield! i32 data.Length // DWORD ResHdr.dwDataSize yield! i32 0x00000020 // dwHeaderSize diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 7ff138f6ad..6d7b18bbc1 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -7,6 +7,16 @@ {0} pro F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 1645cfc2d5..db967ff096 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -7,6 +7,16 @@ {0} für F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 279d16a7c9..3c5483e14c 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -7,6 +7,16 @@ {0} para F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 0be131277c..f96f5b0a85 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -7,6 +7,16 @@ {0} pour F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 53ca4ca804..0aba0498ab 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -7,6 +7,16 @@ {0} per F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 25ad9ef701..da2d1fc518 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -7,6 +7,16 @@ F# {1} の {0} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index f1a4302d50..9f4f6f7a60 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -7,6 +7,16 @@ F# {1}용 {0} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index f50ce51d8d..e25e176be6 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -7,6 +7,16 @@ {0} dla języka F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index cf3fbbae23..ba6e595989 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -7,6 +7,16 @@ {0} para F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index f4c4134fda..66ba9024b4 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -7,6 +7,16 @@ {0} для F# {1} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 216c29567d..3939d5003e 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -7,6 +7,16 @@ F# {1} için {0} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index b2a9493d15..f8d10233dc 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -7,6 +7,16 @@ F# {1} 的 {0} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index d9c1996586..efdcb0ccb7 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -7,6 +7,16 @@ F # {1} 的 {0} + + Stream does not begin with a null resource and is not in '.RES' format. + Stream does not begin with a null resource and is not in '.RES' format. + + + + Resource header beginning at offset {0} is malformed. + Resource header beginning at offset {0} is malformed. + + Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) Specify algorithm for calculating source file checksum stored in PDB. Supported values are: SHA1 or SHA256 (default) diff --git a/vsintegration/Utils/LanguageServiceProfiling/Options.fs b/vsintegration/Utils/LanguageServiceProfiling/Options.fs index 574ff34158..19fc3a5251 100644 --- a/vsintegration/Utils/LanguageServiceProfiling/Options.fs +++ b/vsintegration/Utils/LanguageServiceProfiling/Options.fs @@ -77,10 +77,8 @@ let FCS (repositoryDir: string) : Options = @"src\absil\ilprint.fs" @"src\absil\ilmorph.fsi" @"src\absil\ilmorph.fs" - @"src\absil\writenativeres.fsi" - @"src\absil\writenativeres.fs" - @"src\absil\cvtres.fsi" - @"src\absil\cvtres.fs" + @"src\absil\ilwritenativeres.fsi" + @"src\absil\ilwritenativeres.fs" @"src\absil\ilsupp.fsi" @"src\absil\ilsupp.fs" @"src\fsharp\FSharp.Compiler.Service\ilpars.fs" From 5e071912d17f4dd0dae2d285fec6158c6f17b59c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 4 Sep 2019 10:28:17 -0700 Subject: [PATCH 056/146] Update dependencies from https://github.com/dotnet/arcade build 20190903.5 (#7493) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19453.5 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5c37dee817..06195809bc 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 316c80d0c373be63f991cc4d586db85273c1c553 + 6e94f0da0f12c7663ab39ce5bd6a67c4ab58b5ee diff --git a/global.json b/global.json index d83c45f986..4ec640a5ac 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19430.3", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19453.5", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 49eeb63f993d97c848bd6f8f8af7856acf18f8a1 Mon Sep 17 00:00:00 2001 From: Nelson Wu Date: Wed, 4 Sep 2019 14:24:15 -0700 Subject: [PATCH 057/146] Disallow attributes on type extensions (#7481) * add test for feature * add error logic to typechecker * update strings * address comments * update tests --- src/fsharp/FSComp.txt | 1 + src/fsharp/TypeChecker.fs | 5 +++ src/fsharp/xlf/FSComp.txt.cs.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.de.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.es.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.fr.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.it.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.ja.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.ko.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.pl.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.ru.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.tr.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 5 +++ src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 5 +++ .../Compiler/Language/TypeAttributeTests.fs | 44 +++++++++++++++++++ tests/fsharp/FSharpSuite.Tests.fsproj | 1 + 17 files changed, 116 insertions(+) create mode 100644 tests/fsharp/Compiler/Language/TypeAttributeTests.fs diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 416e6967e5..12b93344bc 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1461,6 +1461,7 @@ notAFunctionButMaybeDeclaration,"This value is not a function and cannot be appl 3243,parsInvalidAnonRecdExpr,"Invalid anonymous record expression" 3244,parsInvalidAnonRecdType,"Invalid anonymous record type" 3245,tcCopyAndUpdateNeedsRecordType,"The input to a copy-and-update expression that creates an anonymous record must be either an anonymous record or a record" +3246,tcAugmentationsCannotHaveAttributes,"Attributes cannot be applied to type extensions." 3300,chkInvalidFunctionParameterType,"The parameter '%s' has an invalid type '%s'. This is not permitted by the rules of Common IL." 3301,chkInvalidFunctionReturnType,"The function or method has an invalid return type '%s'. This is not permitted by the rules of Common IL." useSdkRefs,"Use reference assemblies for .NET framework references when available (Enabled by default)." diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 7610c4f209..091b2f6873 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -16429,6 +16429,11 @@ module TcDeclarations = if not (isNil members) && tcref.IsTypeAbbrev then errorR(Error(FSComp.SR.tcTypeAbbreviationsCannotHaveAugmentations(), tyDeclRange)) + let (ComponentInfo (attributes, _, _, _, _, _, _, _)) = synTyconInfo + if not (List.isEmpty attributes) && (declKind = ExtrinsicExtensionBinding || declKind = IntrinsicExtensionBinding) then + let attributeRange = (List.head attributes).Range + error(Error(FSComp.SR.tcAugmentationsCannotHaveAttributes(), attributeRange)) + MutRecDefnsPhase2DataForTycon(tyconOpt, innerParent, declKind, tcref, baseValOpt, safeInitInfo, declaredTyconTypars, members, tyDeclRange, newslotsOK, fixupFinalAttrs)) // By now we've established the full contents of type definitions apart from their diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 6d7b18bbc1..ae3bb9c94e 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. Není definovaný obor názvů {0}. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index db967ff096..32e1555f78 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. Der Namespace "{0}" ist nicht definiert. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 3c5483e14c..6b2a4bd53b 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. El espacio de nombres "{0}" no está definido. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index f96f5b0a85..318c5bfcf9 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. L'espace de noms '{0}' n'est pas défini. diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 0aba0498ab..2afde11c04 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. Lo spazio dei nomi '{0}' non è definito. diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index da2d1fc518..5e2e7ccd35 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. 名前空間 '{0}' が定義されていません。 diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 9f4f6f7a60..1d0c84e0e7 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. '{0}' 네임스페이스가 정의되지 않았습니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index e25e176be6..91f5bc3c2e 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. Nie zdefiniowano przestrzeni nazw „{0}”. diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index ba6e595989..1f723d5212 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. O namespace '{0}' não está definido. diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 66ba9024b4..dc30296048 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. Пространство имен "{0}" не определено. diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 3939d5003e..1207af6753 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. '{0}' ad alanı tanımlı değil. diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index f8d10233dc..4a54c529b1 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. 未定义命名空间“{0}”。 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index efdcb0ccb7..b58f81f6f2 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -27,6 +27,11 @@ Algorithm '{0}' is not supported + + Attributes cannot be applied to type extensions. + Attributes cannot be applied to type extensions. + + The namespace '{0}' is not defined. 未定義命名空間 '{0}'。 diff --git a/tests/fsharp/Compiler/Language/TypeAttributeTests.fs b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs new file mode 100644 index 0000000000..44a1cac08b --- /dev/null +++ b/tests/fsharp/Compiler/Language/TypeAttributeTests.fs @@ -0,0 +1,44 @@ +namespace FSharp.Compiler.UnitTests + +open NUnit.Framework +open FSharp.Compiler.SourceCodeServices + +[] +module TypeAttributeTests = + + [] + let ``Attribute can be applied to type definition``() = + CompilerAssert.Pass + """ +[] +type Point = {x:int; y:int} + """ + [] + let ``Attribute cannot be applied to optional type extension``() = + CompilerAssert.TypeCheckSingleError + """ +open System + +[] +type String with + member this.test = 42 + """ + FSharpErrorSeverity.Error + 3246 + (4, 1, 4, 15) + "Attributes cannot be applied to type extensions." + + [] + let ``Attribute cannot be applied to intrinsic type extension``() = + CompilerAssert.TypeCheckSingleError + """ +type Point = {x:int; y:int} + +[] +type Point with + member this.test = 42 + """ + FSharpErrorSeverity.Error + 3246 + (4, 1, 4, 15) + "Attributes cannot be applied to type extensions." diff --git a/tests/fsharp/FSharpSuite.Tests.fsproj b/tests/fsharp/FSharpSuite.Tests.fsproj index 1b1d3386ac..fc1e8d0e4b 100644 --- a/tests/fsharp/FSharpSuite.Tests.fsproj +++ b/tests/fsharp/FSharpSuite.Tests.fsproj @@ -55,6 +55,7 @@ + From 7089d2ac8c64e91981f05b4a702a96e04cf9b7ff Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 5 Sep 2019 09:45:42 -0700 Subject: [PATCH 058/146] Update dependencies from https://github.com/dotnet/arcade build 20190904.31 (#7497) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19454.31 --- eng/Version.Details.xml | 4 +- eng/common/sdl/execute-all-sdl-tools.ps1 | 17 +- ...lic-dev-release.yml => netcore-dev-30.yml} | 44 ++--- .../post-build/channels/netcore-dev-31.yml | 165 ++++++++++++++++++ .../post-build/channels/netcore-dev-5.yml | 40 ++--- ...-servicing.yml => netcore-internal-30.yml} | 36 ++-- ...lic-release.yml => netcore-release-30.yml} | 39 +++-- .../channels/netcore-release-31.yml | 160 +++++++++++++++++ .../channels/netcore-tools-latest.yml | 45 +++-- .../channels/public-validation-release.yml | 37 ++-- .../templates/post-build/common-variables.yml | 8 + .../templates/post-build/post-build.yml | 21 ++- global.json | 2 +- 13 files changed, 491 insertions(+), 127 deletions(-) rename eng/common/templates/post-build/channels/{public-dev-release.yml => netcore-dev-30.yml} (91%) create mode 100644 eng/common/templates/post-build/channels/netcore-dev-31.yml rename eng/common/templates/post-build/channels/{internal-servicing.yml => netcore-internal-30.yml} (91%) rename eng/common/templates/post-build/channels/{public-release.yml => netcore-release-30.yml} (87%) create mode 100644 eng/common/templates/post-build/channels/netcore-release-31.yml diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 06195809bc..6d55461513 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 6e94f0da0f12c7663ab39ce5bd6a67c4ab58b5ee + 00d8aa82b488f321204a0e69a81399af9df276a1 diff --git a/eng/common/sdl/execute-all-sdl-tools.ps1 b/eng/common/sdl/execute-all-sdl-tools.ps1 index fa239484f2..01799d63ff 100644 --- a/eng/common/sdl/execute-all-sdl-tools.ps1 +++ b/eng/common/sdl/execute-all-sdl-tools.ps1 @@ -45,6 +45,7 @@ if ($GuardianPackageName) { $guardianCliLocation = $GuardianCliLocation } +$workingDirectory = (Split-Path $SourceDirectory -Parent) $ValidPath = Test-Path $guardianCliLocation if ($ValidPath -eq $False) @@ -53,13 +54,13 @@ if ($ValidPath -eq $False) exit 1 } -& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory (Split-Path $SourceDirectory -Parent) -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel -$gdnFolder = Join-Path (Split-Path $SourceDirectory -Parent) ".gdn" +& $(Join-Path $PSScriptRoot "init-sdl.ps1") -GuardianCliLocation $guardianCliLocation -Repository $RepoName -BranchName $BranchName -WorkingDirectory $workingDirectory -AzureDevOpsAccessToken $AzureDevOpsAccessToken -GuardianLoggerLevel $GuardianLoggerLevel +$gdnFolder = Join-Path $workingDirectory ".gdn" if ($TsaOnboard) { if ($TsaCodebaseName -and $TsaNotificationEmail -and $TsaCodebaseAdmin -and $TsaBugAreaPath) { - Write-Host "$guardianCliLocation tsa-onboard --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel" - & $guardianCliLocation tsa-onboard --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + Write-Host "$guardianCliLocation tsa-onboard --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $workingDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-onboard --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $workingDirectory --logger-level $GuardianLoggerLevel if ($LASTEXITCODE -ne 0) { Write-Host "Guardian tsa-onboard failed with exit code $LASTEXITCODE." exit $LASTEXITCODE @@ -71,10 +72,10 @@ if ($TsaOnboard) { } if ($ArtifactToolsList -and $ArtifactToolsList.Count -gt 0) { - & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $ArtifactsDirectory -TargetDirectory $ArtifactsDirectory -GdnFolder $gdnFolder -ToolsList $ArtifactToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams + & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $workingDirectory -TargetDirectory $ArtifactsDirectory -GdnFolder $gdnFolder -ToolsList $ArtifactToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams } if ($SourceToolsList -and $SourceToolsList.Count -gt 0) { - & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $ArtifactsDirectory -TargetDirectory $SourceDirectory -GdnFolder $gdnFolder -ToolsList $SourceToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams + & $(Join-Path $PSScriptRoot "run-sdl.ps1") -GuardianCliLocation $guardianCliLocation -WorkingDirectory $workingDirectory -TargetDirectory $SourceDirectory -GdnFolder $gdnFolder -ToolsList $SourceToolsList -AzureDevOpsAccessToken $AzureDevOpsAccessToken -UpdateBaseline $UpdateBaseline -GuardianLoggerLevel $GuardianLoggerLevel -CrScanAdditionalRunConfigParams $CrScanAdditionalRunConfigParams -PoliCheckAdditionalRunConfigParams $PoliCheckAdditionalRunConfigParams } if ($UpdateBaseline) { @@ -86,8 +87,8 @@ if ($TsaPublish) { if (-not $TsaRepositoryName) { $TsaRepositoryName = "$($Repository)-$($BranchName)" } - Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel" - & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --onboard $True --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $ArtifactsDirectory --logger-level $GuardianLoggerLevel + Write-Host "$guardianCliLocation tsa-publish --all-tools --repository-name `"$TsaRepositoryName`" --branch-name `"$TsaBranchName`" --build-number `"$BuildNumber`" --codebase-name `"$TsaCodebaseName`" --notification-alias `"$TsaNotificationEmail`" --codebase-admin `"$TsaCodebaseAdmin`" --instance-url `"$TsaInstanceUrl`" --project-name `"$TsaProjectName`" --area-path `"$TsaBugAreaPath`" --iteration-path `"$TsaIterationPath`" --working-directory $workingDirectory --logger-level $GuardianLoggerLevel" + & $guardianCliLocation tsa-publish --all-tools --repository-name "$TsaRepositoryName" --branch-name "$TsaBranchName" --build-number "$BuildNumber" --onboard $True --codebase-name "$TsaCodebaseName" --notification-alias "$TsaNotificationEmail" --codebase-admin "$TsaCodebaseAdmin" --instance-url "$TsaInstanceUrl" --project-name "$TsaProjectName" --area-path "$TsaBugAreaPath" --iteration-path "$TsaIterationPath" --working-directory $workingDirectory --logger-level $GuardianLoggerLevel if ($LASTEXITCODE -ne 0) { Write-Host "Guardian tsa-publish failed with exit code $LASTEXITCODE." exit $LASTEXITCODE diff --git a/eng/common/templates/post-build/channels/public-dev-release.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml similarity index 91% rename from eng/common/templates/post-build/channels/public-dev-release.yml rename to eng/common/templates/post-build/channels/netcore-dev-30.yml index afa9542148..3ce7ce4d6e 100644 --- a/eng/common/templates/post-build/channels/public-dev-release.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml @@ -5,11 +5,11 @@ parameters: publishInstallersAndChecksums: false stages: -- stage: Publish +- stage: NetCore_Dev30_Publish dependsOn: validate variables: - template: ../common-variables.yml - displayName: Developer Channel + displayName: .NET Core 3.0 Dev Publishing jobs: - template: ../setup-maestro-vars.yml @@ -39,8 +39,8 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' @@ -85,7 +85,7 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(PublicDevRelease_30_Channel_Id) /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) @@ -93,23 +93,23 @@ stages: /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - + - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') @@ -123,16 +123,16 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false -- stage: PublishValidation - displayName: Publish Validation +- stage: NetCore_Dev30_Publish_Validation + displayName: .NET Core 3.0 Dev Publish Validation variables: - - template: ../common-variables.yml + - template: ../common-variables.yml jobs: - template: ../setup-maestro-vars.yml @@ -160,6 +160,6 @@ stages: parameters: ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} - - template: ../promote-build.yml - parameters: + - template: ../promote-build.yml + parameters: ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml new file mode 100644 index 0000000000..d40aaacc4f --- /dev/null +++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml @@ -0,0 +1,165 @@ +parameters: + enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false + +stages: +- stage: NetCore_Dev31_Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: .NET Core 3.1 Dev Publishing + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' + /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} + + - job: + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - group: DotNet-Blob-Feed + - group: AzureDevOps-Artifact-Feeds-Pats + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Add Assets Location + env: + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ChannelId=$(PublicDevRelease_31_Channel_Id) + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + ${{ parameters.artifactsPublishingAdditionalParameters }} + + - task: NuGetCommand@2 + displayName: Publish Packages to AzDO Feed + condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') + inputs: + command: push + vstsFeed: $(AzDoFeedName) + packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg + publishVstsFeed: $(AzDoFeedName) + + - task: PowerShell@2 + displayName: Publish Blobs to AzDO Feed + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 + arguments: -FeedName $(AzDoFeedName) + -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) + enabled: false + + +- stage: NetCore_Dev31_Publish_Validation + displayName: .NET Core 3.1 Dev Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: + - job: + displayName: Symbol Availability + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Check Symbol Availability + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) + + - template: ../darc-gather-drop.yml + parameters: + ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 812def3154..584185c2a7 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -9,7 +9,7 @@ stages: dependsOn: validate variables: - template: ../common-variables.yml - displayName: .NET Core 5 Dev Channel + displayName: .NET Core 5 Dev Publishing jobs: - template: ../setup-maestro-vars.yml @@ -39,8 +39,8 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' @@ -85,7 +85,7 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(NetCore_5_Dev_Channel_Id) /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) @@ -93,15 +93,15 @@ stages: /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) @@ -109,7 +109,7 @@ stages: /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - + - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') @@ -123,16 +123,16 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false -- stage: NetCore_Dev5_PublishValidation - displayName: Publish Validation +- stage: NetCore_Dev5_Publish_Validation + displayName: .NET Core 5 Dev Publish Validation variables: - - template: ../common-variables.yml + - template: ../common-variables.yml jobs: - template: ../setup-maestro-vars.yml @@ -160,6 +160,6 @@ stages: parameters: ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} - - template: ../promote-build.yml - parameters: + - template: ../promote-build.yml + parameters: ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/internal-servicing.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml similarity index 91% rename from eng/common/templates/post-build/channels/internal-servicing.yml rename to eng/common/templates/post-build/channels/netcore-internal-30.yml index 4ca36358d9..8bf88fd49e 100644 --- a/eng/common/templates/post-build/channels/internal-servicing.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -4,11 +4,11 @@ parameters: artifactsPublishingAdditionalParameters: '' stages: -- stage: IS_Publish +- stage: NetCore_30_Internal_Servicing_Publishing dependsOn: validate variables: - template: ../common-variables.yml - displayName: Internal Servicing + displayName: .NET Core 3.0 Internal Servicing Publishing jobs: - template: ../setup-maestro-vars.yml @@ -38,8 +38,8 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' @@ -84,7 +84,7 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(InternalServicing_30_Channel_Id) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) @@ -95,15 +95,15 @@ stages: /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - + - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') @@ -117,7 +117,7 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false @@ -125,11 +125,11 @@ stages: - template: ../trigger-subscription.yml parameters: ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} - -- stage: IS_PublishValidation - displayName: Publish Validation + +- stage: NetCore_30_Internal_Servicing_Publish_Validation + displayName: .NET Core 3.0 Internal Servicing Publish Validation variables: - - template: ../common-variables.yml + - template: ../common-variables.yml jobs: - template: ../setup-maestro-vars.yml diff --git a/eng/common/templates/post-build/channels/public-release.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml similarity index 87% rename from eng/common/templates/post-build/channels/public-release.yml rename to eng/common/templates/post-build/channels/netcore-release-30.yml index 7ec1f89c08..dc9541d9ec 100644 --- a/eng/common/templates/post-build/channels/public-release.yml +++ b/eng/common/templates/post-build/channels/netcore-release-30.yml @@ -4,11 +4,11 @@ parameters: artifactsPublishingAdditionalParameters: '' stages: -- stage: PubRel_Publish +- stage: NetCore_Release30_Publish dependsOn: validate variables: - template: ../common-variables.yml - displayName: Public Release + displayName: .NET Core 3.0 Release Publishing jobs: - template: ../setup-maestro-vars.yml @@ -38,8 +38,8 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' @@ -84,27 +84,27 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(PublicRelease_30_Channel_Id) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - + - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') @@ -118,7 +118,7 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false @@ -127,10 +127,10 @@ stages: parameters: ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} -- stage: PubRel_PublishValidation - displayName: Publish Validation +- stage: NetCore_Release30_Publish_Validation + displayName: .NET Core 3.0 Release Publish Validation variables: - - template: ../common-variables.yml + - template: ../common-variables.yml jobs: - template: ../setup-maestro-vars.yml @@ -138,7 +138,8 @@ stages: - job: displayName: Symbol Availability dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)) + condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)), + contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id))) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml new file mode 100644 index 0000000000..4dcf4ba9c8 --- /dev/null +++ b/eng/common/templates/post-build/channels/netcore-release-31.yml @@ -0,0 +1,160 @@ +parameters: + enableSymbolValidation: true + symbolPublishingAdditionalParameters: '' + artifactsPublishingAdditionalParameters: '' + +stages: +- stage: NetCore_Release31_Publish + dependsOn: validate + variables: + - template: ../common-variables.yml + displayName: .NET Core 3.1 Release Publishing + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' + /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} + + - job: publish_assets + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - group: DotNet-Blob-Feed + - group: AzureDevOps-Artifact-Feeds-Pats + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: PowerShell@2 + displayName: Publish + env: + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ChannelId=$(PublicRelease_31_Channel_Id) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) + /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) + /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) + /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) + /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:Configuration=Release + ${{ parameters.artifactsPublishingAdditionalParameters }} + + - task: NuGetCommand@2 + displayName: Publish Packages to AzDO Feed + condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') + inputs: + command: push + vstsFeed: $(AzDoFeedName) + packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg + publishVstsFeed: $(AzDoFeedName) + + - task: PowerShell@2 + displayName: Publish Blobs to AzDO Feed + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 + arguments: -FeedName $(AzDoFeedName) + -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ + -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) + enabled: false + + - template: ../trigger-subscription.yml + parameters: + ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} + +- stage: NetCore_Release31_Publish_Validation + displayName: .NET Core 3.1 Release Publish Validation + variables: + - template: ../common-variables.yml + jobs: + - template: ../setup-maestro-vars.yml + + - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: + - job: + displayName: Symbol Availability + dependsOn: setupMaestroVars + condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)), + contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id))) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + + - task: PowerShell@2 + displayName: Check Symbol Availability + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 + arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) + + - template: ../promote-build.yml + parameters: + ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index c2d2076730..4d9f197d43 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -3,13 +3,15 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false + publishToAzureDevOpsFeeds: false + azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' stages: - stage: NetCore_Tools_Latest_Publish dependsOn: validate variables: - template: ../common-variables.yml - displayName: .NET Tools - Latest + displayName: .NET Tools - Latest Publishing jobs: - template: ../setup-maestro-vars.yml @@ -39,8 +41,8 @@ stages: inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet - /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) - /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' @@ -85,7 +87,7 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(NetCore_Tools_Latest_Channel_Id) /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) @@ -93,23 +95,28 @@ stages: /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) ${{ parameters.artifactsPublishingAdditionalParameters }} - + - task: NuGetCommand@2 displayName: Publish Packages to AzDO Feed condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') @@ -123,16 +130,16 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false - stage: NetCore_Tools_Latest_PublishValidation - displayName: Publish Validation + displayName: .NET Tools - Latest Publish Validation variables: - - template: ../common-variables.yml + - template: ../common-variables.yml jobs: - template: ../setup-maestro-vars.yml @@ -160,6 +167,6 @@ stages: parameters: ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} - - template: ../promote-build.yml - parameters: + - template: ../promote-build.yml + parameters: ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index 12124d6215..e306fa87bf 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,13 +1,15 @@ parameters: artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false + publishToAzureDevOpsFeeds: false + azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' stages: - stage: PVR_Publish dependsOn: validate variables: - template: ../common-variables.yml - displayName: Validation Channel + displayName: .NET Tools - Validation Publishing jobs: - template: ../setup-maestro-vars.yml @@ -49,7 +51,7 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ChannelId=$(PublicValidationRelease_30_Channel_Id) /p:ArtifactsCategory=$(_DotNetValidationArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) @@ -57,21 +59,26 @@ stages: /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' /p:Configuration=Release /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - task: NuGetCommand@2 @@ -87,14 +94,14 @@ stages: displayName: Publish Blobs to AzDO Feed inputs: filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) + arguments: -FeedName $(AzDoFeedName) -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) enabled: false - stage: PVR_PublishValidation - displayName: Publish Validation + displayName: .NET Tools - Validation Publish Validation variables: - template: ../common-variables.yml jobs: @@ -104,6 +111,6 @@ stages: parameters: ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} - - template: ../promote-build.yml - parameters: + - template: ../promote-build.yml + parameters: ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 7b3fdb1361..49712b3a60 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -6,6 +6,10 @@ variables: - name: PublicDevRelease_30_Channel_Id value: 3 + # .NET Core 3.1 Dev + - name: PublicDevRelease_31_Channel_Id + value: 260 + # .NET Core 5 Dev - name: NetCore_5_Dev_Channel_Id value: 131 @@ -26,6 +30,10 @@ variables: - name: PublicRelease_30_Channel_Id value: 19 + # .NET Core 3.1 Release + - name: PublicRelease_31_Channel_Id + value: 129 + # Whether the build is internal or not - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 34667b6c09..ae376b7747 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -4,6 +4,7 @@ parameters: enableSymbolValidation: false enableNugetValidation: true publishInstallersAndChecksums: false + enableAzDONuGetFeeds: true SDLValidationParameters: enable: false continueOnError: false @@ -102,7 +103,14 @@ stages: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} -- template: \eng\common\templates\post-build\channels\public-dev-release.yml +- template: \eng\common\templates\post-build\channels\netcore-dev-30.yml + parameters: + enableSymbolValidation: ${{ parameters.enableSymbolValidation }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + +- template: \eng\common\templates\post-build\channels\netcore-dev-31.yml parameters: enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} @@ -115,18 +123,25 @@ stages: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} + +- template: \eng\common\templates\post-build\channels\netcore-release-30.yml + parameters: + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} -- template: \eng\common\templates\post-build\channels\public-release.yml +- template: \eng\common\templates\post-build\channels\netcore-release-31.yml parameters: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} -- template: \eng\common\templates\post-build\channels\internal-servicing.yml +- template: \eng\common\templates\post-build\channels\netcore-internal-30.yml parameters: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/global.json b/global.json index 4ec640a5ac..0ac104d10c 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19453.5", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19454.31", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 8e262590761c7e70dddd80c5fbe7b12c40942368 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 5 Sep 2019 15:35:49 -0700 Subject: [PATCH 059/146] add VS insertion logic to build pipeline (#7500) --- azure-pipelines.yml | 11 ++++ eng/release/insert-into-vs.yml | 54 ++++++++++++++++++ eng/release/scripts/GetAssemblyVersions.ps1 | 28 +++++++++ .../scripts/GetDefaultConfigVersions.ps1 | 29 ++++++++++ eng/release/scripts/GetPublishUrls.ps1 | 57 +++++++++++++++++++ 5 files changed, 179 insertions(+) create mode 100644 eng/release/insert-into-vs.yml create mode 100644 eng/release/scripts/GetAssemblyVersions.ps1 create mode 100644 eng/release/scripts/GetDefaultConfigVersions.ps1 create mode 100644 eng/release/scripts/GetPublishUrls.ps1 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 226d4e1194..56649a10f7 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -332,3 +332,14 @@ stages: enableSymbolValidation: false # SourceLink improperly looks for generated files. See https://github.com/dotnet/arcade/issues/3069 enableSourceLinkValidation: false + +#---------------------------------------------------------------------------------------------------------------------# +# VS Insertion # +#---------------------------------------------------------------------------------------------------------------------# +- ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - template: eng/release/insert-into-vs.yml + parameters: + componentBranchName: refs/heads/release/dev16.4 + insertTargetBranch: master + insertTeamEmail: fsharpteam@microsoft.com + insertTeamName: 'F#' diff --git a/eng/release/insert-into-vs.yml b/eng/release/insert-into-vs.yml new file mode 100644 index 0000000000..d78e5d9a22 --- /dev/null +++ b/eng/release/insert-into-vs.yml @@ -0,0 +1,54 @@ +parameters: + componentBranchName: '' + insertBuildPolicy: 'CloudBuild - Request RPS' + insertTargetBranch: '' + insertTeamEmail: '' + insertTeamName: '' + dependsOn: [build] + +stages: +- stage: insert + dependsOn: build + displayName: Insert into VS + jobs: + - job: Insert_VS + pool: + vmImage: vs2017-win2016 + variables: + - group: DotNet-VSTS-Infra-Access + - name: InsertAccessToken + value: $(dn-bot-devdiv-build-rw-code-rw-release-rw) + - name: InsertBuildPolicy + value: ${{ parameters.insertBuildPolicy }} + - name: InsertTargetBranch + value: ${{ parameters.insertTargetBranch }} + - name: InsertTeamEmail + value: ${{ parameters.insertTeamEmail }} + - name: InsertTeamName + value: ${{ parameters.insertTeamName }} + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Insertion Artifacts + inputs: + buildType: current + artifactName: VSSetup + - task: PowerShell@2 + displayName: Get Publish URLs + inputs: + filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetPublishUrls.ps1 + arguments: -accessToken $(System.AccessToken) -buildId $(Build.BuildId) -insertionDir $(Build.ArtifactStagingDirectory)\VSSetup + - task: PowerShell@2 + displayName: Get versions for default.config + inputs: + filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetDefaultConfigVersions.ps1 + arguments: -packagesDir $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages + - task: PowerShell@2 + displayName: Get versions for AssemblyVersions.tt + inputs: + filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetAssemblyVersions.ps1 + arguments: -assemblyVersionsPath $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages\DependentAssemblyVersions.csv + - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@2 + displayName: 'Insert VS Payload' + inputs: + LinkWorkItemsToPR: false + condition: and(succeeded(), eq(variables['Build.SourceBranch'], '${{ parameters.componentBranchName }}')) diff --git a/eng/release/scripts/GetAssemblyVersions.ps1 b/eng/release/scripts/GetAssemblyVersions.ps1 new file mode 100644 index 0000000000..2b75ac1dd5 --- /dev/null +++ b/eng/release/scripts/GetAssemblyVersions.ps1 @@ -0,0 +1,28 @@ +[CmdletBinding(PositionalBinding=$false)] +param ( + [string]$assemblyVersionsPath +) + +Set-StrictMode -version 2.0 +$ErrorActionPreference = "Stop" + +try { + [string[]]$lines = Get-Content -Path $assemblyVersionsPath | ForEach-Object { + $parts = $_ -Split ",",2 + $asm = $parts[0] + $ver = $parts[1] + $asmConst = ($asm -Replace "\.","") + "Version" + $output = "$asmConst=$ver" + $output + } + + $final = $lines -Join "," + Write-Host "Setting InsertVersionsValues to $final" + Write-Host "##vso[task.setvariable variable=InsertVersionsValues]$final" +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + exit 1 +} diff --git a/eng/release/scripts/GetDefaultConfigVersions.ps1 b/eng/release/scripts/GetDefaultConfigVersions.ps1 new file mode 100644 index 0000000000..d0f1f67fc5 --- /dev/null +++ b/eng/release/scripts/GetDefaultConfigVersions.ps1 @@ -0,0 +1,29 @@ +[CmdletBinding(PositionalBinding=$false)] +param ( + [string]$packagesDir +) + +Set-StrictMode -version 2.0 +$ErrorActionPreference = "Stop" + +try { + $packages = @() + $regex = "^(.*?)\.((?:\.?[0-9]+){3,}(?:[-a-z0-9]+)?)\.nupkg$" + Get-Item -Path "$packagesDir\*" -Filter "*.nupkg" | ForEach-Object { + $fileName = Split-Path $_ -Leaf + If ($fileName -Match $regex) { + $entry = $Matches[1] + "=" + $Matches[2] + $packages += $entry + } + } + + $final = $packages -Join "," + Write-Host "Setting InsertConfigValues to $final" + Write-Host "##vso[task.setvariable variable=InsertConfigValues]$final" +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + exit 1 +} diff --git a/eng/release/scripts/GetPublishUrls.ps1 b/eng/release/scripts/GetPublishUrls.ps1 new file mode 100644 index 0000000000..758c20ea51 --- /dev/null +++ b/eng/release/scripts/GetPublishUrls.ps1 @@ -0,0 +1,57 @@ +[CmdletBinding(PositionalBinding=$false)] +param ( + [string]$accessToken, + [string]$buildId, + [string]$insertionDir +) + +Set-StrictMode -version 2.0 +$ErrorActionPreference = "Stop" + +try { + # build map of all *.vsman files to their `info.buildVersion` values + $manifestVersionMap = @{} + Get-ChildItem -Path "$insertionDir\*" -Filter "*.vsman" | ForEach-Object { + $manifestName = Split-Path $_ -Leaf + $vsmanContents = Get-Content $_ | ConvertFrom-Json + $buildVersion = $vsmanContents.info.buildVersion + $manifestVersionMap.Add($manifestName, $buildVersion) + } + + # find all publish URLs + $manifests = @() + $seenManifests = @{} + $url = "https://dev.azure.com/dnceng/internal/_apis/build/builds/$buildId/logs?api-version=5.1" + $base64 = [Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$accessToken")) + $headers = @{ + Authorization = "Basic $base64" + } + Write-Host "Fetching log from $url" + $json = Invoke-WebRequest -Method Get -Uri $url -Headers $headers -UseBasicParsing | ConvertFrom-Json + foreach ($l in $json.value) { + $logUrl = $l.url + Write-Host "Fetching log from $logUrl" + $log = (Invoke-WebRequest -Method Get -Uri $logUrl -Headers $headers -UseBasicParsing).Content + If ($log -Match "(https://vsdrop\.corp\.microsoft\.com/[^\r\n;]+);([^\r\n]+)\r?\n") { + $manifestShortUrl = $Matches[1] + $manifestName = $Matches[2] + $manifestUrl = "$manifestShortUrl;$manifestName" + If (-Not $seenManifests.Contains($manifestUrl)) { + $seenManifests.Add($manifestUrl, $true) + $buildVersion = $manifestVersionMap[$manifestName] + $manifestEntry = "$manifestName{$buildVersion}=$manifestUrl" + $manifests += $manifestEntry + } + } + } + + $final = $manifests -Join "," + Write-Host "Setting InsertJsonValues to $final" + Write-Host "##vso[task.setvariable variable=InsertJsonValues]$final" +} +catch { + Write-Host $_ + Write-Host $_.Exception + Write-Host $_.ScriptStackTrace + exit 1 +} From c9a244e3a59c8856768fea62e5f6fdfdc78ac1bd Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 5 Sep 2019 21:37:39 -0700 Subject: [PATCH 060/146] add doc with links to all internal build definitions, etc. (#7505) --- INTERNAL.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 INTERNAL.md diff --git a/INTERNAL.md b/INTERNAL.md new file mode 100644 index 0000000000..b62e757de6 --- /dev/null +++ b/INTERNAL.md @@ -0,0 +1,60 @@ +# Links for internal team members to find build definitions, etc. + +Note that usually only the most recent link in each section is interesting. Older links are included for reference only. + +## PR Build Definition + +The PR build definition can be found [here](https://dev.azure.com/dnceng/public/_build?definitionId=496) or by +navigating through an existing PR. + +## Signed Build Definitions + +[VS 16.4 to current](https://dev.azure.com/dnceng/internal/_build?definitionId=499&_a=summary) + +[VS 15.7 to 16.3](https://dev.azure.com/devdiv/DevDiv/_build/index?definitionId=8978) + +[VS 15.6](https://dev.azure.com/devdiv/DevDiv/_build?definitionId=7239) + +[VS 15.0 to 15.5](https://dev.azure.com/devdiv/DevDiv/_build?definitionId=5037) + +## VS Insertion Generators + +VS 16.4 to current - part of the build definition. [See below](#vs-insertions-as-part-of-the-build-definition). + +The following insertion generators are automatically invoked upon successful completion of a signed build in each of +their respective branches. + +[VS 16.3](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1839&_a=releases) + +[VS 16.2](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1699&_a=releases) + +[VS 16.1](https://dev.azure.com/devdiv/DevDiv/_release?definitionId=1669&_a=releases) + +VS 16.0 and prior were done manually + +## VS Insertions as part of the build definition + +Starting with the 16.4 release and moving forwards, the VS insertion is generated as part of the build. The relevant +bits can be found near the bottom of [`azure-pipelines.yml`](azure-pipelines.yml) under the `VS Insertion` header. The +interesting parameters are `componentBranchName` and `insertTargetBranch`. In short, when an internal signed build +completes and the name of the branch built exactly equals the value in the `componentBranchName` parameter, a component +insertion into VS will be created into the `insertTargetBranch` branch. The link to the insertion PR will be found +near the bottom of the build under the title 'Insert into VS'. Examine the log for 'Insert VS Payload' and near the +bottom you'll see a line that looks like `Created request #xxxxxx at https://...`. + +To see all insertions created this way (possibly including for other internal teams), check +[here](https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequests?creatorId=122d5278-3e55-4868-9d40-1e28c2515fc4&_a=active). + +## Less interesting links + +[Nightly VSIX (master) uploader](https://dev.azure.com/dnceng/internal/_release?_a=releases&definitionId=70). Uploads +a package from every build of `master` to the [Nightly VSIX feed](README.md#using-nightly-releases-in-visual-studio). + +[Nightly VSIX (preview) uploader](https://dev.azure.com/dnceng/internal/_release?_a=releases&definitionId=71). Uploads +a package from every build of the branch that corresponds to the current Visual Studio preview to the +[Preview VSIX feed](README.md#using-nightly-releases-in-visual-studio). + +[MyGet package uploader](https://dev.azure.com/dnceng/internal/_release?_a=releases&definitionId=69). Uploads various +packages for internal consumption. Feed URL is `https://dotnet.myget.org/F/fsharp/api/v3/index.json`. + +[Internal source mirror](https://dev.azure.com/dnceng/internal/_git/dotnet-fsharp). From e64a812256236c4386955ce6eb993de38690ce22 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 5 Sep 2019 21:47:44 -0700 Subject: [PATCH 061/146] Fix ctrl - c handling on the coreclr (#7495) * fix ctrlchandler * remove nativemethods --- src/fsharp/fsi/fsi.fs | 183 +++++++++++------------------------------- 1 file changed, 45 insertions(+), 138 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index d36f442e58..b5d0b09821 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -787,14 +787,12 @@ type internal FsiCommandLineOptions(fsi: FsiEvaluationSessionHostConfig, argv: s member __.Gui = gui /// Set the current ui culture for the current thread. -#if FX_LCIDFROMCODEPAGE let internal SetCurrentUICultureForThread (lcid : int option) = let culture = Thread.CurrentThread.CurrentUICulture match lcid with | Some n -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(n) | None -> () { new IDisposable with member x.Dispose() = Thread.CurrentThread.CurrentUICulture <- culture } -#endif //---------------------------------------------------------------------------- // Reporting - warnings, errors @@ -1336,22 +1334,18 @@ type internal FsiDynamicCompiler member __.FormatValue(obj:obj, objTy) = valuePrinter.FormatValue(obj, objTy) - //---------------------------------------------------------------------------- // ctrl-c handling //---------------------------------------------------------------------------- -module internal NativeMethods = - - type ControlEventHandler = delegate of int -> bool +type ControlEventHandler = delegate of int -> bool - [] - extern bool SetConsoleCtrlHandler(ControlEventHandler _callback,bool _add) // One strange case: when a TAE happens a strange thing // occurs the next read from stdin always returns // 0 bytes, i.e. the channel will look as if it has been closed. So we check // for this condition explicitly. We also recreate the lexbuf whenever CtrlC kicks. + type internal FsiInterruptStdinState = | StdinEOFPermittedBecauseCtrlCRecentlyPressed | StdinNormal @@ -1366,149 +1360,74 @@ type internal FsiInterruptControllerKillerThreadRequest = | ExitRequest | PrintInterruptRequest -type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, - fsiConsoleOutput: FsiConsoleOutput) = +type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput) = let mutable stdinInterruptState = StdinNormal let CTRL_C = 0 let mutable interruptAllowed = InterruptIgnored let mutable killThreadRequest = NoRequest - let mutable ctrlEventHandlers = [] : NativeMethods.ControlEventHandler list - let mutable ctrlEventActions = [] : (unit -> unit) list + + let mutable ctrlEventHandlers = []: ControlEventHandler list + let mutable ctrlEventActions = []: (unit -> unit) list let mutable exitViaKillThread = false let mutable posixReinstate = (fun () -> ()) - member __.Exit() = - if exitViaKillThread then + member __.Exit() = + if exitViaKillThread then killThreadRequest <- ExitRequest Thread.Sleep(1000) exit 0 - member __.FsiInterruptStdinState with get () = stdinInterruptState and set v = stdinInterruptState <- v + member __.FsiInterruptStdinState + with get () = stdinInterruptState + and set v = stdinInterruptState <- v member __.ClearInterruptRequest() = killThreadRequest <- NoRequest - - member __.InterruptAllowed with set v = interruptAllowed <- v - + + member __.InterruptAllowed + with set v = interruptAllowed <- v + member __.Interrupt() = ctrlEventActions |> List.iter (fun act -> act()) - + member __.EventHandlers = ctrlEventHandlers - // REVIEW: streamline all this code to use the same code on Windows and Posix. - member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = -#if DYNAMIC_CODE_EMITS_INTERRUPT_CHECKS - let action() = - Microsoft.FSharp.Silverlight.InterruptThread(threadToKill.ManagedThreadId) + member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = - ctrlEventActions <- action :: ctrlEventActions; -#else -#if FX_NO_THREADABORT - ignore threadToKill - ignore pauseMilliseconds - ignore fsiConsoleOutput - ignore CTRL_C - ignore fsiOptions - exitViaKillThread <- false -#else - if !progress then fprintfn fsiConsoleOutput.Out "installing CtrlC handler" - // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. - // Hence we actually start up the killer thread within the handler. - try - let raiseCtrlC() = -#if FX_LCIDFROMCODEPAGE - use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#else - ignore fsiOptions -#endif - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) - stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed - if (interruptAllowed = InterruptCanRaiseException) then - killThreadRequest <- ThreadAbortRequest - let killerThread = - new Thread(new ThreadStart(fun () -> -#if FX_LCIDFROMCODEPAGE - use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif - // sleep long enough to allow ControlEventHandler handler on main thread to return - // Also sleep to give computations a bit of time to terminate - Thread.Sleep(pauseMilliseconds) - if (killThreadRequest = ThreadAbortRequest) then - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) - killThreadRequest <- NoRequest - threadToKill.Abort() - ()),Name="ControlCAbortThread") - killerThread.IsBackground <- true - killerThread.Start() - - let ctrlEventHandler = new NativeMethods.ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) - ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers - ctrlEventActions <- raiseCtrlC :: ctrlEventActions - let _resultOK = NativeMethods.SetConsoleCtrlHandler(ctrlEventHandler,true) - exitViaKillThread <- false // don't exit via kill thread - with e -> - if !progress then fprintfn fsiConsoleOutput.Error "Failed to install ctrl-c handler using Windows technique - trying to install one using Unix signal handling..."; - // UNIX TECHNIQUE: We start up a killer thread, and it watches the mutable reference location. - // We can't have a dependency on Mono DLLs (indeed we don't even have them!) - // So SOFT BIND the following code: - // Mono.Unix.Native.Stdlib.signal(Mono.Unix.Native.Signum.SIGINT,new Mono.Unix.Native.SignalHandler(fun n -> PosixSignalProcessor.PosixInvoke(n))) |> ignore; - match (try Choice1Of2(Assembly.Load(new System.Reflection.AssemblyName("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"))) with e -> Choice2Of2 e) with - | Choice1Of2(monoPosix) -> - try - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.Stdlib..." - let monoUnixStdlib = monoPosix.GetType("Mono.Unix.Native.Stdlib") - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.SignalHandler..." - let monoUnixSignalHandler = monoPosix.GetType("Mono.Unix.Native.SignalHandler") - if !progress then fprintfn fsiConsoleOutput.Error "creating delegate..." - controller.PosixInvoke(-1) - let monoHandler = System.Delegate.CreateDelegate(monoUnixSignalHandler,controller,"PosixInvoke") - if !progress then fprintfn fsiConsoleOutput.Error "registering signal handler..." - let monoSignalNumber = System.Enum.Parse(monoPosix.GetType("Mono.Unix.Native.Signum"),"SIGINT") - let register () = Utilities.callStaticMethod monoUnixStdlib "signal" [ monoSignalNumber; box monoHandler ] |> ignore - posixReinstate <- register - register() + // Fsi Interupt handler + let raiseCtrlC() = + use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) + + stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed + if (interruptAllowed = InterruptCanRaiseException) then + killThreadRequest <- ThreadAbortRequest let killerThread = new Thread(new ThreadStart(fun () -> -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif - while true do - //fprintf fsiConsoleOutput.Error "\n- kill thread loop...\n"; errorWriter.Flush(); - Thread.Sleep(pauseMilliseconds*2) - match killThreadRequest with - | PrintInterruptRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() - killThreadRequest <- NoRequest - | ThreadAbortRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) - killThreadRequest <- NoRequest - threadToKill.Abort() - | ExitRequest -> - // Mono has some weird behaviour where it blocks on exit - // once CtrlC has ever been pressed. Who knows why? Perhaps something - // to do with having a signal handler installed, but it only happens _after_ - // at least one CtrLC has been pressed. Maybe raising a ThreadAbort causes - // exiting to have problems. - // - // Anyway, we make "#q" work this case by setting ExitRequest and brutally calling - // the process-wide 'exit' - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExit()); fsiConsoleOutput.Error.Flush() - Utilities.callStaticMethod monoUnixStdlib "exit" [ box 0 ] |> ignore - | _ -> () - done),Name="ControlCAbortAlternativeThread") + // sleep long enough to allow ControlEventHandler handler on main thread to return + // Also sleep to give computations a bit of time to terminate + Thread.Sleep(pauseMilliseconds) + if (killThreadRequest = ThreadAbortRequest) then + if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + killThreadRequest <- NoRequest + threadToKill.Abort() + ()),Name="ControlCAbortThread") killerThread.IsBackground <- true killerThread.Start() - // exit via kill thread to workaround block-on-exit bugs with Mono once a CtrlC has been pressed - exitViaKillThread <- true - with e -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiCouldNotInstallCtrlCHandler(e.Message)) - exitViaKillThread <- false - | Choice2Of2 e -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiCouldNotInstallCtrlCHandler(e.Message)) - exitViaKillThread <- false -#endif + let fsiInterruptHandler (args:ConsoleCancelEventArgs) = + args.Cancel <- true + ctrlEventHandlers |> List.iter(fun handler -> handler.Invoke(CTRL_C) |> ignore) + + do Console.CancelKeyPress.Add(fsiInterruptHandler) + + // WINDOWS TECHNIQUE: .NET has more safe points, and you can do more when a safe point. + // Hence we actually start up the killer thread within the handler. + let ctrlEventHandler = new ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) + ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers + ctrlEventActions <- raiseCtrlC :: ctrlEventActions + exitViaKillThread <- false // don't exit via kill thread member x.PosixInvoke(n:int) = // we run this code once with n = -1 to make sure it is JITted before execution begins @@ -1519,8 +1438,6 @@ type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed killThreadRequest <- if (interruptAllowed = InterruptCanRaiseException) then ThreadAbortRequest else PrintInterruptRequest -#endif - //---------------------------------------------------------------------------- // assembly finder //---------------------------------------------------------------------------- @@ -1809,9 +1726,7 @@ type internal FsiInteractionProcessor // FSI error logging on switched to thread InstallErrorLoggingOnThisThread errorLogger -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif f ctok istate) with _ -> (istate,Completed None) @@ -2185,9 +2100,7 @@ type internal FsiInteractionProcessor member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif let lexbuf = UnicodeLexing.StringAsLexbuf(sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) currState @@ -2204,9 +2117,7 @@ type internal FsiInteractionProcessor member __.EvalExpression (ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif let lexbuf = UnicodeLexing.StringAsLexbuf(sourceText) let tokenizer = fsiStdinLexerProvider.CreateBufferLexer(scriptFileName, lexbuf, errorLogger) currState @@ -2235,9 +2146,7 @@ type internal FsiInteractionProcessor let stdinReaderThread = new Thread(new ThreadStart(fun () -> InstallErrorLoggingOnThisThread errorLogger // FSI error logging on stdinReaderThread, e.g. parse errors. -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif try try let initialTokenizer = fsiStdinLexerProvider.CreateStdinLexer(errorLogger) @@ -2341,9 +2250,7 @@ let internal SpawnInteractiveServer fsiConsoleOutput: FsiConsoleOutput) = //printf "Spawning fsi server on channel '%s'" !fsiServerName; SpawnThread "ServerThread" (fun () -> -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID -#endif try fsi.StartServer(fsiOptions.FsiServerName) with e -> From 570bd57fa8b9ddef1b4af2b834d2542a3ec871bc Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2019 10:12:33 -0700 Subject: [PATCH 062/146] Update dependencies from https://github.com/dotnet/arcade build 20190905.21 (#7507) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19455.21 --- eng/Version.Details.xml | 4 +- eng/common/templates/job/job.yml | 5 +- .../templates/job/publish-build-assets.yml | 7 ++ .../post-build/channels/netcore-dev-30.yml | 65 +++++++--------- .../post-build/channels/netcore-dev-31.yml | 45 +++++------ .../post-build/channels/netcore-dev-5.yml | 71 +++++++++--------- .../channels/netcore-internal-30.yml | 60 +++++++-------- .../channels/netcore-release-30.yml | 61 +++++++-------- .../channels/netcore-release-31.yml | 56 +++++++------- .../channels/netcore-tools-latest.yml | 74 ++++++++----------- .../channels/public-validation-release.yml | 67 +++++++---------- .../templates/post-build/common-variables.yml | 26 +++++-- .../templates/post-build/post-build.yml | 1 + global.json | 2 +- 14 files changed, 247 insertions(+), 297 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 6d55461513..9d3b7fd63c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 00d8aa82b488f321204a0e69a81399af9df276a1 + e99f81b0e3289cfd851be0d927c1fcffa43af6b5 diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 8db456bb7f..ffda80a197 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -24,7 +24,7 @@ parameters: workspace: '' -# Job base template specific parameters + # Job base template specific parameters # Optional: Enable installing Microbuild plugin # if 'true', these "variables" must be specified in the variables object or as part of the queue matrix # _TeamName - the name of your team @@ -151,6 +151,9 @@ jobs: continueOnError: ${{ parameters.continueOnError }} condition: and(succeeded(), in(variables['_SignType'], 'real', 'test'), eq(variables['Agent.Os'], 'Windows_NT')) + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: NuGetAuthenticate@0 + - ${{ each step in parameters.steps }}: - ${{ step }} diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml index 9e77ef1b54..b722975f9c 100644 --- a/eng/common/templates/job/publish-build-assets.yml +++ b/eng/common/templates/job/publish-build-assets.yml @@ -47,6 +47,10 @@ jobs: downloadPath: '$(Build.StagingDirectory)/Download' condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} + + - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: + - task: NuGetAuthenticate@0 + - task: PowerShell@2 displayName: Publish Build Assets inputs: @@ -59,6 +63,7 @@ jobs: /p:Configuration=$(_BuildConfig) condition: ${{ parameters.condition }} continueOnError: ${{ parameters.continueOnError }} + - task: powershell@2 displayName: Create ReleaseConfigs Artifact inputs: @@ -67,12 +72,14 @@ jobs: Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(BARBuildId) Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value "$(DefaultChannels)" Add-Content -Path "$(Build.StagingDirectory)/ReleaseConfigs.txt" -Value $(IsStableBuild) + - task: PublishBuildArtifacts@1 displayName: Publish ReleaseConfigs Artifact inputs: PathtoPublish: '$(Build.StagingDirectory)/ReleaseConfigs.txt' PublishLocation: Container ArtifactName: ReleaseConfigs + - ${{ if eq(parameters.enablePublishBuildArtifacts, 'true') }}: - task: PublishBuildArtifacts@1 displayName: Publish Logs to VSTS diff --git a/eng/common/templates/post-build/channels/netcore-dev-30.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml index 3ce7ce4d6e..16e4eff7d0 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-30.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml @@ -47,7 +47,7 @@ stages: /p:Configuration=Release ${{ parameters.symbolPublishingAdditionalParameters }} - - job: + - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: @@ -79,30 +79,41 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(PublicDevRelease_30_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) @@ -110,24 +121,6 @@ stages: /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - stage: NetCore_Dev30_Publish_Validation displayName: .NET Core 3.0 Dev Publish Validation @@ -156,10 +149,6 @@ stages: filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../darc-gather-drop.yml - parameters: - ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml index d40aaacc4f..52322b128e 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-31.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml @@ -79,22 +79,33 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(PublicDevRelease_31_Channel_Id) /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:BARBuildId=$(BARBuildId) /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' @@ -110,24 +121,6 @@ stages: /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - stage: NetCore_Dev31_Publish_Validation displayName: .NET Core 3.1 Dev Publish Validation @@ -156,10 +149,6 @@ stages: filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../darc-gather-drop.yml - parameters: - ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 584185c2a7..4d77d26690 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -3,6 +3,7 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false + publishToAzureDevOpsFeeds: true stages: - stage: NetCore_Dev5_Publish @@ -47,7 +48,7 @@ stages: /p:Configuration=Release ${{ parameters.symbolPublishingAdditionalParameters }} - - job: + - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: @@ -79,55 +80,53 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(NetCore_5_Dev_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - stage: NetCore_Dev5_Publish_Validation displayName: .NET Core 5 Dev Publish Validation @@ -156,10 +155,6 @@ stages: filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../darc-gather-drop.yml - parameters: - ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index 8bf88fd49e..ad36501274 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -78,50 +78,42 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(InternalServicing_30_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) - /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) - /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) - /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - template: ../trigger-subscription.yml parameters: ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml index dc9541d9ec..8c4bb6005b 100644 --- a/eng/common/templates/post-build/channels/netcore-release-30.yml +++ b/eng/common/templates/post-build/channels/netcore-release-30.yml @@ -78,51 +78,42 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Publish + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(PublicRelease_30_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) - /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) - /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) - /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' - /p:Configuration=Release + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - template: ../trigger-subscription.yml parameters: ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml index 4dcf4ba9c8..cfe6386daf 100644 --- a/eng/common/templates/post-build/channels/netcore-release-31.yml +++ b/eng/common/templates/post-build/channels/netcore-release-31.yml @@ -78,51 +78,48 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Publish + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(PublicRelease_31_Channel_Id) + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:AzureStorageAccountName=$(ProxyBackedFeedsAccountName) - /p:AzureStorageAccountKey=$(dotnetfeed-storage-access-key-1) - /p:AzureDevOpsFeedsBaseUrl=$(dotnetfeed-internal-private-feed-url) - /p:StaticInternalFeed=$(dotnetfeed-internal-nonstable-feed-url) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe /p:BARBuildId=$(BARBuildId) /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - template: ../trigger-subscription.yml parameters: ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} @@ -138,8 +135,7 @@ stages: - job: displayName: Symbol Availability dependsOn: setupMaestroVars - condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)), - contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id))) + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) pool: vmImage: 'windows-2019' steps: diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 4d9f197d43..83dbdeea12 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -3,8 +3,7 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false - publishToAzureDevOpsFeeds: false - azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + publishToAzureDevOpsFeeds: true stages: - stage: NetCore_Tools_Latest_Publish @@ -49,7 +48,7 @@ stages: /p:Configuration=Release ${{ parameters.symbolPublishingAdditionalParameters }} - - job: + - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: @@ -81,60 +80,53 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(NetCore_Tools_Latest_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:StaticInternalFeed=$(StaticInternalFeed) + /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release - /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} - /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) ${{ parameters.artifactsPublishingAdditionalParameters }} - - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - + - stage: NetCore_Tools_Latest_PublishValidation displayName: .NET Tools - Latest Publish Validation @@ -163,10 +155,6 @@ stages: filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../darc-gather-drop.yml - parameters: - ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index e306fa87bf..a5fcdc581a 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,8 +1,7 @@ parameters: artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false - publishToAzureDevOpsFeeds: false - azureDevOpsToolsFeed: 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + publishToAzureDevOpsFeeds: true stages: - stage: PVR_Publish @@ -13,7 +12,7 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - job: + - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: @@ -45,60 +44,48 @@ stages: buildType: current artifactName: AssetManifests + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + - task: PowerShell@2 - displayName: Add Assets Location + displayName: Publish Assets env: - AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-unviersal-packages-rw) + AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet - /p:ChannelId=$(PublicValidationRelease_30_Channel_Id) + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetValidationArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:NugetPath=$(Agent.BuildDirectory)\Nuget\NuGet.exe - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-unviersal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)\BlobArtifacts' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)\PackageArtifacts' + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) - /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} - /p:AzureDevOpsStaticShippingFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed=${{ parameters.azureDevOpsToolsFeed }} + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - - task: NuGetCommand@2 - displayName: Publish Packages to AzDO Feed - condition: contains(variables['TargetAzDOFeed'], 'pkgs.visualstudio.com') - inputs: - command: push - vstsFeed: $(AzDoFeedName) - packagesToPush: $(Build.ArtifactStagingDirectory)\PackageArtifacts\*.nupkg - publishVstsFeed: $(AzDoFeedName) - - - task: PowerShell@2 - displayName: Publish Blobs to AzDO Feed - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/publish-blobs-to-azdo.ps1 - arguments: -FeedName $(AzDoFeedName) - -SourceFolderCollection $(Build.ArtifactStagingDirectory)/BlobArtifacts/ - -PersonalAccessToken $(dn-bot-dnceng-unviersal-packages-rw) - enabled: false - - stage: PVR_PublishValidation displayName: .NET Tools - Validation Publish Validation @@ -107,10 +94,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - template: ../darc-gather-drop.yml - parameters: - ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index 49712b3a60..c134764496 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -1,6 +1,7 @@ variables: - group: Publish-Build-Assets - group: DotNet-DotNetCli-Storage + - group: DotNet-MSRC-Storage # .NET Core 3 Dev - name: PublicDevRelease_30_Channel_Id @@ -8,7 +9,7 @@ variables: # .NET Core 3.1 Dev - name: PublicDevRelease_31_Channel_Id - value: 260 + value: 128 # .NET Core 5 Dev - name: NetCore_5_Dev_Channel_Id @@ -38,10 +39,6 @@ variables: - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} - # Storage account name for proxy-backed feeds - - name: ProxyBackedFeedsAccountName - value: dotnetfeed - # Default Maestro++ API Endpoint and API Version - name: MaestroApiEndPoint value: "https://maestro-prod.westus2.cloudapp.azure.com" @@ -55,8 +52,27 @@ variables: - name: SymbolToolVersion value: 1.0.1 + # Feed Configurations + # These should include the suffix "/index.json" + + # Configuration for the feed where packages from internal non-stable builds will be published to + - name: StaticInternalFeed + value: 'https://dnceng.pkgs.visualstudio.com/_packaging/dotnet-core-internal/nuget/v3/index.json' + # Default locations for Installers and checksums + # Public Locations - name: ChecksumsBlobFeedUrl value: https://dotnetclichecksums.blob.core.windows.net/dotnet/index.json - name: InstallersBlobFeedUrl value: https://dotnetcli.blob.core.windows.net/dotnet/index.json + + # Private Locations + - name: InternalChecksumsBlobFeedUrl + value: https://dotnetclichecksumsmsrc.blob.core.windows.net/dotnet/index.json + - name: InternalChecksumsBlobFeedKey + value: $(dotnetclichecksumsmsrc-storage-key) + + - name: InternalInstallersBlobFeedUrl + value: https://dotnetclimsrc.blob.core.windows.net/dotnet/index.json + - name: InternalInstallersBlobFeedKey + value: $(dotnetclimsrc-access-key) diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index ae376b7747..5770bb21cc 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -102,6 +102,7 @@ stages: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} - template: \eng\common\templates\post-build\channels\netcore-dev-30.yml parameters: diff --git a/global.json b/global.json index 0ac104d10c..c219ffe154 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19454.31", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19455.21", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From e3030dd8e979fa369f765c882a05e57f3fa2b3eb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2019 20:15:24 +0000 Subject: [PATCH 063/146] Update dependencies from https://github.com/dotnet/arcade build 20190906.2 (#7508) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19456.2 --- eng/Version.Details.xml | 4 ++-- eng/common/templates/post-build/channels/netcore-dev-5.yml | 2 +- global.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9d3b7fd63c..992465b3e8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - e99f81b0e3289cfd851be0d927c1fcffa43af6b5 + 397060df67388da56b50de7e6f7292a5dccc2de6 diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 4d77d26690..839121dec6 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -124,7 +124,7 @@ stages: /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/global.json b/global.json index c219ffe154..f74675b05f 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19455.21", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19456.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From a07ab851d378dd49c162e3a60be6b70948021e8e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2019 10:23:49 -0700 Subject: [PATCH 064/146] Update dependencies from https://github.com/dotnet/arcade build 20190906.10 (#7516) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19456.10 --- eng/Version.Details.xml | 4 ++-- eng/common/build.ps1 | 4 ++++ eng/common/performance/performance-setup.ps1 | 2 +- eng/common/performance/performance-setup.sh | 2 +- eng/common/templates/job/performance.yml | 6 +++-- .../post-build/channels/netcore-dev-30.yml | 21 ------------------ .../post-build/channels/netcore-dev-31.yml | 21 ------------------ .../post-build/channels/netcore-dev-5.yml | 21 ------------------ .../channels/netcore-internal-30.yml | 21 ------------------ .../channels/netcore-release-30.yml | 22 ------------------- .../channels/netcore-release-31.yml | 21 ------------------ .../channels/netcore-tools-latest.yml | 21 ------------------ .../templates/post-build/post-build.yml | 4 ---- global.json | 2 +- 14 files changed, 13 insertions(+), 159 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 992465b3e8..1769a2aa7b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 397060df67388da56b50de7e6f7292a5dccc2de6 + 2d393243ba4a0c95c2c18aa266df6e0f43ffe22d diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index feb58d1419..e001ccb481 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -85,6 +85,10 @@ function Build { # Re-assign properties to a new variable because PowerShell doesn't let us append properties directly for unclear reasons. # Explicitly set the type as string[] because otherwise PowerShell would make this char[] if $properties is empty. [string[]] $msbuildArgs = $properties + + # Resolve relative project paths into full paths + $projects = ($projects.Split(';').ForEach({Resolve-Path $_}) -join ';') + $msbuildArgs += "/p:Projects=$projects" $properties = $msbuildArgs } diff --git a/eng/common/performance/performance-setup.ps1 b/eng/common/performance/performance-setup.ps1 index 268986246e..ec41965fc8 100644 --- a/eng/common/performance/performance-setup.ps1 +++ b/eng/common/performance/performance-setup.ps1 @@ -17,7 +17,7 @@ Param( [string] $Configurations="CompilationMode=$CompilationMode" ) -$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") +$RunFromPerformanceRepo = ($Repository -eq "dotnet/performance") -or ($Repository -eq "dotnet-performance") $UseCoreRun = ($CoreRootDirectory -ne [string]::Empty) $UseBaselineCoreRun = ($BaselineCoreRootDirectory -ne [string]::Empty) diff --git a/eng/common/performance/performance-setup.sh b/eng/common/performance/performance-setup.sh index 550b3ebf18..2f2092166e 100755 --- a/eng/common/performance/performance-setup.sh +++ b/eng/common/performance/performance-setup.sh @@ -113,7 +113,7 @@ while (($# > 0)); do esac done -if [[ "$repository" == "dotnet/performance" ]]; then +if [ "$repository" == "dotnet/performance" ] || [ "$repository" == "dotnet-performance" ]; then run_from_perf_repo=true fi diff --git a/eng/common/templates/job/performance.yml b/eng/common/templates/job/performance.yml index ef809253d1..f877fd7a89 100644 --- a/eng/common/templates/job/performance.yml +++ b/eng/common/templates/job/performance.yml @@ -5,6 +5,7 @@ parameters: displayName: '' # optional -- display name for the job. Will use jobName if not passed pool: '' # required -- name of the Build pool container: '' # required -- name of the container + osGroup: '' # required -- operating system for the job extraSetupParameters: '' # optional -- extra arguments to pass to the setup script frameworks: ['netcoreapp3.0'] # optional -- list of frameworks to run against continueOnError: 'false' # optional -- determines whether to continue the build if the step errors @@ -44,12 +45,13 @@ jobs: - HelixPreCommand: '' - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - ${{ if eq(variables['Agent.Os'], 'Windows_NT') }}: + - ${{ if eq( parameters.osGroup, 'Windows_NT') }}: - HelixPreCommand: 'set "PERFLAB_UPLOAD_TOKEN=$(PerfCommandUploadToken)"' - IsInternal: -Internal - - ${{ if ne(variables['Agent.Os'], 'Windows_NT') }}: + - ${{ if ne(parameters.osGroup, 'Windows_NT') }}: - HelixPreCommand: 'export PERFLAB_UPLOAD_TOKEN="$(PerfCommandUploadTokenLinux)"' - IsInternal: --internal + - group: DotNet-HelixApi-Access - group: dotnet-benchview diff --git a/eng/common/templates/post-build/channels/netcore-dev-30.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml index 16e4eff7d0..7984f06d1b 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-30.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false @@ -129,26 +128,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_30_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml index 52322b128e..bcedd0f075 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-31.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false @@ -129,26 +128,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicDevRelease_31_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 839121dec6..18432cc60b 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false @@ -135,26 +134,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_5_Dev_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index ad36501274..36e1d1188b 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' @@ -125,26 +124,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.InternalServicing_30_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml index 8c4bb6005b..abae985ab0 100644 --- a/eng/common/templates/post-build/channels/netcore-release-30.yml +++ b/eng/common/templates/post-build/channels/netcore-release-30.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' @@ -125,27 +124,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: or(contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_30_Channel_Id)), - contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id))) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml index cfe6386daf..b2a6c7659d 100644 --- a/eng/common/templates/post-build/channels/netcore-release-31.yml +++ b/eng/common/templates/post-build/channels/netcore-release-31.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' @@ -131,26 +130,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.PublicRelease_31_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 83dbdeea12..36f6dea628 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -1,5 +1,4 @@ parameters: - enableSymbolValidation: true symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false @@ -135,26 +134,6 @@ stages: jobs: - template: ../setup-maestro-vars.yml - - ${{ if eq(parameters.enableSymbolValidation, 'true') }}: - - job: - displayName: Symbol Availability - dependsOn: setupMaestroVars - condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_Tools_Latest_Channel_Id)) - pool: - vmImage: 'windows-2019' - steps: - - task: DownloadBuildArtifacts@0 - displayName: Download Package Artifacts - inputs: - buildType: current - artifactName: PackageArtifacts - - - task: PowerShell@2 - displayName: Check Symbol Availability - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/symbols-validation.ps1 - arguments: -InputPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Temp/ -DotnetSymbolVersion $(SymbolToolVersion) - - template: ../promote-build.yml parameters: ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 5770bb21cc..e473cadbcc 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -98,7 +98,6 @@ stages: - template: \eng\common\templates\post-build\channels\netcore-dev-5.yml parameters: - enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} @@ -106,21 +105,18 @@ stages: - template: \eng\common\templates\post-build\channels\netcore-dev-30.yml parameters: - enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-dev-31.yml parameters: - enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml parameters: - enableSymbolValidation: ${{ parameters.enableSymbolValidation }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} diff --git a/global.json b/global.json index f74675b05f..e1c60f0174 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19456.2", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19456.10", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 7f9325310b6f9b0976c82029d5e5761f2d4319f4 Mon Sep 17 00:00:00 2001 From: Friedrich von Never Date: Sun, 8 Sep 2019 06:43:22 +0700 Subject: [PATCH 065/146] Add a missing word to the comment (#7517) --- src/fsharp/FSharp.Core/async.fsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fsharp/FSharp.Core/async.fsi b/src/fsharp/FSharp.Core/async.fsi index b3312c6990..ae2cc882a5 100644 --- a/src/fsharp/FSharp.Core/async.fsi +++ b/src/fsharp/FSharp.Core/async.fsi @@ -415,8 +415,8 @@ namespace Microsoft.FSharp.Control static member StartImmediate: computation:Async * ?cancellationToken:CancellationToken-> unit - /// Runs an asynchronous computation, starting immediately on the current operating system, - /// but also returns the execution as System.Threading.Tasks.Task + /// Runs an asynchronous computation, starting immediately on the current operating system + /// thread, but also returns the execution as System.Threading.Tasks.Task /// /// If no cancellation token is provided then the default cancellation token is used. /// You may prefer using this method if you want to achive a similar behviour to async await in C# as From 371c19648875d1d6a170ae2a6d4b9bb6e21114c4 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2019 10:20:59 -0700 Subject: [PATCH 066/146] [master] Update dependencies from dotnet/arcade (#7522) * Update dependencies from https://github.com/dotnet/arcade build 20190907.1 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19457.1 * Update dependencies from https://github.com/dotnet/arcade build 20190908.2 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19458.2 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1769a2aa7b..34c82619f1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 2d393243ba4a0c95c2c18aa266df6e0f43ffe22d + 29ee79a10c58dd6863a46157e374521cac610ad8 diff --git a/global.json b/global.json index e1c60f0174..5c889d6f2e 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19456.10", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19458.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 1dcbcd489fc9b1ce9c538b7fa9cfa951499cd885 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 9 Sep 2019 12:12:35 -0700 Subject: [PATCH 067/146] cleanup FX_LCIDFROMCODEPAGE (#7509) --- FSharp.Profiles.props | 1 - src/fsharp/fsc.fs | 4 +--- src/fsharp/fsi/fsimain.fs | 6 ------ vsintegration/Utils/LanguageServiceProfiling/Options.fs | 5 ++--- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/FSharp.Profiles.props b/FSharp.Profiles.props index bee528e0c2..bc6988d0ba 100644 --- a/FSharp.Profiles.props +++ b/FSharp.Profiles.props @@ -6,7 +6,6 @@ $(DefineConstants);CROSS_PLATFORM_COMPILER $(DefineConstants);ENABLE_MONO_SUPPORT $(DefineConstants);BE_SECURITY_TRANSPARENT - $(DefineConstants);FX_LCIDFROMCODEPAGE diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index b733a67973..35f8080e9d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1774,15 +1774,13 @@ let main0(ctok, argv, legacyReferenceResolver, bannerAlreadyPrinted, exiter: Exiter, errorLoggerProvider : ErrorLoggerProvider, disposables : DisposablesTracker) = // See Bug 735819 - let lcidFromCodePage = -#if FX_LCIDFROMCODEPAGE + let lcidFromCodePage = if (Console.OutputEncoding.CodePage <> 65001) && (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage) then Thread.CurrentThread.CurrentUICulture <- new CultureInfo("en-US") Some 1033 else -#endif None let directoryBuildingFrom = Directory.GetCurrentDirectory() diff --git a/src/fsharp/fsi/fsimain.fs b/src/fsharp/fsi/fsimain.fs index c127642db7..653485ac18 100644 --- a/src/fsharp/fsi/fsimain.fs +++ b/src/fsharp/fsi/fsimain.fs @@ -40,14 +40,12 @@ do() /// Set the current ui culture for the current thread. -#if FX_LCIDFROMCODEPAGE let internal SetCurrentUICultureForThread (lcid : int option) = let culture = Thread.CurrentThread.CurrentUICulture match lcid with | Some n -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(n) | None -> () { new IDisposable with member x.Dispose() = Thread.CurrentThread.CurrentUICulture <- culture } -#endif let callStaticMethod (ty:Type) name args = ty.InvokeMember(name, (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public ||| BindingFlags.NonPublic), null, null, Array.ofList args,Globalization.CultureInfo.InvariantCulture) @@ -95,11 +93,7 @@ type WinFormsEventLoop() = try // When we get called back, someone may jack our culture // So we must reset our UI culture every time -#if FX_LCIDFROMCODEPAGE use _scope = SetCurrentUICultureForThread lcid -#else - ignore lcid -#endif mainFormInvokeResultHolder := Some(f ()) finally doneSignal.Set() |> ignore)) |> ignore diff --git a/vsintegration/Utils/LanguageServiceProfiling/Options.fs b/vsintegration/Utils/LanguageServiceProfiling/Options.fs index 19fc3a5251..1747ff3bfe 100644 --- a/vsintegration/Utils/LanguageServiceProfiling/Options.fs +++ b/vsintegration/Utils/LanguageServiceProfiling/Options.fs @@ -212,9 +212,8 @@ let FCS (repositoryDir: string) : Options = @"--define:FX_ATLEAST_40"; "--define:BE_SECURITY_TRANSPARENT"; @"--define:COMPILER"; @"--define:ENABLE_MONO_SUPPORT"; "--define:FX_MSBUILDRESOLVER_RUNTIMELIKE"; - @"--define:FX_LCIDFROMCODEPAGE"; "--define:FX_RESX_RESOURCE_READER"; - @"--define:FX_RESIDENT_COMPILER"; "--define:SHADOW_COPY_REFERENCES"; - @"--define:EXTENSIONTYPING"; + @"--define:FX_RESX_RESOURCE_READER"; "--define:FX_RESIDENT_COMPILER"; + @"--define:SHADOW_COPY_REFERENCES"; "--define:EXTENSIONTYPING"; @"--define:COMPILER_SERVICE_DLL_ASSUMES_FSHARP_CORE_4_4_0_0"; @"--define:COMPILER_SERVICE_DLL"; "--define:NO_STRONG_NAMES"; "--define:TRACE"; @"--doc:..\..\..\bin\v4.5\FSharp.Compiler.Service.xml"; "--optimize-"; From 5e2a5639e3685fc2636d04ef0708feb5990f0b81 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 9 Sep 2019 12:40:14 -0700 Subject: [PATCH 068/146] cleanup compilingFsLib (#7510) --- src/fsharp/CompileOps.fs | 9 ----- src/fsharp/CompileOps.fsi | 6 --- src/fsharp/CompileOptions.fs | 34 ++++++----------- src/fsharp/fsc.fs | 73 +++--------------------------------- 4 files changed, 17 insertions(+), 105 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5b75cf1077..b8b7fcdc93 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2015,9 +2015,6 @@ type TcConfigBuilder = mutable openDebugInformationForLaterStaticLinking: bool (* only for --standalone *) defaultFSharpBinariesDir: string mutable compilingFslib: bool - mutable compilingFslib20: string option - mutable compilingFslib40: bool - mutable compilingFslibNoBigInt: bool mutable useIncrementalBuilder: bool mutable includes: string list mutable implicitOpens: string list @@ -2180,9 +2177,6 @@ type TcConfigBuilder = openDebugInformationForLaterStaticLinking = false defaultFSharpBinariesDir = String.Empty compilingFslib = false - compilingFslib20 = None - compilingFslib40 = false - compilingFslibNoBigInt = false useIncrementalBuilder = false useFsiAuxLib = false implicitOpens = [] @@ -2665,9 +2659,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = member x.openDebugInformationForLaterStaticLinking = data.openDebugInformationForLaterStaticLinking member x.fsharpBinariesDir = fsharpBinariesDirValue member x.compilingFslib = data.compilingFslib - member x.compilingFslib20 = data.compilingFslib20 - member x.compilingFslib40 = data.compilingFslib40 - member x.compilingFslibNoBigInt = data.compilingFslibNoBigInt member x.useIncrementalBuilder = data.useIncrementalBuilder member x.includes = data.includes member x.implicitOpens = data.implicitOpens diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 1262542cd9..ff5555e8f3 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -256,9 +256,6 @@ type TcConfigBuilder = mutable openDebugInformationForLaterStaticLinking: bool defaultFSharpBinariesDir: string mutable compilingFslib: bool - mutable compilingFslib20: string option - mutable compilingFslib40: bool - mutable compilingFslibNoBigInt: bool mutable useIncrementalBuilder: bool mutable includes: string list mutable implicitOpens: string list @@ -424,9 +421,6 @@ type TcConfig = member openDebugInformationForLaterStaticLinking: bool member fsharpBinariesDir: string member compilingFslib: bool - member compilingFslib20: string option - member compilingFslib40: bool - member compilingFslibNoBigInt: bool member useIncrementalBuilder: bool member includes: string list member implicitOpens: string list diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index e548a49e71..a3c0f5c327 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -1217,10 +1217,9 @@ let internalFlags (tcConfigB:TcConfigBuilder) = Some(InternalCommandLineOption("metadataversion", rangeCmdArgs)), None) ] - // OptionBlock: Deprecated flags (fsc, service only) //-------------------------------------------------- - + let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = CompilerOption ("compiling-fslib", tagNone, @@ -1231,23 +1230,14 @@ let compilingFsLibFlag (tcConfigB: TcConfigBuilder) = IlxSettings.ilxCompilingFSharpCoreLib := true), Some(InternalCommandLineOption("--compiling-fslib", rangeCmdArgs)), None) -let compilingFsLib20Flag (tcConfigB: TcConfigBuilder) = - CompilerOption - ("compiling-fslib-20", tagNone, - OptionString (fun s -> tcConfigB.compilingFslib20 <- Some s ), - Some(InternalCommandLineOption("--compiling-fslib-20", rangeCmdArgs)), None) +let compilingFsLib20Flag = + CompilerOption ("compiling-fslib-20", tagNone, OptionString (fun _ -> () ), None, None) -let compilingFsLib40Flag (tcConfigB: TcConfigBuilder) = - CompilerOption - ("compiling-fslib-40", tagNone, - OptionUnit (fun () -> tcConfigB.compilingFslib40 <- true ), - Some(InternalCommandLineOption("--compiling-fslib-40", rangeCmdArgs)), None) +let compilingFsLib40Flag = + CompilerOption ("compiling-fslib-40", tagNone, OptionUnit (fun () -> ()), None, None) -let compilingFsLibNoBigIntFlag (tcConfigB: TcConfigBuilder) = - CompilerOption - ("compiling-fslib-nobigint", tagNone, - OptionUnit (fun () -> tcConfigB.compilingFslibNoBigInt <- true ), - Some(InternalCommandLineOption("--compiling-fslib-nobigint", rangeCmdArgs)), None) +let compilingFsLibNoBigIntFlag = + CompilerOption ("compiling-fslib-nobigint", tagNone, OptionUnit (fun () -> () ), None, None) let mlKeywordsFlag = CompilerOption @@ -1262,7 +1252,7 @@ let gnuStyleErrorsFlag tcConfigB = Some(DeprecatedCommandLineOptionNoDescription("--gnu-style-errors", rangeCmdArgs)), None) let deprecatedFlagsBoth tcConfigB = - [ + [ CompilerOption ("light", tagNone, OptionUnit (fun () -> tcConfigB.light <- Some true), @@ -1278,7 +1268,7 @@ let deprecatedFlagsBoth tcConfigB = OptionUnit (fun () -> tcConfigB.light <- Some false), Some(DeprecatedCommandLineOptionNoDescription("--no-indentation-syntax", rangeCmdArgs)), None) ] - + let deprecatedFlagsFsi tcConfigB = deprecatedFlagsBoth tcConfigB let deprecatedFlagsFsc tcConfigB = @@ -1311,9 +1301,9 @@ let deprecatedFlagsFsc tcConfigB = Some(DeprecatedCommandLineOptionNoDescription("--progress", rangeCmdArgs)), None) compilingFsLibFlag tcConfigB - compilingFsLib20Flag tcConfigB - compilingFsLib40Flag tcConfigB - compilingFsLibNoBigIntFlag tcConfigB + compilingFsLib20Flag + compilingFsLib40Flag + compilingFsLibNoBigIntFlag CompilerOption ("version", tagString, diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 35f8080e9d..e3177acd7f 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -869,11 +869,9 @@ module MainModuleBuilder = error(Error(FSComp.SR.fscAssemblyCultureAttributeError(), rangeCmdArgs)) // Add the type forwarders to any .NET DLL post-.NET-2.0, to give binary compatibility - let exportedTypesList = - if (tcConfig.compilingFslib && tcConfig.compilingFslib40) then - (List.append (createMscorlibExportList tcGlobals) - (if tcConfig.compilingFslibNoBigInt then [] else (createSystemNumericsExportList tcConfig tcImports)) - ) + let exportedTypesList = + if tcConfig.compilingFslib then + List.append (createMscorlibExportList tcGlobals) (createSystemNumericsExportList tcConfig tcImports) else [] @@ -1279,64 +1277,6 @@ module StaticLinker = ilxMainModule, rewriteExternalRefsToLocalRefs - - // LEGACY: This is only used when compiling an FSharp.Core for .NET 2.0 (FSharp.Core 2.3.0.0). We no longer - // build new FSharp.Core for that configuration. - // - // Find all IL modules that are to be statically linked given the static linking roots. - let LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig: TcConfig, ilGlobals: ILGlobals, ilxMainModule) = - let mscorlib40 = tcConfig.compilingFslib20.Value - - let ilBinaryReader = - let ilGlobals = mkILGlobals ILScopeRef.Local - let opts : ILReaderOptions = - { ilGlobals = ilGlobals - reduceMemoryUsage = tcConfig.reduceMemoryUsage - metadataOnly = MetadataOnlyFlag.No - tryGetMetadataSnapshot = (fun _ -> None) - pdbDirPath = None } - ILBinaryReader.OpenILModuleReader mscorlib40 opts - - let tdefs1 = ilxMainModule.TypeDefs.AsList |> List.filter (fun td -> not (MainModuleBuilder.injectedCompatTypes.Contains(td.Name))) - let tdefs2 = ilBinaryReader.ILModuleDef.TypeDefs.AsList |> List.filter (fun td -> MainModuleBuilder.injectedCompatTypes.Contains(td.Name)) - //printfn "tdefs2 = %A" (tdefs2 |> List.map (fun tdef -> tdef.Name)) - - // rewrite the mscorlib references - let tdefs2 = - let fakeModule = mkILSimpleModule "" "" true (4, 0) false (mkILTypeDefs tdefs2) None None 0 (mkILExportedTypes []) "" - let fakeModule = - fakeModule |> Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (fun tref -> - if MainModuleBuilder.injectedCompatTypes.Contains(tref.Name) || (tref.Enclosing |> List.exists (fun x -> MainModuleBuilder.injectedCompatTypes.Contains x)) then - tref - //|> Morphs.morphILScopeRefsInILTypeRef (function ILScopeRef.Local -> ilGlobals.mscorlibScopeRef | x -> x) - // The implementations of Tuple use two private methods from System.Environment to get a resource string. Remap it - elif tref.Name = "System.Environment" then - ILTypeRef.Create(ILScopeRef.Local, [], "Microsoft.FSharp.Core.PrivateEnvironment") //|> Morphs.morphILScopeRefsInILTypeRef (function ILScopeRef.Local -> ilGlobals.mscorlibScopeRef | x -> x) - else - tref |> Morphs.morphILScopeRefsInILTypeRef (fun _ -> ilGlobals.primaryAssemblyScopeRef) ) - - // strip out System.Runtime.TargetedPatchingOptOutAttribute, which doesn't exist for 2.0 - let fakeModule = - {fakeModule with - TypeDefs = - mkILTypeDefs - ([ for td in fakeModule.TypeDefs do - let meths = td.Methods.AsList - |> List.map (fun md -> - md.With(customAttrs = - mkILCustomAttrs (td.CustomAttrs.AsList |> List.filter (fun ilattr -> - ilattr.Method.DeclaringType.TypeRef.FullName <> "System.Runtime.TargetedPatchingOptOutAttribute")))) - |> mkILMethods - let td = td.With(methods=meths) - yield td.With(methods=meths) ])} - //ILAsciiWriter.output_module stdout fakeModule - fakeModule.TypeDefs.AsList - - let ilxMainModule = - { ilxMainModule with - TypeDefs = mkILTypeDefs (tdefs1 @ tdefs2) } - ilxMainModule - [] type Node = { name: string @@ -1481,7 +1421,7 @@ module StaticLinker = let StaticLink (ctok, tcConfig: TcConfig, tcImports: TcImports, ilGlobals: ILGlobals) = #if !NO_EXTENSIONTYPING - let providerGeneratedAssemblies = + let providerGeneratedAssemblies = [ // Add all EST-generated assemblies into the static linking set for KeyValue(_, importedBinary: ImportedBinary) in tcImports.DllTable do @@ -1490,10 +1430,7 @@ module StaticLinker = | None -> () | Some provAssemStaticLinkInfo -> yield (importedBinary, provAssemStaticLinkInfo) ] #endif - if tcConfig.compilingFslib && tcConfig.compilingFslib20.IsSome then - (fun ilxMainModule -> LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig, ilGlobals, ilxMainModule)) - - elif not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty + if not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty #if !NO_EXTENSIONTYPING && providerGeneratedAssemblies.IsEmpty #endif From 8413dac87a3932114d26c23d93c35bd7f5a335f3 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 9 Sep 2019 16:43:34 -0700 Subject: [PATCH 069/146] Remove Dead code --- BigInteger (#7511) * Remove Dead code --- BigInteger * Put back FSharp.Math namespace ... even though it's empty * Improve empty namespace comment --- src/fsharp/FSharp.Core/FSharp.Core.fsproj | 6 - .../FSharp.Core/fslib-extra-pervasives.fsi | 1 - src/fsharp/FSharp.Core/math/n.fs | 1599 ----------------- src/fsharp/FSharp.Core/math/n.fsi | 59 - src/fsharp/FSharp.Core/math/z.fs | 356 +--- src/fsharp/FSharp.Core/math/z.fsi | 86 +- 6 files changed, 16 insertions(+), 2091 deletions(-) delete mode 100644 src/fsharp/FSharp.Core/math/n.fs delete mode 100644 src/fsharp/FSharp.Core/math/n.fsi diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 588f72eaed..03a83fca87 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -122,12 +122,6 @@ Reflection/reflect.fs - - Numerics/n.fsi - - - Numerics/n.fs - Numerics/z.fsi diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi index 6cfbd860c4..804d48bc3d 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi @@ -11,7 +11,6 @@ module ExtraTopLevelOperators = open Microsoft.FSharp.Control open Microsoft.FSharp.Collections open Microsoft.FSharp.Text - open Microsoft.FSharp.Math #if !FX_NO_SYSTEM_CONSOLE /// Print to stdout using the given format. diff --git a/src/fsharp/FSharp.Core/math/n.fs b/src/fsharp/FSharp.Core/math/n.fs deleted file mode 100644 index f448940a8b..0000000000 --- a/src/fsharp/FSharp.Core/math/n.fs +++ /dev/null @@ -1,1599 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.FSharp.Math - -#if FX_NO_BIGINT -open System -open System.Diagnostics.CodeAnalysis -open Microsoft.FSharp.Core -open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators -open Microsoft.FSharp.Core.Operators -open Microsoft.FSharp.Collections -open Microsoft.FSharp.Primitives.Basics - -type ints = int array - -[] -type internal BigNat = - - // Have n = sum (from i=0 to bound) a.[i] * baseN ^ i - // Have 0 <= a.[i] < baseN. - //------ - // Invariant: bound is least such, i.e. bound=0 or (a.[bound-1] is highest coeff). - // Zero is {bound=0,a=...}. - // Naturals are a normal form, - // but not structurally so, - // since arrays may have non-contributing cells at a.[bound] and beyond. - // - { mutable bound : int; // non-zero coeff must be 0...(bound-1) - digits : ints // must have at least elts 0...(bound-1), - // maybe more (which should be zero!). - // Actually, the "zero" condition may be relaxed. - // - } - - -module internal BigNatModule = - - //------------------------------------------------------------------------- - // misc - //----------------------------------------------------------------------- - - #if SELFTEST - let check b = if not b then failwith "assertion failwith" - #endif - - module FFT = - let rec pow32 x n = - if n=0 then 1 - elif n % 2 = 0 then pow32 (x*x) (n / 2) - else x* pow32 (x*x) (n / 2) - - let leastBounding2Power b = - let rec findBounding2Power b tp i = if b<=tp then tp,i else findBounding2Power b (tp*2) (i+1) in - findBounding2Power b 1 0 - - //------------------------------------------------------------------------- - // p = 2^k.m + 1 prime and w primitive 2^k root of 1 mod p - //----------------------------------------------------------------------- - - // Given p = 2^k.m + 1 prime and w a primitive 2^k root of unity (mod p). - // Required to define arithmetic ops for Fp = field modulo p. - // The following are possible choices for p. - - // p, k, m, g, w - // let p,k,m,g,w = 97L, 4, 6, 5, 8 // p is 7 bit - // let p,k,m,g,w = 769L, 8, 3, 7, 7 // p is 10 bit - // let p,k,m,g,w = 7681L, 8, 30, 13, 198 // p is 13 bit - // let p,k,m,g,w = 12289L, 10, 12, 11, 49 // p is 14 bit - // let p,k,m,g,w = 167772161L, 25, 5, 557092, 39162105 // p is 28 bit - // let p,k,m,g,w = 469762049L, 26, 7, 1226571, 288772249 // p is 29 bit - - - let p,k,m,g,w = 2013265921L, 27, 15, 31, 440564289 // p is 31 bit - let primeP = p - - let maxBitsInsideFp = 30 - - - //------------------------------------------------------------------------- - // Fp = finite field mod p - rep is uint32 - //----------------------------------------------------------------------- - - - type fp = uint32 - // operations in Fp (finite field size p) - module Fp = - //module I = UInt32 - let p = 2013265921ul : fp - let p64 = 2013265921UL : uint64 - let toInt (x:fp) : int = int32 x - let ofInt32 (x:int) : fp = uint32 x - - let mzero : fp = 0ul - let mone : fp = 1ul - let mtwo : fp = 2ul - let inline madd (x:fp) (y:fp) : fp = (x + y) % p - let inline msub (x:fp) (y:fp) : fp = (x + p - y) % p - let inline mmul (x:fp) (y:fp) : fp = uint32 ((uint64 x * uint64 y) % p64) - - let rec mpow x n = - if n=0 then mone - elif n % 2=0 then mpow (mmul x x) (n / 2) - else mmul x (mpow (mmul x x) (n / 2)) - - let rec mpowL x n = - if n = 0L then mone - elif n % 2L = 0L then mpowL (mmul x x) (n / 2L) - else mmul x (mpowL (mmul x x) (n / 2L)) - - // Have the w is primitive 2^kth root of 1 in Zp - let m2PowNthRoot n = - // Find x s.t. x is (2^n)th root of unity. - // - // pow w (pow 2 k) = 1 primitively. - // = pow w (pow 2 ((k-n)+n)) - // = pow w (pow 2 (k-n) * pow 2 n) - // = pow (pow w (pow 2 (k-n))) (pow 2 n) - // - // Take wn = pow (pow w (pow 2 (k-n))) - - mpow (uint32 w) (pow32 2 (k-n)) - - let minv x = mpowL x (primeP - 2L) - - - //------------------------------------------------------------------------- - // FFT - in place low garbage - //----------------------------------------------------------------------- - - open Fp - let rec computeFFT lambda mu n w (u: _[]) (res: _[]) offset = - // Given n a 2-power, - // w an nth root of 1 in Fp, and - // lambda, mu and u(x) defining - // poly(lambda,mu,x) = sum(i pow32 2 i) - - let computeFftPaddedPolynomialProduct bigK k u v = - // REQUIRES: bigK = 2^k - // REQUIRES: Array lengths of u and v = bigK. - // REQUIRES: degree(uv) <= bigK-1 - // --- - // Given u,v polynomials. - // Computes the product polynomial by FFT. - // For correctness, - // require the result coeff to be in range [0,p-1], for p defining Fp above. - - #if SELFTEST - check ( k <= maxTwoPower ); - check ( bigK = twoPowerTable.[k] ); - check ( u.Length = bigK ); - check ( v.Length = bigK ); - #endif - // Find 2^k primitive root of 1 - let w = m2PowNthRoot k - // FFT - let n = bigK - let uT = computFftInPlace n w u - let vT = computFftInPlace n w v - // Evaluate - let rT = Array.init n (fun i -> mmul uT.[i] vT.[i]) - // INV FFT - let r = computeInverseFftInPlace n w rT - r - - let padTo n (u: _ array) = - let uBound = u.Length - Array.init n (fun i -> if i mmul uT.[i] vT.[i]) - // INV FFT - let r = computeInverseFftInPlace n w rT - Array.map Fp.toInt r - - - //------------------------------------------------------------------------- - // fp exports - //----------------------------------------------------------------------- - - open Fp - let mzero = mzero - let mone = mone - let maxFp = msub Fp.p mone - - //------------------------------------------------------------------------- - // FFT - reference implementation - //----------------------------------------------------------------------- - - #if SELFTEST - open Fp - let rec computeFftReference n w u = - // Given n a 2-power, - // w an nth root of 1 in Fp, and - // u(x) = sum(i u.[2*i]) - let uodd = Array.init (n/2) (fun i -> u.[2*i+1]) - let uevenFT = computeFftReference (n/2) (mmul w w) ueven - let uoddFT = computeFftReference (n/2) (mmul w w) uodd - Array.init n - (fun j -> - if j < n/2 then - madd - (uevenFT.[j]) - (mmul - (mpow w j) - (uoddFT.[j])) - else - let j = j - (n/2) - msub - (uevenFT.[j]) - (mmul - (mpow w j) - (uoddFT.[j]))) - #endif - - open FFT - - type n = BigNat - - let bound (n: n) = n.bound - let setBound (n: n) (v:int32) = n.bound <- v - let coeff (n:n) i = n.digits.[i] - let coeff64 (n:n) i = int64 (coeff n i) - let setCoeff (n:n) i v = n.digits.[i] <- v - - let rec pow64 x n = - if n=0 then 1L - elif n % 2 = 0 then pow64 (x * x) (n / 2) - else x * (pow64 (x * x) (n / 2)) - - let rec pow32 x n = - if n=0 then 1 - elif n % 2 = 0 then pow32 (x*x) (n / 2) - else x* pow32 (x*x) (n / 2) - - let hash(n) = - let mutable res = 0 - for i = 0 to n.bound - 1 do // could stop soon, it's "hash" - res <- n.digits.[i] + (res <<< 3) - done; - res - - //---------------------------------------------------------------------------- - // misc - //-------------------------------------------------------------------------- - -#if CHECKED - let check b str = if not b then failwith ("check failed: " + str) -#endif - let maxInt a b = if a int32 - let inline div64base (x:int64) = int64 (uint64 x >>> baseBits) - - let divbase x = int32 (uint32 x >>> baseBits) - let modbase x = (x &&& baseMask) - - let inline index z i = if i < z.bound then z.digits.[i] else 0 - - let createN b = { bound = b; - digits = Array.zeroCreate b } - let copyN x = { bound = x.bound; - digits = Array.copy x.digits } // could copy just enough... - - let normN n = - // normalises bound - let rec findLeastBound (na:ints) i = if i = -1 || na.[i]<>0 then i+1 else findLeastBound na (i-1) - let bound = findLeastBound n.digits (n.bound-1) - n.bound <- bound; - n - - let boundInt = 2 // int will fit with bound=2 - let boundInt64 = 3 // int64 will fit with bound=3 - let boundBase = 1 // base will fit with bound=1 - obviously! - -//---------------------------------------------------------------------------- -// base, coefficients, poly -//-------------------------------------------------------------------------- - - let embed x = - let x = if x<0 then 0 else x // no -ve naturals - if x < baseN then - let r = createN 1 - r.digits.[0] <- x; - normN r - else - let r = createN boundInt - for i = 0 to boundInt - 1 do - r.digits.[i] <- (x / pow32 baseN i) % baseN - done; - normN r - - let embed64 x = - let x = if x<0L then 0L else x // no -ve naturals - let r = createN boundInt64 - for i = 0 to boundInt64-1 do - r.digits.[i] <- int32 ( (x / pow64 baseNi64 i) % baseNi64) - done; - normN r - - let eval n = - if n.bound = 1 - then n.digits.[0] - else - let mutable acc = 0 - for i = n.bound-1 downto 0 do - acc <- n.digits.[i] + baseN * acc - done; - acc - - let eval64 n = - if n.bound = 1 - then int64 n.digits.[0] - else - let mutable acc = 0L - for i = n.bound-1 downto 0 do - acc <- int64 (n.digits.[i]) + baseNi64 * acc - done; - acc - - let one = embed 1 - let zero = embed 0 - - let restrictTo d n = - { bound = minInt d n.bound; digits = n.digits} - - let shiftUp d n = - let m = createN (n.bound+d) - for i = 0 to n.bound-1 do - m.digits.[i+d] <- n.digits.[i] - done; - m - - let shiftDown d n = - if n.bound-d<=0 then - zero - else - let m = createN (n.bound-d) - for i = 0 to m.bound-1 do - m.digits.[i] <- n.digits.[i+d] - done; - m - - let degree n = n.bound-1 - - -//---------------------------------------------------------------------------- -// add, sub -//-------------------------------------------------------------------------- - - // addition - let rec addP i n c p q r = // p+q + c - if i0 then - r.digits.[i] <- modbase x; - let c = divbase x - // if p (or q) exhausted and c zero could switch to copying mode - subP (i+1) n c p q r - else - let x = x + baseN // add baseN - r.digits.[i] <- modbase x; - let c = divbase x - 1 // sub baseN - // if p (or q) exhausted and c zero could switch to copying mode - subP (i+1) n c p q r - else - let underflow = c<>0 - underflow - - let sub p q = - // NOTE: x-y=0 when x<=y, it is natural subtraction - let rbound = maxInt p.bound q.bound - let r = createN rbound - let carry = 0 - let underflow = subP 0 rbound carry p q r - if underflow then - embed 0 - else - normN r - - -//---------------------------------------------------------------------------- -// isZero, equal, ordering, sign, min, max -//-------------------------------------------------------------------------- - - let isZero p = p.bound=0 - let IsZero p = isZero p - let isOne p = p.bound=1 && p.digits.[0] = 1 - - let equal p q = - (p.bound = q.bound) && - (let rec check (pa:ints) (qa:ints) i = - // HAVE: pa.[j] = qa.[j] for i < j < p.bound - (i = -1) || (pa.[i]=qa.[i] && check pa qa (i-1)) - - check p.digits q.digits (p.bound-1)) - - let shiftCompare p pn q qn = - if p.bound + pn < q.bound + qn then -1 - elif p.bound + pn > q.bound + pn then 1 - else - let rec check (pa:ints) (qa:ints) i = - // HAVE: pa.[j-pn] = qa.[j-qn] for i < j < p.bound - // Looking for most significant differing coeffs to determine ordering - if i = -1 then - 0 - else - let pai = if i < pn then 0 else pa.[i-pn] - let qai = if i < qn then 0 else qa.[i-qn] - if pai = qai then check pa qa (i-1) - elif pai < qai then -1 - else 1 - - check p.digits q.digits (p.bound + pn - 1) - - let compare p q = - if p.bound < q.bound then -1 - elif p.bound > q.bound then 1 - else - let rec check (pa:ints) (qa:ints) i = - // HAVE: pa.[j] = qa.[j] for i < j < p.bound - // Looking for most significant differing coeffs to determine ordering - if i = -1 then 0 - elif pa.[i]=qa.[i] then check pa qa (i-1) - elif pa.[i]] - let lt p q = compare p q = -1 - [] - let gt p q = compare p q = 1 - [] - let lte p q = compare p q <> 1 - [] - let gte p q = compare p q <> -1 - - [] - let min a b = if lt a b then a else b - [] - let max a b = if lt a b then b else a - - -//---------------------------------------------------------------------------- -// scale -//-------------------------------------------------------------------------- - - // REQUIRE: baseN + baseN.2^32 < Int64.maxInt - let rec contributeArr (a:ints) i (c:int64) = - // Given c and require c < baseN.2^32 - // Compute: r <- r + c . B^i - // via r.digits.[i] <- r.digits.[i] + c and normalised - let x = int64 a.[i] + c - // HAVE: x < baseN + baseN.2^32 - let c = div64base x - let x = mod64base x - // HAVE: c < 1 + 2^32 < baseN.2^32, recursive call ok - // HAVE: x < baseN - a.[i] <- x; // store residue x - if c>0L then - contributeArr a (i+1) c // contribute carry next position - - let inline contribute r i c = contributeArr r.digits i c - - // REQUIRE: maxInt < 2^32 - [] - let rec scale (k:int) (p:n) = - // Given k and p and require k < 2^32 - // Computes "scalar" product k.p - // - let rbound = p.bound + boundInt - let r = createN rbound - let k = int64 k - for i = 0 to p.bound-1 do - let kpi = k * int64 p.digits.[i] - // HAVE: kpi < 2^32 * baseN which meets "contribute" requirement - contribute r i kpi - done; - normN r - - -//---------------------------------------------------------------------------- -// mulSchoolBook -//-------------------------------------------------------------------------- - - // multiplication: naively O(n^2) -(* - let mulSchoolBook' p q = - let rbound = p.bound + q.bound + boundBase*2 - let r = createN rbound - let pa = p.digits - let qa = q.digits - for i = 0 to p.bound-1 do - for j = 0 to q.bound-1 do - contribute r (i+j) (int64 pa.[i] * int64 qa.[j]) - done - done; - normN r -*) - - let mulSchoolBookBothSmall p q = - let r = createN 2 - let rak = int64 p * int64 q - setCoeff r 0 (mod64base rak); - setCoeff r 1 (int32 (div64base rak)) - normN r - - let rec mulSchoolBookCarry r c k = - if ( c > 0L ) then - // ToAdd = c.B^k - let rak = (coeff64 r k) + c - setCoeff r k (mod64base rak); - mulSchoolBookCarry r (div64base rak) (k + 1) - - let mulSchoolBookOneSmall p q = - let bp = bound(p) - let rbound = bp + 1 - let r = createN rbound - let q = int64 q - let mutable c = 0L - for i = 0 to bp-1 do - let rak = c + (coeff64 r i) + (coeff64 p i) * q - setCoeff r i (mod64base rak); - c <- div64base rak; - mulSchoolBookCarry r c bp - normN r - - - // multiplication: naively O(n^2) -- this version - unchecked - is faster - let mulSchoolBookNeitherSmall p q = - let rbound = p.bound + q.bound - let r = createN rbound - let ra = r.digits - let pa = p.digits - let qa = q.digits - // ToAdd p*q - for i = 0 to p.bound-1 do - // ToAdd p.[i] * q * B^i - let pai = int64 pa.[i] - let mutable c = 0L - let mutable k = i // k = i + j - // ToAdd = pi.qj.B^(i+j) for j = 0,j+1... - for j = 0 to q.bound-1 do - // ToAdd = c.B^k + pi.qj.B^(i+j) for j = j,j+1... and k = i+j - let qaj = int64 qa.[j] - let rak = int64 ra.[k] + c + pai * qaj - ra.[k] <- int32 (mod64base rak); - c <- div64base rak; - k <- k + 1; - mulSchoolBookCarry r c k - normN r - - let mulSchoolBook p q = - let pSmall = (bound(p) = 1) - let qSmall = (bound(q) = 1) - if (pSmall && qSmall) then mulSchoolBookBothSmall (coeff p 0) (coeff q 0) - elif pSmall then mulSchoolBookOneSmall q (coeff p 0) - elif qSmall then mulSchoolBookOneSmall p (coeff q 0) - else mulSchoolBookNeitherSmall p q - - -//---------------------------------------------------------------------------- -// quickMulUsingFft -//-------------------------------------------------------------------------- - - // The FFT polynomial multiplier requires the result coeffs fit inside Fp. - // - // OVERVIEW: - // The numbers are recoded as polynomials to be evaluated at (x=2^bigL). - // The polynomials are FFT multiplied, requiring result coeff to fit Fp. - // The result product is recovered by evaluating the poly at (x=2^bigL). - // - // REF: - // QuickMul: Practical FFT-base Integer Multiplication, - // Chee Yap and Chen Yi. - // - // There is choice of how to encode the nats polynomials. - // The choice is the (2^bigL) base to use. - // For bigL=1, the FFT will cater for a product of upto 256M bits. - // Larger bigL have less reach, but compute faster. - // So plan to choose bigL depending on the number of bits product. - // - // DETERMINING THE K,L BOUNDS. - // - // Given representing using K-vectors, K a power of 2, K=2^k, and - // If choosing inputs to have L-bit coefficients. - // - // The result coeff are: - // - // res(i) = sum (j] - type encoding = - { bigL : int; // bits per input coeff - twoToBigL : int; // 2^bigL - k : int; - bigK : int; // bigK = 2^k, number of terms polynomials - bigN : int; // bits result (under-estimate of limit) - split : int; // baseBits / bigL - splits : int array; - } - -#if CHECKED - let _ = check (baseBits=24) "24bit" -#endif - // Requiring baseN mod 2^bigL = 0 gave quick encoding, but... - // also a terrible drop performance when the bigK jumped by more than needed! - // Below, it choose a minimal bigK to hold the product. - - let mkEncoding (bigL,k,bigK,bigN) = -#if CHECKED - check (bigK = pow32 2 k) "bigK"; - check (bigN = bigK * bigL) "bigN"; - check (2 * bigL + k <= maxBitsInsideFp) "constraint"; -#endif - { bigL = bigL; - twoToBigL = pow32 2 bigL; - k = k; - bigK = bigK; - bigN = bigN; - split = baseBits/bigL; // should divide exactly - splits = Array.init (baseBits/bigL) (fun i -> pow32 2 (bigL*i)) - } - - let table = - [| // bigL , k , bigK , bigN // - mkEncoding ( 1 , 28 , 268435456 , 268435456 ) ; - mkEncoding ( 2 , 26 , 67108864 , 134217728 ) ; - mkEncoding ( 3 , 24 , 16777216 , 50331648 ) ; - mkEncoding ( 4 , 22 , 4194304 , 16777216 ) ; - mkEncoding ( 5 , 20 , 1048576 , 5242880 ) ; - mkEncoding ( 6 , 18 , 262144 , 1572864 ) ; - mkEncoding ( 7 , 16 , 65536 , 458752 ) ; - mkEncoding ( 8 , 14 , 16384 , 131072 ) ; - mkEncoding ( 9 , 12 , 4096 , 36864 ) ; - mkEncoding ( 10 , 10 , 1024 , 10240 ) ; - mkEncoding ( 11 , 8 , 256 , 2816 ) ; - mkEncoding ( 12 , 6 , 64 , 768 ) ; - mkEncoding ( 13 , 4 , 16 , 208 ) ; - |] - - let calculateTableTow bigL = - // Given L. - // Have L via "log2 K <= maxBitsInsideFp - 2L". - // Have N via "N = K.L" - // - let k = maxBitsInsideFp - 2*bigL - let bigK = pow64 2L k - let N = bigK * int64 bigL - bigL,k,bigK,N - - let encodingGivenResultBits bitsRes = - // choose maximum bigL s.t. bitsRes < bigN - // EXCEPTION: fails is bitsRes exceeds 2^28 (largest bigN table) - let rec selectFrom i = - if i+1 < table.Length && bitsRes < table.[i+1].bigN then - selectFrom (i+1) - else - table.[i] - - if bitsRes >= table.[0].bigN then - failwith "Product is huge, around 268435456 bits, beyond quickmul" - else - selectFrom 0 - - let bitmask = Array.init baseBits (fun i -> (pow32 2 i - 1)) - let twopowers = Array.init baseBits (fun i -> (pow32 2 i)) - let twopowersI64 = Array.init baseBits (fun i -> (pow64 2L i)) - // bitmask(k) = 2^k - 1 - // twopowers(k) = 2^k // - - let wordBits word = - let rec hi k = - if k=0 then 0 - elif (word &&& twopowers.[k-1]) <> 0 then k - else hi (k-1) - - hi baseBits - - let bits u = - if u.bound=0 then 0 - else degree u * baseBits + wordBits u.digits.[degree u] - - let extractBits n enc bi = - let bj = bi + enc.bigL - 1 // the last bit (inclusive) - let biw = bi / baseBits // first bit is this index pos - let bjw = bj / baseBits // last bit is this index pos - if biw <> bjw then - // two words - let x = index n biw - let y = index n bjw // bjw = biw+1 - let xbit = bi % baseBits // start bit x - let nxbits = baseBits - xbit // number of bitsin x - let x = x >>> xbit // shift down x so bit0 is first - let y = y <<< nxbits // shift up y so it starts where x finished - let x = x ||| y // combine them - let x = x &&& bitmask.[enc.bigL] // mask out (high y bits) to get required bits - x - else - // one word - let x = index n biw - let xbit = bi % baseBits // start bit x - let x = x >>> xbit - let x = x &&& bitmask.[enc.bigL] - x - - let encodePoly enc n = - // Find poly s.t. n = poly evaluated at x=2^bigL - // with 0 <= pi < 2^bigL. - // - let poly = Array.create enc.bigK (Fp.ofInt32 0) - let biMax = n.bound * baseBits - let rec encoder i bi = - // bi = i * bigL - if i=enc.bigK || bi > biMax then - () // done - else - ( let pi = extractBits n enc bi - poly.[i] <- Fp.ofInt32 pi; - let i = i + 1 - let bi = bi + enc.bigL - encoder i bi - ) - - encoder 0 0; - poly - - let decodeResultBits enc (poly : fp array) = - // Decoding evaluates poly(x) (coeff Fp) at X = 2^bigL. - // A bound on number of result bits is "enc.bigN + boundInt", but that takes HUGE STEPS. - // Garbage has a cost, so we minimize it by working out a tight bound. - // - // poly(X) = sum i=0..n coeff_i * X^i where n is highest non-zero coeff. - // <= 2^maxBitsInsideFp * (1 + X + ... X^n) - // <= 2^maxBitsInsideFp * (X^(n+1) - 1) / (X - 1) - // <= 2^maxBitsInsideFp * X^(n+1) / (X - 1) - // <= 2^maxBitsInsideFp * X^(n+1) / (X/2) provided X/2 <= X-1 - // <= 2^maxBitsInsideFp * X^n * 2 - // <= 2^maxBitsInsideFp * (2^bigL)^n * 2 - // <= 2^(maxBitsInsideFp + bigL.n + 1) - // - let mutable n = 0 - for i = 0 to poly.Length-1 do - if poly.[i] <> mzero then n <- i - done; - let rbits = maxBitsInsideFp + enc.bigL * n + 1 - rbits + 1 // +1 since 2^1 requires 2 bits not 1 - - // REQUIRE: bigL <= baseBits - let decodePoly enc poly = - // Find n = poly evaluated at x=2^bigL - // Note, 0 <= pi < maxFp. - // - let rbound = (decodeResultBits enc poly) / baseBits + 1 - let r = createN rbound - let rec evaluate i j d = - // HAVE: bigL.i = j * baseBits + d and d= rbound then -#if CHECKED - check (poly.[i] = mzero) "decodePoly"; -#endif - () - else ( - let x = int64 (Fp.toInt poly.[i]) * twopowersI64.[d] - // HAVE: x < 2^32 . 2^baseBits = 2^32.baseN - contribute r j x - ); - let i = i + 1 - let d = d + enc.bigL - let j,d = if d >= baseBits then j+1 , d-baseBits else j,d - // HAVE: d < baseBits, note: bigL minDigitsKaratsuba then - let k = bmax / 2 - let a0 = restrictTo k p - let a1 = shiftDown k p - let b0 = restrictTo k q - let b1 = shiftDown k q - let q0 = mul a0 b0 - let q1 = mul (add a0 a1) (add b0 b1) - let q2 = mul a1 b1 - let p0 = q0 - let p1 = sub q1 (add q0 q2) - let p2 = q2 - let r = add p0 (shiftUp k (add p1 (shiftUp k p2))) - r - else - mulSchoolBook p q - - let rec mulKaratsuba x y = recMulKaratsuba mulKaratsuba x y - - -//---------------------------------------------------------------------------- -// mul - composite -//-------------------------------------------------------------------------- - - let productDigitsUpperSchoolBook = (64000 / baseBits) - // When is it worth switching away from SchoolBook? - // SchoolBook overhead is low, so although it's O(n^2) it remains competitive. - // - // 28/3/2006: - // The FFT can take over from SchoolBook at around 64000 bits. - // Note, FFT performance is stepwise, according to enc from table. - // The steps are big steps (meaning sudden jumps/drops perf). - // - - let singleDigitForceSchoolBook = (32000 / baseBits) - // If either argument is "small" then stay with SchoolBook. - // - - let productDigitsUpperFft = (table.[0].bigN / baseBits) - // QuickMul is good upto a finite (but huge) limit: - // Limit 268,435,456 bits product. - // - // From the code: - // let bitsRes = bits u + bits v - // fails when bitsRes >= table.[0].bigN - // So, not applicable when: - // P1: table.[0].bigN <= bits(u) + bits(v) - // P2: table.[0].bigN <= .. <= baseBits * (u.bound + v.bound) - // P3: table.[0].bigN <= .. <= baseBits * (u.bound + v.bound) - // P4: table.[0].bigN / baseBits <= u.bound + v.bound - // - - // Summary of mul algorithm choice: - // 0 <= uv_bound < upper_school_book - Schoolbook - // upper_school_book <= uv_bound < upper_fft - QuickMul - // upper_fft <= uv_bound < ... - Karatsuba - // - // NOTE: - // - Karatsuba current implementation has high garbage cost. - // - However, a linear space cost is possible... - // - Meantime, switch to Karatsuba only beyond FFT range. - // - - let rec mul p q = - let pqBound = p.bound + q.bound - if pqBound < productDigitsUpperSchoolBook || - p.bound < singleDigitForceSchoolBook || - q.bound < singleDigitForceSchoolBook - then - // Within school-book initial range: - mulSchoolBook p q - else - if pqBound < productDigitsUpperFft then - // Inside QuickMul FFT range: - quickMulUsingFft p q - else - // Beyond QuickMul FFT range, or maybe between Schoolbook and QuickMul (no!): - // Use karatsuba method, with "mul" as recursive multiplier, - // so will reduce sizes of products on recursive calls, - // and QuickMul will take over if they fall within it's range. - // - recMulKaratsuba mul p q - - -//---------------------------------------------------------------------------- -// division - scaleSubInPlace -//-------------------------------------------------------------------------- - - let scaleSubInPlace x f a n = - // Have x = sumR 0 xd (\i.xi.B^i) where xd = degree x - // a = sumR 0 ad (\i.digitsi.B^i) where ad = degree a - // f < B - // n < xd - // Assumes "f.digits.B^n < x". - // Required to remove f.digits.B^n from x place. - //------ - // Result = x_initial - f.digits.B^n - // = x_initial - f.[sumR 0 ad (\i.digitsi.B^(i+n))] - // State: j = 0 - // z = f * a0 - // Invariant(x,z,j,n): - // P1: x_result = x - z.B^(j+n) - f.[sumR (j+1) ad (\i.digitsi.B^i+n)] - // P2: z < B^2 - 1, and so has form z = zHi.B + zLo for zHi,zLo < B. - // Base: Invariant holds initially. - // Step: (a) Remove zLo from x: - // If zLo <= x_(j+n) then zLo <- 0 - // x_(j+n) <- x_(j+n) - zLo - // else zLo <- 0 - // x_(j+n) <- x_(j+n) + (B - zLo) - // = x_(j+n) - zLo + B - // zHi <- zHi + 1 - // Here, invariant P1 still holds, P2 may break. - // (b) Advance j: - // Have z = zHi.B since zLo = 0. - // j <- j + 1 - // z <- zHi + f * a_(j+1) - // P2 holds: - // Have z <= B + (B-1)*(B-1) = B + B^2 - 2B + 1 = B^2 - B + 1 - // Have z <= B^2 - 1 when B >= 2 which is required for B being a base. - // P1 holds, - // moved f.digits_(j+1).B^(j+1+n) factor over. - // - // Once j+1 exceeds ad, summation is zero and it contributes no more terms (b). - // Continue until z = 0, which happens since z decreases towards 0. - // Done. - // - let invariant (_,_,_) = () - #if CHECKED - let x_initial = copyN x - let x_result = sub x_initial (shiftUp n (scale f a)) - let invariant (z,j,n) = - let P1 = - equal - x_result - (sub x (add (shiftUp (j+n) (embed64 z)) - (mul (embed f) - (shiftUp (j+1+n) (shiftDown (j+1) a))))) - let P2 = z < baseNi64 * baseNi64 - 1L - check P1 "P1"; - check P2 "P2" - - #endif - let xres = x - let x,xd = x.digits,degree x - let a,ad = a.digits,degree a - let f = int64 f - let mutable j = 0 - let mutable z = f * int64 a.[0] - while( z > 0L || j < ad ) do - if j > xd then failwith "scaleSubInPlace: pre-condition did not apply, result would be -ve"; - invariant(z,j,n); // P1,P2 hold - let mutable zLo = mod64base z |> int32 - let mutable zHi = div64base z - if zLo <= x.[j+n] then - x.[j+n] <- x.[j+n] - zLo - else ( - x.[j+n] <- x.[j+n] + (baseN - zLo); - zHi <- zHi + 1L - ); - // P1 holds - if j < ad then - z <- zHi + f * int64 a.[j+1] - else - z <- zHi; - j <- j + 1; - // P1,P2 hold - done; - ignore (normN xres) - - // - let scaleSub x f a n = - let freshx = add x zero - scaleSubInPlace freshx f a n; - normN freshx -(* - - let scaleSub2 x f a n = sub x (shiftUp n (mul (embed f) a)) - - let x = (mul (embed 234234234) (pow (embed 10) (embed 20))) - let f = 2 - let a = (embed 1231231231) - let n = 2 - let res = scaleSub x f a n - let res2 = scaleSub2 x f a n - - let x, xd, f, a, ad, n = freshx.digits, freshx.bound, f, a.digits, a.bound, n - *) - - -//---------------------------------------------------------------------------- -// division - scaleAddInPlace -//-------------------------------------------------------------------------- - - let scaleAddInPlace x f a n = - // Have x = sumR 0 xd (\i.xi.B^i) - // a = sumR 0 ad (\i.digitsi.B^i) - // f < B - // n < xd - // Required to add f.digits.B^n to x place. - // Assumes result will fit with x (0...xd). - //------ - // Result = x_initial + f.digits.B^n - // = x_initial + f.[sumR 0 ad (\i.digitsi.B^i+n)] - // State: j = 0 - // z = f * a0 - // Invariant(x,z,j,n): - // P1: x_result = x + z.B^(j+n) + f.[sumR (j+1) ad (\i.digitsi.B^i+n)] - // P2: z < B^2 - 1, and so has form z = zHi.B + zLo for zHi,zLo < B. - // Base: Invariant holds initially. - // Step: (a) Add zLo to x: - // If zLo < B - x_(j+n) then zLo <- 0 - // x_(j+n) <- x_(j+n) + zLo - // else zLo <- 0 - // x_(j+n) <- zLo - (B - x_(j+n)) - // = x_(j+n) + zLo - B - // zHi <- zHi + 1 - // Here, invariant P1 still holds, P2 may break. - // (b) Advance j: - // Have z = zHi.B since zLo = 0. - // j <- j + 1 - // z <- zHi + f * a_(j+1) - // P2 holds: - // Have z <= B + (B-1)*(B-1) = B + B^2 - 2B + 1 = B^2 - B + 1 - // Have z <= B^2 - 1 when B >= 2 which is required for B being a base. - // P1 holds, - // moved f.digits_(j+1).B^(j+1+n) factor over. - // - // Once j+1 exceeds ad, summation is zero and it contributes no more terms (b). - // Continue until z = 0, which happens since z decreases towards 0. - // Done. - // - let invariant (_,_,_) = () -#if CHECKED - let x_initial = copyN x - let x_result = add x_initial (shiftUp n (scale f a)) - let invariant (z,j,n) = - let P1 = - equal - x_result - (add x (add (shiftUp (j+n) (embed64 z)) - (mul (embed f) - (shiftUp (j+1+n) (shiftDown (j+1) a))))) - let P2 = z < baseNi64 * baseNi64 - 1L - check P1 "P1"; - check P2 "P2" - -#endif - let xres = x - let x,xd = x.digits,degree x - let a,ad = a.digits,degree a - let f = int64 f - let mutable j = 0 - let mutable z = f * int64 a.[0] - while( z > 0L || j < ad ) do - if j > xd then failwith "scaleSubInPlace: pre-condition did not apply, result would be -ve"; - invariant(z,j,n); // P1,P2 hold - let mutable zLo = mod64base z |> int32 - let mutable zHi = div64base z - if zLo < baseN - x.[j+n] then - x.[j+n] <- x.[j+n] + zLo - else ( - x.[j+n] <- zLo - (baseN - x.[j+n]); - zHi <- zHi + 1L - ); - // P1 holds - if j < ad then - z <- zHi + f * int64 a.[j+1] - else - z <- zHi; - j <- j + 1; - // P1,P2 hold - done; - ignore (normN xres) - - // - let scaleAdd x f a n = - let freshx = add x zero - scaleAddInPlace freshx f a n; - normN freshx - -(* - let scaleAdd2 x f a n = add x (shiftUp n (mul (embed f) a)) - - let x = (mul (embed 234234234) (pow (embed 10) (embed 20))) - let f = 2 - let a = (embed 1231231231) - let n = 2 - let res = scaleAdd x f a n - let res2 = scaleAdd2 x f a n - - let x, xd, f, a, ad, n = freshx.digits, freshx.bound, f, a.digits, a.bound, n -*) - -//---------------------------------------------------------------------------- -// division - removeFactor -//-------------------------------------------------------------------------- - - (* - let removeFactorReference x a n = - let ff = div x (shiftUp n a) - toInt ff - *) - - let removeFactor x a n = - // Assumes x < a.B^(n+1) - // Choose f s.t. - // (a) f.digits.B^n <= x - // (b) f=0 iff x < a.B^n - // - let dega,degx = degree a,degree x - if degx < dega + n then 0 else // possible with "normalisation" - let aa,xa = a.digits,x.digits - let f = - if dega = 0 then // a = a0 - if degx = n then - xa.[n] / aa.[0] - else ( -#if CHECKED - check (degx = n+1) "removeFactor degx#1"; -#endif - let f64 = (int64 xa.[degx] * baseNi64 + int64 xa.[degx-1]) / int64 aa.[0] - int32 f64 - ) - else // a = sumR 0 dega (\i.digitsi.B^i) - if degx = dega + n then - xa.[degx] / (aa.[dega] + 1) // +1 to bound above a - else ( -#if CHECKED - check (degx = dega+n+1) "removeFactor degx#2"; -#endif - let f64 = (int64 xa.[degx] * baseNi64 + int64 xa.[degx-1]) - / (int64 aa.[dega] + 1L) // +1 to bound above a - int32 f64 - ) - - if f = 0 then - let lte = (shiftCompare a n x 0) <> 1 - if lte then 1 else 0 - else - f - - -//---------------------------------------------------------------------------- -// division - divmod -//-------------------------------------------------------------------------- - - let divmod b a = - // Returns d,r where b = d.digits + r and r0 then - scaleSubInPlace x f a n; - scaleAddInPlace d f one n; - Invariant(d,x,n,p) - else - finished <- f=0 && n=0; - if not finished then - if p = m+n then - Invariant(d,x,n-1,p); - n <- n-1 - else - Invariant(d,x,n-1,p-1); - n <- n-1; - p <- p-1 - // Have: "b = d.digits + x" return d,x - normN d,normN x - - //---------------------------------------------------------------------------- - // div, mod - //-------------------------------------------------------------------------- - - [] - let div b a = fst (divmod b a) - [] - let rem b a = snd (divmod b a) - // rem b a, for small a can do (base mod a) trick - O(N) - - - //---------------------------------------------------------------------------- - // hcf - //-------------------------------------------------------------------------- - - let hcf a b = - // Have: 0 <= a,b since naturals - let rec hcfloop a b = // Require: 0 <= a <= b - if equal zero a then b - else - // Have: 0 < a <= b - let _,r = divmod b a - // Have: r < a from divmod - hcfloop r a // Have: 0 <= r < a - - if lt a b then hcfloop a b // Have: 0 <= a < b - else hcfloop b a // Have: 0 <= b <= a - - //---------------------------------------------------------------------------- - // pow - //-------------------------------------------------------------------------- - - let two = embed 2 - let powi x n = - let rec power acc x n = - if n=0 then acc - elif n % 2=0 then power acc (mul x x) (n / 2) - else power (mul x acc) (mul x x) (n / 2) - - power one x n - - let pow x n = - let rec power acc x n = - if isZero n then acc - else - let ndiv2,nmod2 = divmod n two // use: intdivmod when available - if isZero nmod2 then power acc (mul x x) ndiv2 - else power (mul x acc) (mul x x) ndiv2 - - power one x n - -//---------------------------------------------------------------------------- -// float n -//-------------------------------------------------------------------------- - - let toFloat n = - let basef = float baseN - let rec evalFloat acc k i = - if i = n.bound then - acc - else - evalFloat (acc + k * float n.digits.[i]) (k * basef) (i+1) - evalFloat 0.0 1.0 0 - -//---------------------------------------------------------------------------- -// n <-> int -//-------------------------------------------------------------------------- - - let ofInt32 n = embed n - let ofInt64 n = embed64 n - - /// Convert BigNat to uint32 otherwise OverflowException. - let toUInt32 n = - match n.bound with - | 0 -> 0u - | 1 -> n.digits.[0] |> uint32 - | 2 -> let xA,xB = n.digits.[0],n.digits.[1] - if xB > baseMask32B then raise (System.OverflowException()) - ( uint32 (xA &&& baseMask32A)) + - ((uint32 (xB &&& baseMask32B)) <<< baseShift32B) - | _ -> raise (System.OverflowException()) - - /// Convert BigNat to uint64 otherwise OverflowException. - let toUInt64 n = - match n.bound with - | 0 -> 0UL - | 1 -> n.digits.[0] |> uint64 - | 2 -> let xA,xB = n.digits.[0],n.digits.[1] - ( uint64 (xA &&& baseMask64A)) + - ((uint64 (xB &&& baseMask64B)) <<< baseShift64B) - | 3 -> let xA,xB,xC = n.digits.[0],n.digits.[1],n.digits.[2] - if xC > baseMask64C then raise (System.OverflowException()) - ( uint64 (xA &&& baseMask64A)) + - ((uint64 (xB &&& baseMask64B)) <<< baseShift64B) + - ((uint64 (xC &&& baseMask64C)) <<< baseShift64C) - | _ -> raise (System.OverflowException()) - - -//---------------------------------------------------------------------------- -// n -> string -//-------------------------------------------------------------------------- - - -#if CHECKED - let checks = false -#endif - let toString n = - // Much better complexity than naive_string_of_z. - // It still does "nDigit" calls to (int)divmod, - // but the degree on which it is called halves (not decrements) each time. - // - let degn = degree n - let rec route prior k ten2k = - if degree ten2k > degn - then (k,ten2k) :: prior - else route ((k,ten2k) :: prior) (k+1) (mul ten2k ten2k) - let kten2ks = route [] 0 (embed 10) - let rec collect isLeading digits n = function - | [] -> - // Have 0 <= n < 10^1, so collect a single digit (if needed) - let n = eval n -#if CHECKED - if checks then check (0 <= n) "toString: digit0"; - if checks then check (n <= 9) "toString: digit9"; -#endif - if isLeading && n=0 then digits // suppress leading 0 - else string n :: digits - | (_,ten2k) :: prior -> -#if CHECKED - if checks then check (lt n (mul ten2k ten2k)) "string_of_int: bound n"; -#endif - // Have 0 <= n < (ten2k)^2 and ten2k = 10^(2^k) - let nH,nL = divmod n ten2k -#if CHECKED - if checks then check (lt nH ten2k) "string_of_int: bound nH"; - if checks then check (lt nL ten2k) "string_of_int: bound nL"; -#endif - // Have 0 <= nH,nL < (ten2k) and ten2k = 10^(2^k) - if isLeading && isZero nH then - // suppress leading 0s - let digits = collect isLeading digits nL prior - digits - else - let digits = collect false digits nL prior - let digits = collect isLeading digits nH prior - digits - - let prior = kten2ks - let digits = collect true [] n prior - match digits with - | [] -> "0" - | _ -> digits |> Array.ofList |> System.String.Concat - -//---------------------------------------------------------------------------- -// n <- string -//-------------------------------------------------------------------------- - - let ofString (str:string) = - // Would it be better to split string half and combine results? - let len = str.Length - if System.String.IsNullOrEmpty str then invalidArg "str" "empty string"; - let ten = embed 10 - let rec build acc i = - if i=len then - acc - else - let c = str.[i] - let d = int c - int '0' - if 0 <= d && d <= 9 then - build (add (mul ten acc) (embed d)) (i+1) - else - raise (new System.FormatException(SR.GetString(SR.badFormatString))) - - build (embed 0) 0 - - let isSmall n = (n.bound <= 1) - let getSmall n = index n 0 - - //---------------------------------------------------------------------------- - // factorial - //-------------------------------------------------------------------------- - - let factorial n = - //***** - // Factorial(n) = 1.2.3.....(n-1).n - // - // Factorial is sometimes used as a test for multiplication. - // The QuickMul FFT multiplier takes over only when both operands reach a given size. - // How to compute factorial? - // - // (a) Factorial(n) = factorial(n-1).n - // This is unlikely to make use of the FFT (n never large enough). - // (b) Factorial(n) = (1.2.3.4....k) . (k.[k+1]...(n-1).n) - // Applied recursively QuickMul FFT will take over on large products. - // - //**** - let rec productR a b = - if equal a b then a - else - let m = div (add a b) (ofInt32 2) - mul (productR a m) (productR (add m one) b) - - productR one n - - -#endif diff --git a/src/fsharp/FSharp.Core/math/n.fsi b/src/fsharp/FSharp.Core/math/n.fsi deleted file mode 100644 index 78f44e6d4f..0000000000 --- a/src/fsharp/FSharp.Core/math/n.fsi +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. - -namespace Microsoft.FSharp.Math - -#if FX_NO_BIGINT -open Microsoft.FSharp.Collections -open Microsoft.FSharp.Core - -/// Abstract internal type -[] -type internal BigNat - -module internal BigNatModule = - - val zero : BigNat - val one : BigNat - val two : BigNat - - val add : BigNat -> BigNat -> BigNat - val sub : BigNat -> BigNat -> BigNat - val mul : BigNat -> BigNat -> BigNat - val divmod : BigNat -> BigNat -> BigNat * BigNat - val div : BigNat -> BigNat -> BigNat - val rem : BigNat -> BigNat -> BigNat - val hcf : BigNat -> BigNat -> BigNat - - val min : BigNat -> BigNat -> BigNat - val max : BigNat -> BigNat -> BigNat - val scale : int -> BigNat -> BigNat - val powi : BigNat -> int -> BigNat - val pow : BigNat -> BigNat -> BigNat - - val IsZero : BigNat -> bool - val isZero : BigNat -> bool - val isOne : BigNat -> bool - val equal : BigNat -> BigNat -> bool - val compare : BigNat -> BigNat -> int - val lt : BigNat -> BigNat -> bool - val gt : BigNat -> BigNat -> bool - val lte : BigNat -> BigNat -> bool - val gte : BigNat -> BigNat -> bool - - val hash : BigNat -> int - val toFloat : BigNat -> float - val ofInt32 : int -> BigNat - val ofInt64 : int64 -> BigNat - val toString : BigNat -> string - val ofString : string -> BigNat - - val toUInt32 : BigNat -> uint32 - val toUInt64 : BigNat -> uint64 - - val factorial : BigNat -> BigNat - // val randomBits : int -> BigNat - val bits : BigNat -> int - val isSmall : BigNat -> bool (* will fit in int32 (but not nec all int32) *) - val getSmall : BigNat -> int32 (* get the value, if it satisfies isSmall *) - -#endif diff --git a/src/fsharp/FSharp.Core/math/z.fs b/src/fsharp/FSharp.Core/math/z.fs index c9e9614b3d..fa65994315 100644 --- a/src/fsharp/FSharp.Core/math/z.fs +++ b/src/fsharp/FSharp.Core/math/z.fs @@ -1,337 +1,19 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. #nowarn "44" // This construct is deprecated. This function is for use by compiled F# code and should not be used directly -namespace System.Numerics -#if FX_NO_BIGINT - open Microsoft.FSharp.Collections - open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.Operators - open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Primitives.Basics - open Microsoft.FSharp.Math - open System - open System.Globalization - - - // INVARIANT: signInt = 1 or -1 - // value(z) = signInt * v - // NOTE: 0 has two repns (+1,0) or (-1,0). - [] - [] -#if !NETSTANDARD - [] -#endif - type BigInteger(signInt:int, v : BigNat) = - - static let smallLim = 4096 - static let smallPosTab = Array.init smallLim BigNatModule.ofInt32 - static let one = BigInteger(1) - static let zero = BigInteger(0) - - static member internal nat n = - if BigNatModule.isSmall n && BigNatModule.getSmall n < smallLim - then smallPosTab.[BigNatModule.getSmall n] - else n - - static member internal create (s,n) = BigInteger(s,BigInteger.nat n) - - static member internal posn n = BigInteger(1,BigInteger.nat n) - - static member internal negn n = BigInteger(-1,BigInteger.nat n) - - member x.Sign = if x.IsZero then 0 else signInt - - member x.SignInt = signInt - - member internal x.V = v - - static member op_Equality (x:BigInteger, y:BigInteger) = - //System.Console.WriteLine("x = {0}",box x) - //System.Console.WriteLine("y = {0}",box y) - match x.SignInt,y.SignInt with - | 1, 1 -> BigNatModule.equal x.V y.V // +1.xv = +1.yv iff xv = yv - | -1, -1 -> BigNatModule.equal x.V y.V // -1.xv = -1.yv iff xv = yv - | 1,-1 -> BigNatModule.isZero x.V && BigNatModule.isZero y.V // 1.xv = -1.yv iff xv=0 and yv=0 - | -1, 1 -> BigNatModule.isZero x.V && BigNatModule.isZero y.V // -1.xv = 1.yv iff xv=0 and yv=0 - | 0, 0 -> true - | 0, 1 -> BigNatModule.isZero y.V - | 0, -1 -> BigNatModule.isZero y.V - | 1, 0 -> BigNatModule.isZero x.V - | -1, 0 -> BigNatModule.isZero x.V - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member op_Inequality (x:BigInteger, y:BigInteger) = not (BigInteger.op_Equality(x,y)) // CA2226: OperatorsShouldHaveSymmetricalOverloads - - static member op_LessThan (x:BigInteger, y:BigInteger) = - match x.SignInt,y.SignInt with - | 1, 1 -> BigNatModule.lt x.V y.V // 1.xv < 1.yv iff xv < yv - | -1,-1 -> BigNatModule.lt y.V x.V // -1.xv < -1.yv iff yv < xv - | 1,-1 -> false // 1.xv < -1.yv iff 0 <= 1.xv < -1.yv <= 0 iff false - | -1, 1 -> not (BigNatModule.isZero x.V) || not (BigNatModule.isZero y.V) - // -1.xv < 1.yv - // (a) xv=0 and yv=0, then false - // (b) xv<>0, -1.xv < 0 <= 1.yv, so true - // (c) yv<>0, -1.xv <= 0 < 1.yv, so true - | 0, 0 -> false - | 0, 1 -> not (BigNatModule.isZero y.V) - | 0,-1 -> false - | 1, 0 -> false - | -1, 0 -> not (BigNatModule.isZero x.V) - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member op_GreaterThan (x:BigInteger, y:BigInteger) = // Follow lt by +/- symmetry - match x.SignInt,y.SignInt with - | 1, 1 -> BigNatModule.gt x.V y.V - | -1,-1 -> BigNatModule.gt y.V x.V - | 1,-1 -> not (BigNatModule.isZero x.V) || not (BigNatModule.isZero y.V) - | -1, 1 -> false - | 0, 0 -> false - | 0, 1 -> false - | 0,-1 -> not (BigNatModule.isZero y.V) - | 1, 0 -> not (BigNatModule.isZero x.V) - | -1, 0 -> false - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member internal compare(n,nn) = if BigInteger.op_LessThan(n,nn) then -1 elif BigInteger.op_Equality(n,nn) then 0 else 1 - - static member internal hash (z:BigInteger) = - if z.SignInt = 0 then 1 // 1 is hashcode for initialized BigInteger.Zero - else z.SignInt + BigNatModule.hash(z.V) - - override x.ToString() = - match x.SignInt with - | 1 -> BigNatModule.toString x.V // positive - | -1 -> - if BigNatModule.isZero x.V - then "0" // not negative in fact, but zero. - else "-" + BigNatModule.toString x.V // negative - | 0 -> "0" - | _ -> invalidOp "signs should be +/- 1 or 0" - - member x.StructuredDisplayString = x.ToString() - - interface System.IComparable with - member this.CompareTo(obj:obj) = - match obj with - | :? BigInteger as that -> BigInteger.compare(this,that) - | _ -> invalidArg "obj" "the objects are not comparable" - - override this.Equals(obj) = - match obj with - | :? BigInteger as that -> BigInteger.op_Equality(this, that) - | _ -> false - - override x.GetHashCode() = BigInteger.hash(x) - - new (n:int) = - if n>=0 - then BigInteger (1,BigInteger.nat(BigNatModule.ofInt32 n)) - elif (n = System.Int32.MinValue) - then BigInteger(-1,BigInteger.nat(BigNatModule.ofInt64 (-(int64 n)))) - else BigInteger(-1,BigInteger.nat(BigNatModule.ofInt32 (-n))) - - new (n:int64) = - if n>=0L - then BigInteger(1,BigInteger.nat (BigNatModule.ofInt64 n)) - elif (n = System.Int64.MinValue) - then BigInteger(-1,BigInteger.nat (BigNatModule.add (BigNatModule.ofInt64 System.Int64.MaxValue) BigNatModule.one) ) - else BigInteger(-1,BigInteger.nat (BigNatModule.ofInt64 (-n))) - - static member One = one +namespace Microsoft.FSharp.Math - static member Zero = zero - - static member (~-) (z:BigInteger) = - match z.SignInt with - | 0 -> BigInteger.Zero - | i -> BigInteger.create(-i, z.V) - - static member Scale(k, z:BigInteger) = - if z.SignInt = 0 then BigInteger.Zero else - if k<0 - then BigInteger.create(-z.SignInt, (BigNatModule.scale (-k) z.V)) // k.zsign.zv = -zsign.(-k.zv) - else BigInteger.create(z.SignInt, (BigNatModule.scale k z.V)) // k.zsign.zv = zsign.k.zv - - // Result: 1.nx - 1.ny (integer subtraction) - static member internal subnn (nx,ny) = - if BigNatModule.gte nx ny - then BigInteger.posn (BigNatModule.sub nx ny) // nx >= ny, result +ve, +1.(nx - ny) - else BigInteger.negn (BigNatModule.sub ny nx) // nx < ny, result -ve, -1.(ny - nx) - - static member internal addnn (nx,ny) = - BigInteger.posn (BigNatModule.add nx ny) // Compute "nx + ny" to be integer - - member x.IsZero = x.SignInt = 0 || BigNatModule.isZero x.V - - member x.IsOne = (x.SignInt = 1) && BigNatModule.isOne x.V // signx.xv = 1 iff signx = +1 and xv = 1 - - static member (+) (x:BigInteger,y:BigInteger) = - if y.IsZero then x else - if x.IsZero then y else - match x.SignInt,y.SignInt with - | 1, 1 -> BigInteger.addnn(x.V,y.V) // 1.xv + 1.yv = (xv + yv) - | -1,-1 -> -(BigInteger.addnn(x.V,y.V)) // -1.xv + -1.yv = -(xv + yv) - | 1,-1 -> BigInteger.subnn (x.V,y.V) // 1.xv + -1.yv = (xv - yv) - | -1, 1 -> BigInteger.subnn(y.V,x.V) // -1.xv + 1.yv = (yv - xv) - | _ -> invalidArg "x" "signs should be +/- 1" - - static member (-) (x:BigInteger,y:BigInteger) = - if y.IsZero then x else - if x.IsZero then -y else - match x.SignInt,y.SignInt with - | 1, 1 -> BigInteger.subnn(x.V,y.V) // 1.xv - 1.yv = (xv - yv) - | -1,-1 -> BigInteger.subnn(y.V,x.V) // -1.xv - -1.yv = (yv - xv) - | 1,-1 -> BigInteger.addnn(x.V,y.V) // 1.xv - -1.yv = (xv + yv) - | -1, 1 -> -(BigInteger.addnn(x.V,y.V)) // -1.xv - 1.yv = -(xv + yv) - | _ -> invalidArg "x" "signs should be +/- 1" - - static member ( * ) (x:BigInteger,y:BigInteger) = - if x.IsZero then x - elif y.IsZero then y - elif x.IsOne then y - elif y.IsOne then x - else - let m = (BigNatModule.mul x.V y.V) - BigInteger.create (x.SignInt * y.SignInt,m) // xsign.xv * ysign.yv = (xsign.ysign).(xv.yv) - - static member DivRem (x:BigInteger, y:BigInteger, []rem:BigInteger byref) = - if y.IsZero then raise (new System.DivideByZeroException()) - if x.IsZero then - rem <- BigInteger.Zero - BigInteger.Zero - else - let d,r = BigNatModule.divmod x.V y.V - // HAVE: |x| = d.|y| + r and 0 <= r < |y| - // HAVE: xv = d.yv + r and 0 <= r < yv - match x.SignInt,y.SignInt with - | 1, 1 -> rem <- BigInteger.posn r ; BigInteger.posn d // 1.xv = 1.d.( 1.yv) + ( 1.r) - | -1,-1 -> rem <- BigInteger.negn r ; BigInteger.posn d // -1.xv = 1.d.(-1.yv) + (-1.r) - | 1,-1 -> rem <- BigInteger.posn r ; BigInteger.negn d // 1.xv = -1.d.(-1.yv) + ( 1.r) - | -1, 1 -> rem <- BigInteger.negn r ; BigInteger.negn d // -1.xv = -1.d.( 1.yv) + (-1.r) - | _ -> invalidArg "x" "signs should be +/- 1" - - static member (/) (x:BigInteger,y:BigInteger) = - let mutable rem = new BigInteger(0) - BigInteger.DivRem(x,y,&rem) - - static member (%) (x:BigInteger,y:BigInteger) = - let mutable rem = new BigInteger(0) - BigInteger.DivRem(x,y,&rem) |> ignore ; rem - - static member GreatestCommonDivisor (x:BigInteger,y:BigInteger) = - match x.SignInt,y.SignInt with - | 0, 0 -> BigInteger.Zero - | 0, _ -> BigInteger.posn y.V - | _, 0 -> BigInteger.posn x.V - | _ -> BigInteger.posn (BigNatModule.hcf x.V y.V) // hcf (xsign.xv,ysign.yv) = hcf (xv,yv) - - member x.IsNegative = x.SignInt = -1 && not (x.IsZero) // signx.xv < 0 iff signx = -1 and xv<>0 - - member x.IsPositive = x.SignInt = 1 && not (x.IsZero) // signx.xv > 0 iff signx = +1 and xv<>0 - - static member Abs (x:BigInteger) = if x.SignInt = -1 then -x else x - - static member op_LessThanOrEqual (x:BigInteger,y:BigInteger) = - match x.SignInt,y.SignInt with - | 1, 1 -> BigNatModule.lte x.V y.V // 1.xv <= 1.yv iff xv <= yv - | -1,-1 -> BigNatModule.lte y.V x.V // -1.xv <= -1.yv iff yv <= xv - | 1,-1 -> BigNatModule.isZero x.V && BigNatModule.isZero y.V // 1.xv <= -1.yv, - // (a) if xv=0 and yv=0 then true - // (b) otherwise false, only meet at zero. - - | -1, 1 -> true // -1.xv <= 1.yv, true - | 0, 0 -> true - | 1, 0 -> BigNatModule.isZero x.V - | -1, 0 -> true - | 0, 1 -> true - | 0,-1 -> BigNatModule.isZero y.V - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member op_GreaterThanOrEqual (x:BigInteger,y:BigInteger) = // Follow lte by +/- symmetry - match x.SignInt,y.SignInt with - | 1, 1 -> BigNatModule.gte x.V y.V - | -1,-1 -> BigNatModule.gte y.V x.V - | 1,-1 -> true - | -1, 1 -> BigNatModule.isZero x.V && BigNatModule.isZero y.V - | 0, 0 -> true - | 1, 0 -> true - | -1, 0 -> BigNatModule.isZero x.V - | 0, 1 -> BigNatModule.isZero y.V - | 0,-1 -> true - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member Pow (x:BigInteger,y:int32) = - if y < 0 then raise (new System.ArgumentOutOfRangeException("y", (SR.GetString(SR.inputMustBeNonNegative)))) - match x.IsZero, y with - | true, 0 -> BigInteger.One - | true, _ -> BigInteger.Zero - | _ -> - let yval = BigInteger(y) - BigInteger.create ((if BigNatModule.isZero (BigNatModule.rem yval.V BigNatModule.two) then 1 else x.SignInt), BigNatModule.pow x.V yval.V) - - static member op_Explicit (x:BigInteger) = - if x.IsZero then 0 else - let u = BigNatModule.toUInt32 x.V - if u <= uint32 System.Int32.MaxValue then - // Handle range [-MaxValue,MaxValue] - x.SignInt * int32 u - elif x.SignInt = -1 && u = uint32 (System.Int32.MaxValue + 1) then - //assert(System.Int32.MinValue = 0 - System.Int32.MaxValue - 1) - // Handle MinValue = -(MaxValue+1) special case not covered by the above - System.Int32.MinValue - else - raise (System.OverflowException()) - - static member op_Explicit (x:BigInteger) = - if x.IsZero then 0L else - let u = BigNatModule.toUInt64 x.V - if u <= uint64 System.Int64.MaxValue then - (* Handle range [-MaxValue,MaxValue] *) - int64 x.SignInt * int64 u - elif x.SignInt = -1 && u = uint64 (System.Int64.MaxValue + 1L) then - //assert(System.Int64.MinValue = 0 - System.Int64.MaxValue - 1L) - (* Handle MinValue = -(MaxValue+1) special case not covered by the above *) - System.Int64.MinValue - else - raise (System.OverflowException()) - - static member op_Explicit (x:BigInteger) = - match x.SignInt with - | 1 -> BigNatModule.toFloat x.V // float (1.xv) = float (xv) - | -1 -> - (BigNatModule.toFloat x.V) // float (-1.xv) = - float (xv) - | 0 -> 0. - | _ -> invalidArg "x" "signs should be +/- 1 or 0" - - static member Parse(text:string) = - if isNull text then raise (new ArgumentNullException("text")) - let text = text.Trim() - let len = text.Length - if len = 0 then raise (new System.FormatException(SR.GetString(SR.badFormatString))) - match text.[0], len with - | '-', 1 -> raise (new System.FormatException(SR.GetString(SR.badFormatString))) - | '-', _ -> BigInteger.negn (BigNatModule.ofString text.[1..len-1]) - | '+', 1 -> raise (new System.FormatException(SR.GetString(SR.badFormatString))) - | '+', _ -> BigInteger.posn (BigNatModule.ofString text.[1..len-1]) - | _ -> BigInteger.posn (BigNatModule.ofString text) - - member internal x.IsSmall = x.IsZero || BigNatModule.isSmall (x.V) - - static member Factorial (x:BigInteger) = - if x.IsNegative then invalidArg "x" (SR.GetString(SR.inputMustBeNonNegative)) - if x.IsPositive then BigInteger.posn (BigNatModule.factorial x.V) - else BigInteger.One - - static member ( ~+ )(n1:BigInteger) = n1 - - static member FromInt64(x:int64) = new BigInteger(x) - - static member FromInt32(x:int32) = new BigInteger(x) -#endif +// Deliberately left empty +// +// FSharp.Core previously exposed the namespace Microsoft.FSharp.Math even though there were no types in it. +// This retains that. +// Existing programs could, and did contain the line: +// open FSharp.Math +// namespace Microsoft.FSharp.Core - type bigint = System.Numerics.BigInteger open System @@ -341,22 +23,6 @@ namespace Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open System.Numerics -#if FX_NO_BIGINT - // FxCop suppressions - [] - [] - [] - [] - [] - [] - [] - [] - [] - [] - [] - do() -#endif - [] module NumericLiterals = @@ -402,14 +68,10 @@ namespace Microsoft.FSharp.Core res else let v = -#if FX_NO_BIGINT - BigInteger.Parse s -#else if isOX s then BigInteger.Parse (s.[2..],NumberStyles.AllowHexSpecifier,CultureInfo.InvariantCulture) else BigInteger.Parse (s,NumberStyles.AllowLeadingSign,CultureInfo.InvariantCulture) -#endif res <- v tabParse.[s] <- res res) @@ -421,5 +83,3 @@ namespace Microsoft.FSharp.Core (FromStringDynamic text :?> 'T) when 'T : BigInteger = getParse text - - diff --git a/src/fsharp/FSharp.Core/math/z.fsi b/src/fsharp/FSharp.Core/math/z.fsi index 3ea6327638..e49b1b3d53 100644 --- a/src/fsharp/FSharp.Core/math/z.fsi +++ b/src/fsharp/FSharp.Core/math/z.fsi @@ -1,82 +1,14 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. -namespace System.Numerics -#if FX_NO_BIGINT - - open System - open Microsoft.FSharp.Collections - open Microsoft.FSharp.Core - - /// The type of arbitrary-sized integers - [] - [] - type BigInteger = - /// Return the sum of two big integers - static member ( + ) : x:BigInteger * y:BigInteger -> BigInteger - /// Return the modulus of big integers - static member ( % ) : x:BigInteger * y:BigInteger -> BigInteger - /// Return the product of big integers - static member ( * ) : x:BigInteger * y:BigInteger -> BigInteger - /// Return the difference of two big integers - static member ( - ) : x:BigInteger * y:BigInteger -> BigInteger - /// Return the ratio of two big integers - static member ( / ) : x:BigInteger * y:BigInteger -> BigInteger - /// Return the negation of a big integer - static member (~-) : x:BigInteger -> BigInteger - /// Return the given big integer - static member (~+) : x:BigInteger -> BigInteger - /// Convert a big integer to a floating point number - static member op_Explicit : x:BigInteger -> float - /// Convert a big integer to a 64-bit signed integer - static member op_Explicit : x:BigInteger -> int64 - /// Convert a big integer to a 32-bit signed integer - static member op_Explicit : x:BigInteger -> int32 - /// Parse a big integer from a string format - static member Parse : text:string -> BigInteger - /// Return the sign of a big integer: 0, +1 or -1 - member Sign : int - /// Compute the ratio and remainder of two big integers - static member DivRem : x:BigInteger * y:BigInteger * []rem:BigInteger byref -> BigInteger - - /// This operator is for consistency when this type be used from other CLI languages - static member op_LessThan : x:BigInteger * y:BigInteger -> bool - /// This operator is for consistency when this type be used from other CLI languages - static member op_LessThanOrEqual : x:BigInteger * y:BigInteger -> bool - /// This operator is for consistency when this type be used from other CLI languages - static member op_GreaterThan : x:BigInteger * y:BigInteger -> bool - /// This operator is for consistency when this type be used from other CLI languages - static member op_GreaterThanOrEqual : x:BigInteger * y:BigInteger -> bool - /// This operator is for consistency when this type be used from other CLI languages - static member op_Equality : x:BigInteger * y:BigInteger -> bool - /// This operator is for consistency when this type be used from other CLI languages - static member op_Inequality : x:BigInteger * y:BigInteger -> bool - - /// Return the greatest common divisor of two big integers - static member GreatestCommonDivisor : x:BigInteger * y:BigInteger -> BigInteger - /// Return n^m for two big integers - static member Pow : x:BigInteger * y:int32 -> BigInteger - /// Compute the absolute value of a big integer - static member Abs : x:BigInteger -> BigInteger - /// Get the big integer for zero - static member Zero : BigInteger - /// Get the big integer for one - static member One : BigInteger - - /// Return true if a big integer is 'zero' - member IsZero : bool - /// Return true if a big integer is 'one' - member IsOne : bool - interface System.IComparable - override Equals : obj -> bool - override GetHashCode : unit -> int - override ToString : unit -> string - - /// Construct a BigInteger value for the given integer - new : x:int -> BigInteger - /// Construct a BigInteger value for the given 64-bit integer - new : x:int64 -> BigInteger -#endif +namespace Microsoft.FSharp.Math +// Deliberately left empty +// +// FSharp.Core previously exposed the namespace Microsoft.FSharp.Math even though there were no types in it. +// This retains that. +// Existing programs could, and did contain the line: +// open FSharp.Math +// namespace Microsoft.FSharp.Core @@ -104,5 +36,3 @@ namespace Microsoft.FSharp.Core val FromInt64Dynamic : value:int64 -> obj /// Provides a default implementations of F# numeric literal syntax for literals of the form 'dddI' val FromStringDynamic : text:string -> obj - - From 384efb2cab4c2e0c6360cb050df894b103378fa7 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 10 Sep 2019 10:53:39 -0700 Subject: [PATCH 070/146] Update dependencies from https://github.com/dotnet/arcade build 20190909.10 (#7527) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19459.10 --- eng/Version.Details.xml | 4 ++-- .../post-build/channels/netcore-dev-30.yml | 14 +++----------- .../post-build/channels/netcore-dev-31.yml | 14 +++----------- .../post-build/channels/netcore-dev-5.yml | 14 +++----------- .../post-build/channels/netcore-internal-30.yml | 15 ++------------- .../post-build/channels/netcore-release-30.yml | 13 +------------ .../post-build/channels/netcore-release-31.yml | 13 +------------ .../post-build/channels/netcore-tools-latest.yml | 16 ++++------------ .../channels/public-validation-release.yml | 16 ++++------------ eng/common/templates/steps/promote-build.yml | 13 +++++++++++++ global.json | 2 +- 11 files changed, 37 insertions(+), 97 deletions(-) create mode 100644 eng/common/templates/steps/promote-build.yml diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 34c82619f1..b891c1a7c1 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 29ee79a10c58dd6863a46157e374521cac610ad8 + f5ccfdcbd828383d39cf583086ef42d72ca5b320 diff --git a/eng/common/templates/post-build/channels/netcore-dev-30.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml index 7984f06d1b..3c5eb83988 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-30.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml @@ -120,14 +120,6 @@ stages: /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - -- stage: NetCore_Dev30_Publish_Validation - displayName: .NET Core 3.0 Dev Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.PublicDevRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml index bcedd0f075..965309d154 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-31.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml @@ -120,14 +120,6 @@ stages: /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - -- stage: NetCore_Dev31_Publish_Validation - displayName: .NET Core 3.1 Dev Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.PublicDevRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 18432cc60b..9975dda4e8 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -126,14 +126,6 @@ stages: /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - -- stage: NetCore_Dev5_Publish_Validation - displayName: .NET Core 5 Dev Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.NetCore_5_Dev_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index 36e1d1188b..20eef377b2 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -113,17 +113,6 @@ stages: /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - - template: ../trigger-subscription.yml + - template: ../../steps/promote-build.yml parameters: - ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} - -- stage: NetCore_30_Internal_Servicing_Publish_Validation - displayName: .NET Core 3.0 Internal Servicing Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} + ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} \ No newline at end of file diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml index abae985ab0..5a5c28e1b6 100644 --- a/eng/common/templates/post-build/channels/netcore-release-30.yml +++ b/eng/common/templates/post-build/channels/netcore-release-30.yml @@ -113,17 +113,6 @@ stages: /p:Configuration=Release ${{ parameters.artifactsPublishingAdditionalParameters }} - - template: ../trigger-subscription.yml + - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} - -- stage: NetCore_Release30_Publish_Validation - displayName: .NET Core 3.0 Release Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.PublicRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml index b2a6c7659d..2945215883 100644 --- a/eng/common/templates/post-build/channels/netcore-release-31.yml +++ b/eng/common/templates/post-build/channels/netcore-release-31.yml @@ -119,17 +119,6 @@ stages: /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) ${{ parameters.artifactsPublishingAdditionalParameters }} - - template: ../trigger-subscription.yml + - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} - -- stage: NetCore_Release31_Publish_Validation - displayName: .NET Core 3.1 Release Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.PublicRelease_31_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 36f6dea628..09445aee0e 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -125,15 +125,7 @@ stages: /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) ${{ parameters.artifactsPublishingAdditionalParameters }} - - -- stage: NetCore_Tools_Latest_PublishValidation - displayName: .NET Tools - Latest Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} + + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} \ No newline at end of file diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index a5fcdc581a..4feed32971 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -85,15 +85,7 @@ stages: /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - - -- stage: PVR_PublishValidation - displayName: .NET Tools - Validation Publish Validation - variables: - - template: ../common-variables.yml - jobs: - - template: ../setup-maestro-vars.yml - - - template: ../promote-build.yml - parameters: - ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} + + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/eng/common/templates/steps/promote-build.yml b/eng/common/templates/steps/promote-build.yml new file mode 100644 index 0000000000..b90404435d --- /dev/null +++ b/eng/common/templates/steps/promote-build.yml @@ -0,0 +1,13 @@ +parameters: + ChannelId: 0 + +steps: +- task: PowerShell@2 + displayName: Add Build to Channel + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/post-build/promote-build.ps1 + arguments: -BuildId $(BARBuildId) + -ChannelId ${{ parameters.ChannelId }} + -MaestroApiAccessToken $(MaestroApiAccessToken) + -MaestroApiEndPoint $(MaestroApiEndPoint) + -MaestroApiVersion $(MaestroApiVersion) diff --git a/global.json b/global.json index 5c889d6f2e..a325659e95 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19458.2", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19459.10", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From f5e20d109d2ce3499ae1d654edf8bcc8dd7e6d51 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 11 Sep 2019 12:27:51 +0000 Subject: [PATCH 071/146] Update dependencies from https://github.com/dotnet/arcade build 20190910.3 - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19460.3 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b891c1a7c1..9db5c0d007 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - f5ccfdcbd828383d39cf583086ef42d72ca5b320 + 0f5cfb20a355c27bc84cedd049c946b44a7fc1da diff --git a/global.json b/global.json index a325659e95..c1c4de8567 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19459.10", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19460.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From e4a62fdb2a703e8eff2f6196d56ecd2261767157 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Wed, 11 Sep 2019 12:19:26 -0700 Subject: [PATCH 072/146] Minor cleanup, do not check assembly for string concat optimization (#7532) --- src/fsharp/Optimizer.fs | 48 +++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index cfa1a9a49d..e89f3e4284 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1830,22 +1830,27 @@ let TryDetectQueryQuoteAndRun cenv (expr: Expr) = //printfn "Not eliminating because no Run found" None -let IsILMethodRefDeclaringTypeSystemString (ilg: ILGlobals) (mref: ILMethodRef) = - mref.DeclaringTypeRef.Scope.IsAssemblyRef && - mref.DeclaringTypeRef.Scope.AssemblyRef.Name = ilg.typ_String.TypeRef.Scope.AssemblyRef.Name && - mref.DeclaringTypeRef.BasicQualifiedName = ilg.typ_String.BasicQualifiedName - -let IsILMethodRefSystemStringConcatOverload (ilg: ILGlobals) (mref: ILMethodRef) = - IsILMethodRefDeclaringTypeSystemString ilg mref && +let IsILMethodRefSystemStringConcat (mref: ILMethodRef) = mref.Name = "Concat" && - mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName && - mref.ArgCount >= 2 && mref.ArgCount <= 4 && mref.ArgTypes |> List.forall(fun ilty -> ilty.BasicQualifiedName = ilg.typ_String.BasicQualifiedName) - -let IsILMethodRefSystemStringConcatArray (ilg: ILGlobals) (mref: ILMethodRef) = - IsILMethodRefDeclaringTypeSystemString ilg mref && + mref.DeclaringTypeRef.Name = "System.String" && + (mref.ReturnType.IsNominal && mref.ReturnType.TypeRef.Name = "System.String") && + (mref.ArgCount >= 2 && mref.ArgCount <= 4 && + mref.ArgTypes + |> List.forall (fun ilTy -> + ilTy.IsNominal && ilTy.TypeRef.Name = "System.String")) + +let IsILMethodRefSystemStringConcatArray (mref: ILMethodRef) = mref.Name = "Concat" && - mref.ReturnType.BasicQualifiedName = ilg.typ_String.BasicQualifiedName && - mref.ArgCount = 1 && mref.ArgTypes.Head.BasicQualifiedName = "System.String[]" + mref.DeclaringTypeRef.Name = "System.String" && + (mref.ReturnType.IsNominal && mref.ReturnType.TypeRef.Name = "System.String") && + (mref.ArgCount = 1 && + mref.ArgTypes + |> List.forall (fun ilTy -> + match ilTy with + | ILType.Array (shape, ilTy) when shape = ILArrayShape.SingleDimensional && + ilTy.IsNominal && + ilTy.TypeRef.Name = "System.String" -> true + | _ -> false)) /// Optimize/analyze an expression let rec OptimizeExpr cenv (env: IncrementalOptimizationEnv) expr = @@ -1972,10 +1977,12 @@ and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = and MakeOptimizedSystemStringConcatCall cenv env m args = let rec optimizeArg argExpr accArgs = match argExpr, accArgs with - | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ when IsILMethodRefSystemStringConcatArray cenv.g.ilg methRef -> + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ], _), _ + when IsILMethodRefSystemStringConcatArray mref -> optimizeArgs args accArgs - | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args, _), _ when IsILMethodRefSystemStringConcatOverload cenv.g.ilg mref -> + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args, _), _ + when IsILMethodRefSystemStringConcat mref -> optimizeArgs args accArgs // Optimize string constants, e.g. "1" + "2" will turn into "12" @@ -2005,7 +2012,8 @@ and MakeOptimizedSystemStringConcatCall cenv env m args = mkStaticCall_String_Concat_Array cenv.g m arg match expr with - | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, methRef, _, _, _) as op, tyargs, args, m) when IsILMethodRefSystemStringConcatOverload cenv.g.ilg methRef || IsILMethodRefSystemStringConcatArray cenv.g.ilg methRef -> + | Expr.Op(TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _) as op, tyargs, args, m) + when IsILMethodRefSystemStringConcat mref || IsILMethodRefSystemStringConcatArray mref -> OptimizeExprOpReductions cenv env (op, tyargs, args, m) | _ -> OptimizeExpr cenv env expr @@ -2074,9 +2082,11 @@ and OptimizeExprOp cenv env (op, tyargs, args, m) = | TOp.ILAsm ([], [ty]), _, [a] when typeEquiv cenv.g (tyOfExpr cenv.g a) ty -> OptimizeExpr cenv env a // Optimize calls when concatenating strings, e.g. "1" + "2" + "3" + "4" .. etc. - | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] when IsILMethodRefSystemStringConcatArray cenv.g.ilg mref -> + | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, [ Expr.Op(TOp.Array, _, args, _) ] + when IsILMethodRefSystemStringConcatArray mref -> MakeOptimizedSystemStringConcatCall cenv env m args - | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args when IsILMethodRefSystemStringConcatOverload cenv.g.ilg mref -> + | TOp.ILCall(_, _, _, _, _, _, _, mref, _, _, _), _, args + when IsILMethodRefSystemStringConcat mref -> MakeOptimizedSystemStringConcatCall cenv env m args | _ -> From 742e897353f9d8047cf334ea1e36a27ac502726c Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2019 16:48:46 +0000 Subject: [PATCH 073/146] Update dependencies from https://github.com/dotnet/arcade build 20190911.7 (#7545) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19461.7 --- eng/Version.Details.xml | 4 +- .../post-build/channels/netcore-dev-30.yml | 13 ++++--- .../post-build/channels/netcore-dev-31.yml | 15 ++++---- .../post-build/channels/netcore-dev-5.yml | 29 ++++++-------- .../channels/netcore-internal-30.yml | 38 +++++++++++-------- .../channels/netcore-release-30.yml | 38 +++++++++++-------- .../channels/netcore-release-31.yml | 14 ++++--- .../channels/netcore-tools-latest.yml | 33 +++++++--------- .../channels/public-validation-release.yml | 26 ++++++------- .../templates/post-build/common-variables.yml | 4 -- .../templates/post-build/post-build.yml | 6 +-- global.json | 2 +- 12 files changed, 112 insertions(+), 110 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9db5c0d007..b51173650b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 0f5cfb20a355c27bc84cedd049c946b44a7fc1da + 8eb29ba860a3cfcfe68f9a8256caa7efc1f1aaba diff --git a/eng/common/templates/post-build/channels/netcore-dev-30.yml b/eng/common/templates/post-build/channels/netcore-dev-30.yml index 3c5eb83988..69f1a9013e 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-30.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-30.yml @@ -97,14 +97,8 @@ stages: /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:BARBuildId=$(BARBuildId) /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' @@ -118,6 +112,13 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=true + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-dev-31.yml b/eng/common/templates/post-build/channels/netcore-dev-31.yml index 965309d154..720a0ab08a 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-31.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-31.yml @@ -46,7 +46,7 @@ stages: /p:Configuration=Release ${{ parameters.symbolPublishingAdditionalParameters }} - - job: + - job: publish_assets displayName: Publish Assets dependsOn: setupMaestroVars variables: @@ -97,14 +97,8 @@ stages: /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:BARBuildId=$(BARBuildId) /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' @@ -118,6 +112,13 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=true + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-dev-5.yml b/eng/common/templates/post-build/channels/netcore-dev-5.yml index 9975dda4e8..9c81e39e9c 100644 --- a/eng/common/templates/post-build/channels/netcore-dev-5.yml +++ b/eng/common/templates/post-build/channels/netcore-dev-5.yml @@ -2,7 +2,6 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false - publishToAzureDevOpsFeeds: true stages: - stage: NetCore_Dev5_Publish @@ -92,38 +91,34 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-transport/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet5-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index 20eef377b2..594a1a9a78 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -90,27 +90,33 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + /p:PublishInstallersAndChecksums=true + /p:ChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) + /p:ChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:InstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) + /p:InstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:PublishToAzureDevOpsNuGetFeeds=true + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-release-30.yml b/eng/common/templates/post-build/channels/netcore-release-30.yml index 5a5c28e1b6..8ba9237ffc 100644 --- a/eng/common/templates/post-build/channels/netcore-release-30.yml +++ b/eng/common/templates/post-build/channels/netcore-release-30.yml @@ -1,6 +1,7 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Release30_Publish @@ -90,27 +91,34 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' - /p:Configuration=Release + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=true + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-release-31.yml b/eng/common/templates/post-build/channels/netcore-release-31.yml index 2945215883..d8270eadae 100644 --- a/eng/common/templates/post-build/channels/netcore-release-31.yml +++ b/eng/common/templates/post-build/channels/netcore-release-31.yml @@ -1,6 +1,7 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' + publishInstallersAndChecksums: false stages: - stage: NetCore_Release31_Publish @@ -96,14 +97,8 @@ stages: /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' /p:BARBuildId=$(BARBuildId) /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' @@ -117,6 +112,13 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:PublishToAzureDevOpsNuGetFeeds=true + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-transport/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - template: ../../steps/promote-build.yml diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-tools-latest.yml index 09445aee0e..c75d186733 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-tools-latest.yml @@ -2,7 +2,6 @@ parameters: symbolPublishingAdditionalParameters: '' artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false - publishToAzureDevOpsFeeds: true stages: - stage: NetCore_Tools_Latest_Publish @@ -92,40 +91,36 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) - /p:StaticInternalFeed=$(StaticInternalFeed) - /p:InternalChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:InternalChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) - /p:InternalInstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InternalInstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' - /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw) + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - + - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ variables.NetCore_Tools_Latest_Channel_Id }} \ No newline at end of file diff --git a/eng/common/templates/post-build/channels/public-validation-release.yml b/eng/common/templates/post-build/channels/public-validation-release.yml index 4feed32971..fb2c23d0f4 100644 --- a/eng/common/templates/post-build/channels/public-validation-release.yml +++ b/eng/common/templates/post-build/channels/public-validation-release.yml @@ -1,7 +1,6 @@ parameters: artifactsPublishingAdditionalParameters: '' publishInstallersAndChecksums: false - publishToAzureDevOpsFeeds: true stages: - stage: PVR_Publish @@ -57,35 +56,36 @@ stages: AZURE_DEVOPS_EXT_PAT: $(dn-bot-dnceng-universal-packages-rw) inputs: filePath: eng\common\sdk-task.ps1 - arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet /p:ArtifactsCategory=$(_DotNetValidationArtifactsCategory) /p:IsStableBuild=$(IsStableBuild) /p:IsInternalBuild=$(IsInternalBuild) /p:RepositoryName=$(Build.Repository.Name) /p:CommitSha=$(Build.SourceVersion) /p:NugetPath=$(NuGetExeToolPath) - /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:TargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' - /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' - /p:BARBuildId=$(BARBuildId) - /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' - /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' - /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' - /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' - /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' /p:Configuration=Release /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:PublishToAzureDevOpsNuGetFeeds=${{ parameters.publishToAzureDevOpsFeeds }} + /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} - + - template: ../../steps/promote-build.yml parameters: ChannelId: ${{ variables.PublicValidationRelease_30_Channel_Id }} diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index c134764496..adb2a854f2 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -55,10 +55,6 @@ variables: # Feed Configurations # These should include the suffix "/index.json" - # Configuration for the feed where packages from internal non-stable builds will be published to - - name: StaticInternalFeed - value: 'https://dnceng.pkgs.visualstudio.com/_packaging/dotnet-core-internal/nuget/v3/index.json' - # Default locations for Installers and checksums # Public Locations - name: ChecksumsBlobFeedUrl diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index e473cadbcc..5b9d0a5d99 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -4,7 +4,6 @@ parameters: enableSymbolValidation: false enableNugetValidation: true publishInstallersAndChecksums: false - enableAzDONuGetFeeds: true SDLValidationParameters: enable: false continueOnError: false @@ -101,7 +100,6 @@ stages: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} - template: \eng\common\templates\post-build\channels\netcore-dev-30.yml parameters: @@ -120,23 +118,23 @@ stages: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} - template: \eng\common\templates\post-build\channels\public-validation-release.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - enableAzDONuGetFeeds: ${{ parameters.enableAzDONuGetFeeds }} - template: \eng\common\templates\post-build\channels\netcore-release-30.yml parameters: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-release-31.yml parameters: symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - template: \eng\common\templates\post-build\channels\netcore-internal-30.yml parameters: diff --git a/global.json b/global.json index c1c4de8567..5c4eb05505 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19460.3", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19461.7", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 3ce13ed46a641944cbc87b44bd6d4ad5f95f0b7f Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 12 Sep 2019 22:01:30 -0700 Subject: [PATCH 074/146] FX_NO_SYSTEM_CONSOLE and EXTRAS_FOR_SILVERLIGHT_COMPILER are never set (#7549) --- src/fsharp/FSharp.Core/Query.fs | 4 ---- src/fsharp/FSharp.Core/fslib-extra-pervasives.fs | 2 -- .../FSharp.Core/fslib-extra-pervasives.fsi | 2 -- src/fsharp/FSharp.Core/prim-types.fs | 5 +---- src/fsharp/FSharp.Core/prim-types.fsi | 4 +--- src/fsharp/FSharp.Core/printf.fs | 16 ---------------- src/fsharp/FSharp.Core/printf.fsi | 3 +-- 7 files changed, 3 insertions(+), 33 deletions(-) diff --git a/src/fsharp/FSharp.Core/Query.fs b/src/fsharp/FSharp.Core/Query.fs index 742f04b32d..cd681e7793 100644 --- a/src/fsharp/FSharp.Core/Query.fs +++ b/src/fsharp/FSharp.Core/Query.fs @@ -1804,7 +1804,6 @@ module Query = let linqQuery = TransInnerWithFinalConsume canElim queryProducingSequence let linqQueryAfterEliminatingNestedQueries = EliminateNestedQueries linqQuery -#if !FX_NO_SYSTEM_CONSOLE #if DEBUG let debug() = Printf.printfn "----------------------queryProducingSequence-------------------------" @@ -1814,20 +1813,17 @@ module Query = Printf.printfn "--------------------------linqQuery (after nested)-------------------" Printf.printfn "%A" linqQueryAfterEliminatingNestedQueries #endif -#endif let result = try LeafExpressionConverter.EvaluateQuotation linqQueryAfterEliminatingNestedQueries with e -> -#if !FX_NO_SYSTEM_CONSOLE #if DEBUG debug() Printf.printfn "--------------------------error--------------------------------------" Printf.printfn "%A" (e.ToString()) Printf.printfn "---------------------------------------------------------------------" -#endif #endif reraise () diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs index dd8d087345..0d6c3772c1 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs @@ -227,7 +227,6 @@ module ExtraTopLevelOperators = [] let fprintfn (textWriter:TextWriter) format = Printf.fprintfn textWriter format -#if !FX_NO_SYSTEM_CONSOLE [] let printf format = Printf.printf format @@ -239,7 +238,6 @@ module ExtraTopLevelOperators = [] let eprintfn format = Printf.eprintfn format -#endif [] let failwith s = raise (Failure s) diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi index 804d48bc3d..6b43ddef90 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi @@ -12,7 +12,6 @@ module ExtraTopLevelOperators = open Microsoft.FSharp.Collections open Microsoft.FSharp.Text -#if !FX_NO_SYSTEM_CONSOLE /// Print to stdout using the given format. /// The formatter. /// The formatted result. @@ -36,7 +35,6 @@ module ExtraTopLevelOperators = /// The formatted result. [] val eprintfn : format:Printf.TextWriterFormat<'T> -> 'T -#endif /// Print to a string using the given format. /// The formatter. diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index bfd5bdacc9..5c053e8ba9 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -4335,7 +4335,6 @@ namespace Microsoft.FSharp.Core [] let id x = x -#if !FX_NO_SYSTEM_CONSOLE // std* are TypeFunctions with the effect of reading the property on instantiation. // So, direct uses of stdout should capture the current System.Console.Out at that point. [] @@ -4346,10 +4345,8 @@ namespace Microsoft.FSharp.Core [] let stderr<'T> = System.Console.Error -#endif - - module Unchecked = + module Unchecked = [] let inline unbox<'T> (v:obj) = unboxPrim<'T> v diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index c977af4541..6d345a2cfd 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -2360,10 +2360,9 @@ namespace Microsoft.FSharp.Core [] val nanf: float32 -#if !FX_NO_SYSTEM_CONSOLE /// Reads the value of the property System.Console.In. [] - val stdin<'T> : System.IO.TextReader + val stdin<'T> : System.IO.TextReader /// Reads the value of the property System.Console.Error. [] @@ -2372,7 +2371,6 @@ namespace Microsoft.FSharp.Core /// Reads the value of the property System.Console.Out. [] val stdout<'T> : System.IO.TextWriter -#endif /// The standard overloaded range operator, e.g. [n..m] for lists, seq {n..m} for sequences /// The start value of the range. diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index 141c9752da..3913eeeba5 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -1645,20 +1645,6 @@ module Printf = [] let failwithf format = ksprintf failwith format -#if !FX_NO_SYSTEM_CONSOLE -#if EXTRAS_FOR_SILVERLIGHT_COMPILER - [] - let printf format = fprintf (!outWriter) format - - [] - let eprintf format = fprintf (!errorWriter) format - - [] - let printfn format = fprintfn (!outWriter) format - - [] - let eprintfn format = fprintfn (!errorWriter) format -#else [] let printf format = fprintf Console.Out format @@ -1670,5 +1656,3 @@ module Printf = [] let eprintfn format = fprintfn Console.Error format -#endif -#endif diff --git a/src/fsharp/FSharp.Core/printf.fsi b/src/fsharp/FSharp.Core/printf.fsi index c8f7b2dcae..10e17ec68d 100644 --- a/src/fsharp/FSharp.Core/printf.fsi +++ b/src/fsharp/FSharp.Core/printf.fsi @@ -183,7 +183,6 @@ module Printf = [] val fprintfn : textWriter:TextWriter -> format:TextWriterFormat<'T> -> 'T -#if !FX_NO_SYSTEM_CONSOLE /// Formatted printing to stderr /// The input formatter. /// The return type and arguments of the formatter. @@ -207,7 +206,7 @@ module Printf = /// The return type and arguments of the formatter. [] val printfn : format:TextWriterFormat<'T> -> 'T -#endif + /// Print to a string via an internal string buffer and return /// the result as a string. Helper printers must return strings. /// The input formatter. From b9e4b07fd11f09df302e6c13af7b765b9b454566 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2019 17:04:37 +0000 Subject: [PATCH 075/146] Update dependencies from https://github.com/dotnet/arcade build 20190912.5 (#7555) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19462.5 --- eng/Version.Details.xml | 4 ++-- .../channels/netcore-internal-30.yml | 6 +++--- eng/common/tools.ps1 | 18 +++++++++++++++++- eng/common/tools.sh | 16 ++++++++++++++++ global.json | 2 +- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b51173650b..436e00c958 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 8eb29ba860a3cfcfe68f9a8256caa7efc1f1aaba + 6003ee189f456c92a18b097f226d4927309def27 diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index 594a1a9a78..053163cf6a 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -107,9 +107,9 @@ stages: /p:Configuration=Release /p:PublishInstallersAndChecksums=true /p:ChecksumsTargetStaticFeed=$(InternalChecksumsBlobFeedUrl) - /p:ChecksumsTargetStaticFeedKey=$(InternalChecksumsBlobFeedKey) + /p:ChecksumsAzureAccountKey=$(InternalChecksumsBlobFeedKey) /p:InstallersTargetStaticFeed=$(InternalInstallersBlobFeedUrl) - /p:InstallersTargetStaticFeedKey=$(InternalInstallersBlobFeedKey) + /p:InstallersAzureAccountKey=$(InternalInstallersBlobFeedKey) /p:PublishToAzureDevOpsNuGetFeeds=true /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/_packaging/dotnet3-internal/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' @@ -121,4 +121,4 @@ stages: - template: ../../steps/promote-build.yml parameters: - ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} \ No newline at end of file + ChannelId: ${{ variables.InternalServicing_30_Channel_Id }} diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index bb5638930a..91efea9405 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -153,6 +153,16 @@ function InitializeDotNetCli([bool]$install) { # Make Sure that our bootstrapped dotnet cli is available in future steps of the Azure Pipelines build Write-PipelinePrependPath -Path $dotnetRoot + + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if ($ci) { + $env:NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS = 20 + $env:NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS = 20 + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS' -Value '20' + Write-PipelineSetVariable -Name 'NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS' -Value '20' + } + Write-PipelineSetVariable -Name 'DOTNET_MULTILEVEL_LOOKUP' -Value '0' Write-PipelineSetVariable -Name 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE' -Value '1' @@ -365,7 +375,6 @@ function InitializeBuildTool() { Write-PipelineTelemetryError -Category "InitializeToolset" -Message "/global.json must specify 'tools.dotnet'." ExitWithExitCode 1 } - $buildTool = @{ Path = Join-Path $dotnetRoot "dotnet.exe"; Command = "msbuild"; Tool = "dotnet"; Framework = "netcoreapp2.1" } } elseif ($msbuildEngine -eq "vs") { try { @@ -490,6 +499,13 @@ function Stop-Processes() { function MSBuild() { if ($pipelinesLog) { $buildTool = InitializeBuildTool + + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if ($ci -and $buildTool.Tool -eq "dotnet") { + dotnet nuget locals http-cache -c + } + $toolsetBuildProject = InitializeToolset $path = Split-Path -parent $toolsetBuildProject $path = Join-Path $path (Join-Path $buildTool.Framework "Microsoft.DotNet.Arcade.Sdk.dll") diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 94a1edd7d0..757d5b9ea4 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -152,6 +152,15 @@ function InitializeDotNetCli { # build steps from using anything other than what we've downloaded. Write-PipelinePrependPath -path "$dotnet_root" + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if [[ "$ci" == true ]]; then + export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 + export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 + Write-PipelineSetVariable -name "NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS" -value "20" + Write-PipelineSetVariable -name "NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS" -value "20" + fi + Write-PipelineSetVariable -name "DOTNET_MULTILEVEL_LOOKUP" -value "0" Write-PipelineSetVariable -name "DOTNET_SKIP_FIRST_TIME_EXPERIENCE" -value "1" @@ -328,6 +337,13 @@ function MSBuild { if [[ "$pipelines_log" == true ]]; then InitializeBuildTool InitializeToolset + + # Work around issues with Azure Artifacts credential provider + # https://github.com/dotnet/arcade/issues/3932 + if [[ "$ci" == true ]]; then + dotnet nuget locals http-cache -c + fi + local toolset_dir="${_InitializeToolset%/*}" local logger_path="$toolset_dir/$_InitializeBuildToolFramework/Microsoft.DotNet.Arcade.Sdk.dll" args=( "${args[@]}" "-logger:$logger_path" ) diff --git a/global.json b/global.json index 5c4eb05505..ff2ad6fe78 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19461.7", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19462.5", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 613bb422ec99e8b972f10637a76646b4b117211b Mon Sep 17 00:00:00 2001 From: Christian Steinert Date: Mon, 16 Sep 2019 19:05:38 +0200 Subject: [PATCH 076/146] Updates README with new non-vs-dependent build switch. (#7565) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 5d62750b30..b82a64d086 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,12 @@ Build from the command line: build.cmd ``` +The build depends on an installation of Visual Studio. To build the compiler without this dependency use: + +``` +build.cmd -noVisualStudio +``` + After it's finished, open either `FSharp.sln` or `VisualFSharp.sln` in your editor of choice. The latter solution is larger but includes the F# tools for Visual Studio and its associated infrastructure. ### Quickstart on Linux or macOS From cbf0e98610fe07de0fc6dbc1e9eef6080a22f550 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2019 10:22:38 -0700 Subject: [PATCH 077/146] Update dependencies from https://github.com/dotnet/arcade build 20190913.3 (#7563) - Microsoft.DotNet.Arcade.Sdk - 1.0.0-beta.19463.3 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 436e00c958..32461002c4 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 6003ee189f456c92a18b097f226d4927309def27 + 7b731032220c21a3ed0021c72757b1f3122579b2 diff --git a/global.json b/global.json index ff2ad6fe78..1e7325d768 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19462.5", + "Microsoft.DotNet.Arcade.Sdk": "1.0.0-beta.19463.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From dda5426b65587f88e9bb2d18d9d109f028cf6575 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Mon, 16 Sep 2019 18:29:25 -0700 Subject: [PATCH 078/146] fire events when script host resolves assembly reference (#7571) * add event every time `#r` is invoked * pass additional args to script host --- src/fsharp/CompileOps.fs | 10 ++++++-- src/fsharp/CompileOps.fsi | 2 +- .../FSharpScript.fs | 8 ++++-- src/fsharp/fsi/fsi.fs | 9 ++++++- src/fsharp/fsi/fsi.fsi | 3 +++ .../FSharpScriptTests.fs | 25 +++++++++++++++++++ 6 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index b8b7fcdc93..379c8fcac2 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -4775,7 +4775,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. -let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = +let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file, assemblyReferenceAdded: string -> unit) = let resolutions = CommitOperationResult(tcImports.TryResolveAssemblyReference(ctok, AssemblyReference(m, file, None), ResolveAssemblyReferenceMode.ReportErrors)) let dllinfos, ccuinfos = tcImports.RegisterAndImportReferencedAssemblies(ctok, resolutions) |> Cancellable.runWithoutCancellation @@ -4786,7 +4786,13 @@ let RequireDLL (ctok, tcImports: TcImports, tcEnv, thisAssemblyName, m, file) = let g = tcImports.GetTcGlobals() let amap = tcImports.GetImportMap() - let tcEnv = (tcEnv, asms) ||> List.fold (fun tcEnv asm -> AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes)) + let buildTcEnv tcEnv asm = + let tcEnv = AddCcuToTcEnv(g, amap, m, tcEnv, thisAssemblyName, asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm.AssemblyInternalsVisibleToAttributes) + match asm.FSharpViewOfMetadata.FileName with + | Some asmPath -> assemblyReferenceAdded asmPath + | None -> () + tcEnv + let tcEnv = (tcEnv, asms) ||> List.fold buildTcEnv tcEnv, (dllinfos, asms) diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index ff5555e8f3..8a017c1e32 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -672,7 +672,7 @@ val WriteOptimizationData: TcGlobals * filename: string * inMem: bool * CcuThunk /// Process #r in F# Interactive. /// Adds the reference to the tcImports and add the ccu to the type checking environment. -val RequireDLL: CompilationThreadToken * TcImports * TcEnv * thisAssemblyName: string * referenceRange: range * file: string -> TcEnv * (ImportedBinary list * ImportedAssembly list) +val RequireDLL: CompilationThreadToken * TcImports * TcEnv * thisAssemblyName: string * referenceRange: range * file: string * assemblyReferenceAdded: (string -> unit) -> TcEnv * (ImportedBinary list * ImportedAssembly list) /// Processing # commands val ProcessMetaCommandsFromInput: diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs index 4f9bce020a..a7d24b3c9c 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharpScript.fs @@ -5,7 +5,7 @@ namespace FSharp.Compiler.Scripting open System open FSharp.Compiler.Interactive.Shell -type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = +type FSharpScript(?captureInput: bool, ?captureOutput: bool, ?additionalArgs: string[]) as this = let outputProduced = Event() let errorProduced = Event() @@ -17,6 +17,7 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = do stderr.LineWritten.Add errorProduced.Trigger let captureInput = defaultArg captureInput false let captureOutput = defaultArg captureOutput false + let additionalArgs = defaultArg additionalArgs [||] let savedInput = Console.In let savedOutput = Console.Out let savedError = Console.Error @@ -29,9 +30,12 @@ type FSharpScript(?captureInput: bool, ?captureOutput: bool) as this = ())() let config = FsiEvaluationSession.GetDefaultConfiguration() - let argv = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let baseArgs = [| this.GetType().Assembly.Location; "--noninteractive"; "--targetprofile:netcore"; "--quiet" |] + let argv = Array.append baseArgs additionalArgs let fsi = FsiEvaluationSession.Create (config, argv, stdin, stdout, stderr, collectible=true) + member __.AssemblyReferenceAdded = fsi.AssemblyReferenceAdded + member __.ProvideInput = stdin.ProvideInput member __.OutputProduced = outputProduced.Publish diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index b5d0b09821..974fc15e79 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -962,6 +962,8 @@ type internal FsiDynamicCompiler let outfile = "TMPFSCI.exe" let assemblyName = "FSI-ASSEMBLY" + let assemblyReferenceAddedEvent = Control.Event() + let mutable fragmentId = 0 let mutable prevIt : ValRef option = None @@ -1245,7 +1247,7 @@ type internal FsiDynamicCompiler let tcState = istate.tcState let tcEnv,(_dllinfos,ccuinfos) = try - RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path) + RequireDLL (ctok, tcImports, tcState.TcEnvFromImpls, assemblyName, m, path, assemblyReferenceAddedEvent.Trigger) with e -> tcConfigB.RemoveReferencedAssemblyByPath(m,path) reraise() @@ -1334,6 +1336,8 @@ type internal FsiDynamicCompiler member __.FormatValue(obj:obj, objTy) = valuePrinter.FormatValue(obj, objTy) + member __.AssemblyReferenceAdded = assemblyReferenceAddedEvent.Publish + //---------------------------------------------------------------------------- // ctrl-c handling //---------------------------------------------------------------------------- @@ -2640,6 +2644,9 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i fsiInteractionProcessor.EvalScript(ctok, scriptPath, errorLogger) |> commitResultNonThrowing errorOptions scriptPath errorLogger |> function Choice1Of2 (_), errs -> Choice1Of2 (), errs | Choice2Of2 exn, errs -> Choice2Of2 exn, errs + + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member __.AssemblyReferenceAdded = fsiDynamicCompiler.AssemblyReferenceAdded /// Performs these steps: /// - Load the dummy interaction, if any diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 918afe85f9..2897e36484 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -227,6 +227,9 @@ type FsiEvaluationSession = /// A host calls this to report an unhandled exception in a standard way, e.g. an exception on the GUI thread gets printed to stderr member ReportUnhandledException : exn: exn -> unit + /// Event fires every time an assembly reference is added to the execution environment, e.g., via `#r`. + member AssemblyReferenceAdded : IEvent + /// Load the dummy interaction, load the initial files, and, /// if interacting, start the background thread to read the standard input. /// diff --git a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs index bd37650d33..dfd66473f0 100644 --- a/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs +++ b/tests/FSharp.Compiler.Private.Scripting.UnitTests/FSharpScriptTests.fs @@ -3,6 +3,7 @@ namespace FSharp.Compiler.Scripting.UnitTests open System +open System.IO open System.Threading open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.Scripting @@ -57,3 +58,27 @@ type InteractiveTests() = let value = opt.Value Assert.AreEqual(typeof, value.ReflectionType) Assert.AreEqual(5, value.ReflectionValue :?> int) + + [] + member __.``Assembly reference event successful``() = + use script = new FSharpScript() + let testAssembly = "System.dll" + let mutable assemblyResolveEventCount = 0 + let mutable foundAssemblyReference = false + Event.add (fun (assembly: string) -> + assemblyResolveEventCount <- assemblyResolveEventCount + 1 + foundAssemblyReference <- String.Compare(testAssembly, Path.GetFileName(assembly), StringComparison.OrdinalIgnoreCase) = 0) + script.AssemblyReferenceAdded + script.Eval(sprintf "#r \"%s\"" testAssembly) |> ignoreValue + Assert.AreEqual(1, assemblyResolveEventCount) + Assert.True(foundAssemblyReference) + + [] + member __.``Assembly reference event unsuccessful``() = + use script = new FSharpScript() + let testAssembly = "not-an-assembly-that-can-be-found.dll" + let mutable foundAssemblyReference = false + Event.add (fun _ -> foundAssemblyReference <- true) script.AssemblyReferenceAdded + let _result, errors = script.Eval(sprintf "#r \"%s\"" testAssembly) + Assert.AreEqual(1, errors.Length) + Assert.False(foundAssemblyReference) From 2e41de6502bb31007ad059fb5f59faff1da76f7b Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Mon, 16 Sep 2019 18:29:56 -0700 Subject: [PATCH 079/146] update insert task to v3 (#7574) --- eng/release/insert-into-vs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/release/insert-into-vs.yml b/eng/release/insert-into-vs.yml index d78e5d9a22..89650f190d 100644 --- a/eng/release/insert-into-vs.yml +++ b/eng/release/insert-into-vs.yml @@ -47,7 +47,7 @@ stages: inputs: filePath: $(Build.SourcesDirectory)/eng/release/scripts/GetAssemblyVersions.ps1 arguments: -assemblyVersionsPath $(Build.ArtifactStagingDirectory)\VSSetup\DevDivPackages\DependentAssemblyVersions.csv - - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@2 + - task: ms-vseng.MicroBuildShipTasks.55100717-a81d-45ea-a363-b8fe3ec375ad.MicroBuildInsertVsPayload@3 displayName: 'Insert VS Payload' inputs: LinkWorkItemsToPR: false From 031868fde6dbce694c3f67bb54d01acb2136f23f Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 18 Sep 2019 14:47:52 -0700 Subject: [PATCH 080/146] Remove the requirement for explicit FSharp.Core reference need --noframework (#7572) * Remove the requirement that an explicit FSharp.Core reference requires --noframework * fsharpqa --- src/fsharp/CompileOps.fs | 43 ++++--------------- src/fsharp/FSComp.txt | 2 +- src/fsharp/xlf/FSComp.txt.cs.xlf | 4 +- src/fsharp/xlf/FSComp.txt.de.xlf | 4 +- src/fsharp/xlf/FSComp.txt.es.xlf | 4 +- src/fsharp/xlf/FSComp.txt.fr.xlf | 4 +- src/fsharp/xlf/FSComp.txt.it.xlf | 4 +- src/fsharp/xlf/FSComp.txt.ja.xlf | 4 +- src/fsharp/xlf/FSComp.txt.ko.xlf | 4 +- src/fsharp/xlf/FSComp.txt.pl.xlf | 4 +- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 4 +- src/fsharp/xlf/FSComp.txt.ru.xlf | 4 +- src/fsharp/xlf/FSComp.txt.tr.xlf | 4 +- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 4 +- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 4 +- .../fsc/reference/E_RefFSharpCore.fs | 5 --- .../CompilerOptions/fsc/reference/env.lst | 1 - .../MultiTargeting/E_BadPathToFSharpCore.fs | 2 +- .../MultiTargeting/E_BadPathToFSharpCore.fsx | 2 +- 19 files changed, 37 insertions(+), 70 deletions(-) delete mode 100644 tests/fsharpqa/Source/CompilerOptions/fsc/reference/E_RefFSharpCore.fs diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 379c8fcac2..0f39af500b 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2580,24 +2580,21 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = errorR(Error(FSComp.SR.buildMultipleReferencesNotAllowed libraryName, rangeCmdArgs)) nameOfDll r - // Look for an explicit reference to mscorlib and use that to compute clrRoot and targetFrameworkVersion + // Look for an explicit reference to mscorlib/netstandard.dll or System.Runtime.dll and use that to compute clrRoot and targetFrameworkVersion let primaryAssemblyReference, primaryAssemblyExplicitFilenameOpt = computeKnownDllReference(data.primaryAssembly.Name) - let fslibReference, fslibExplicitFilenameOpt = - let (_, fileNameOpt) as res = computeKnownDllReference getFSharpCoreLibraryName + let fslibReference = + // Look for explict FSharp.Core reference otherwise use version that was referenced by compiler + let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with - | None -> - // if FSharp.Core was not provided explicitly - use version that was referenced by compiler - AssemblyReference(range0, getDefaultFSharpCoreReference, None), None - | _ -> res + | Some _ -> dllReference + | None -> AssemblyReference(range0, getDefaultFSharpCoreReference, None) // If either mscorlib.dll/System.Runtime.dll/netstandard.dll or FSharp.Core.dll are explicitly specified then we require the --noframework flag. // The reason is that some non-default frameworks may not have the default dlls. For example, Client profile does // not have System.Web.dll. - do if ((primaryAssemblyExplicitFilenameOpt.IsSome || fslibExplicitFilenameOpt.IsSome) && data.framework) then + do if (primaryAssemblyExplicitFilenameOpt.IsSome && data.framework) then error(Error(FSComp.SR.buildExplicitCoreLibRequiresNoFramework("--noframework"), rangeStartup)) - let ilGlobals = mkILGlobals ILScopeRef.Local - // clrRoot: the location of the primary assembly (mscorlib.dll or netstandard.dll or System.Runtime.dll) // // targetFrameworkVersionValue: Normally just HighestInstalledNetFrameworkVersion() @@ -2627,37 +2624,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let systemAssemblies = systemAssemblies - // Look for an explicit reference to FSharp.Core and use that to compute fsharpBinariesDir - // FUTURE: remove this, we only read the binary for the exception it raises - let fsharpBinariesDirValue = -// NOTE: It's not clear why this behaviour has been changed for the NETSTANDARD compilations of the F# compiler -#if NETSTANDARD - ignore ilGlobals - data.defaultFSharpBinariesDir -#else - match fslibExplicitFilenameOpt with - | Some fslibFilename -> - let filename = ComputeMakePathAbsolute data.implicitIncludeDir fslibFilename - if fslibReference.ProjectReference.IsNone then - try - use ilReader = OpenILBinary(filename, data.reduceMemoryUsage, ilGlobals, None, data.shadowCopyReferences, data.tryGetMetadataSnapshot) - () - with e -> - error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message), rangeStartup)) - - let fslibRoot = Path.GetDirectoryName(FileSystem.GetFullPathShim filename) - fslibRoot - | _ -> - data.defaultFSharpBinariesDir -#endif - member x.primaryAssembly = data.primaryAssembly member x.autoResolveOpenDirectivesToDlls = data.autoResolveOpenDirectivesToDlls member x.noFeedback = data.noFeedback member x.stackReserveSize = data.stackReserveSize member x.implicitIncludeDir = data.implicitIncludeDir member x.openDebugInformationForLaterStaticLinking = data.openDebugInformationForLaterStaticLinking - member x.fsharpBinariesDir = fsharpBinariesDirValue + member x.fsharpBinariesDir = data.defaultFSharpBinariesDir member x.compilingFslib = data.compilingFslib member x.useIncrementalBuilder = data.useIncrementalBuilder member x.includes = data.includes diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 12b93344bc..65cdd47d5b 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1085,7 +1085,7 @@ lexIndentOffForML,"Consider using a file with extension '.ml' or '.mli' instead" 1219,tcUnionCaseNameConflictsWithGeneratedType,"The union case named '%s' conflicts with the generated type '%s'" 1220,chkNoReflectedDefinitionOnStructMember,"ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter" 1221,tcDllImportNotAllowed,"DLLImport bindings must be static members in a class or function definitions in a module" -1222,buildExplicitCoreLibRequiresNoFramework,"When mscorlib.dll or FSharp.Core.dll is explicitly referenced the %s option must also be passed" +1222,buildExplicitCoreLibRequiresNoFramework,"When mscorlib.dll is explicitly referenced the %s option must also be passed" 1223,buildExpectedSigdataFile,"FSharp.Core.sigdata not found alongside FSharp.Core. File expected in %s. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required." 1225,buildExpectedFileAlongSideFSharpCore,"File '%s' not found alongside FSharp.Core. File expected in %s. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required." 1227,buildUnexpectedFileNameCharacter,"Filename '%s' contains invalid character '%s'" diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index ae3bb9c94e..665567318f 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Pokud se na knihovnu mscorlib.dll nebo FSharp.Core.dll odkazuje explicitně, musí se předávat taky možnost {0}. + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Pokud se na knihovnu mscorlib.dll nebo FSharp.Core.dll odkazuje explicitně, musí se předávat taky možnost {0}. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 32e1555f78..93ec9cbaff 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Wenn explizit auf "mscorlib.dll" oder "FSharp.Core.dll" verwiesen wird, muss auch die Option "{0}" übergeben werden. + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Wenn explizit auf "mscorlib.dll" oder "FSharp.Core.dll" verwiesen wird, muss auch die Option "{0}" übergeben werden. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 6b2a4bd53b..9969b04da4 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Cuando se hace referencia de forma explícita a mscorlib.dll o FSharp.Core.dll, debe pasarse también la opción {0}. + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Cuando se hace referencia de forma explícita a mscorlib.dll o FSharp.Core.dll, debe pasarse también la opción {0}. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index 318c5bfcf9..c50670d8ef 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Lorsque mscorlib.dll ou FSharp.Core.dll est explicitement référencé, l'option {0} doit également être passée + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Lorsque mscorlib.dll ou FSharp.Core.dll est explicitement référencé, l'option {0} doit également être passée diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 2afde11c04..ad15c555b5 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Quando si fa riferimento in modo esplicito a mscorlib.dll o FSharp.Core.dll è necessario passare anche l'opzione {0} + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Quando si fa riferimento in modo esplicito a mscorlib.dll o FSharp.Core.dll è necessario passare anche l'opzione {0} diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 5e2e7ccd35..2a65a01a76 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -5310,8 +5310,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll または FSharp.Core.dll が明示的に参照される場合は、{0} オプションも渡す必要があります + When mscorlib.dll is explicitly referenced the {0} option must also be passed + mscorlib.dll または FSharp.Core.dll が明示的に参照される場合は、{0} オプションも渡す必要があります diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 1d0c84e0e7..15a78d3177 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll 또는 FSharp.Core.dll이 명시적으로 참조될 경우 {0} 옵션도 전달해야 합니다. + When mscorlib.dll is explicitly referenced the {0} option must also be passed + mscorlib.dll 또는 FSharp.Core.dll이 명시적으로 참조될 경우 {0} 옵션도 전달해야 합니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 91f5bc3c2e..c169bb55bf 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - W przypadku jawnego odwołania do pliku mscorlib.dll lub pliku FSharp.Core.dll musi również zostać przekazana opcja {0} + When mscorlib.dll is explicitly referenced the {0} option must also be passed + W przypadku jawnego odwołania do pliku mscorlib.dll lub pliku FSharp.Core.dll musi również zostać przekazana opcja {0} diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 1f723d5212..6fc94fde87 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - Enquanto mscorlib.dll ou FSharp.Core.dll é explicitamente referenciado, a opção {0} também deve ser passada + When mscorlib.dll is explicitly referenced the {0} option must also be passed + Enquanto mscorlib.dll ou FSharp.Core.dll é explicitamente referenciado, a opção {0} também deve ser passada diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index dc30296048..157b49fa5c 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - При явной ссылке на mscorlib.dll или FSharp.Core.dll также должен передаваться параметр {0} + When mscorlib.dll is explicitly referenced the {0} option must also be passed + При явной ссылке на mscorlib.dll или FSharp.Core.dll также должен передаваться параметр {0} diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 1207af6753..48e2433f2c 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll veya FSharp.Core.dll dosyalarına açık olarak başvurulduğunda {0} seçeneği de geçirilmelidir + When mscorlib.dll is explicitly referenced the {0} option must also be passed + mscorlib.dll veya FSharp.Core.dll dosyalarına açık olarak başvurulduğunda {0} seçeneği de geçirilmelidir diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 4a54c529b1..46b4fc7896 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - 当显式引用 mscorlib.dll 或 FSharp.Core.dll 时,同时也必须传递 {0} 选项 + When mscorlib.dll is explicitly referenced the {0} option must also be passed + 当显式引用 mscorlib.dll 或 FSharp.Core.dll 时,同时也必须传递 {0} 选项 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index b58f81f6f2..d032954027 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -5308,8 +5308,8 @@ - When mscorlib.dll or FSharp.Core.dll is explicitly referenced the {0} option must also be passed - 如果明確參考了 mscorlib.dll 或 FSharp.Core.dll,就必須同時傳遞 {0} 選項 + When mscorlib.dll is explicitly referenced the {0} option must also be passed + 如果明確參考了 mscorlib.dll 或 FSharp.Core.dll,就必須同時傳遞 {0} 選項 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/E_RefFSharpCore.fs b/tests/fsharpqa/Source/CompilerOptions/fsc/reference/E_RefFSharpCore.fs deleted file mode 100644 index f2e0a5cd49..0000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/E_RefFSharpCore.fs +++ /dev/null @@ -1,5 +0,0 @@ -// #Regression #NoMT #CompilerOptions -// Regression test for FSHARP1.0:5334 -//When mscorlib\.dll or FSharp\.Core\.dll is explicitly referenced the --noframework option must also be passed - -exit 0 diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst index 5dc176ebad..111fa9015c 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst @@ -1,4 +1,3 @@ -NoCrossVer SOURCE=E_RefFSharpCore.fs SCFLAGS="-r FSharp.Core" # E_RefFSharpCore.fs SOURCE=EscapeChars01.fs SCFLAGS="-r:\".\No\nNewLine\" # EscapeChars01.fs SOURCE=EscapeChars01.fs SCFLAGS="-r:a\\b\\n.dll" # EscapeChars01.fs (-r:) diff --git a/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fs b/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fs index 0186afb88d..2cee5df055 100644 --- a/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fs +++ b/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fs @@ -1,6 +1,6 @@ // #Regression #Multitargeting #NoMono // Regression test for FSHARP1.0:6026 // Just a dummy file... -//Error opening binary file '.+I_DO_NOT_EXIST\\FSharp\.Core\.dll' +//Assembly reference 'I_DO_NOT_EXIST\\FSharp.Core.dll' was not found or is invalid exit 0 diff --git a/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fsx b/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fsx index 0186afb88d..2cee5df055 100644 --- a/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fsx +++ b/tests/fsharpqa/Source/MultiTargeting/E_BadPathToFSharpCore.fsx @@ -1,6 +1,6 @@ // #Regression #Multitargeting #NoMono // Regression test for FSHARP1.0:6026 // Just a dummy file... -//Error opening binary file '.+I_DO_NOT_EXIST\\FSharp\.Core\.dll' +//Assembly reference 'I_DO_NOT_EXIST\\FSharp.Core.dll' was not found or is invalid exit 0 From dc5e29435bfda854d6fb6e2e21bf626ee3662bf7 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Thu, 19 Sep 2019 15:00:42 -0700 Subject: [PATCH 081/146] Re-enable magic-resolver in fsi for coreclr (#7598) --- src/fsharp/fsi/fsi.fs | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 974fc15e79..bce19588be 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1498,22 +1498,14 @@ module internal MagicAssemblyResolution = let Install(tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput) = -#if NETSTANDARD - ignore tcConfigB - ignore tcImports - ignore fsiDynamicCompiler - ignore fsiConsoleOutput - { new System.IDisposable with - member x.Dispose() = () } -#else let ResolveAssembly (ctok, m, tcConfigB, tcImports: TcImports, fsiDynamicCompiler: FsiDynamicCompiler, fsiConsoleOutput: FsiConsoleOutput, fullAssemName:string) = try // Grab the name of the assembly let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let simpleAssemName = fullAssemName.Split([| ',' |]).[0] + let simpleAssemName = fullAssemName.Split([| ',' |]).[0] if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON ASSEMBLY, simpleAssemName = %s" simpleAssemName // "Attempting to load a dynamically required assembly in response to an AssemblyResolve event by using known static assembly references..." - + // Special case: Mono Windows Forms attempts to load an assembly called something like "Windows.Forms.resources" // We can't resolve this, so don't try. // REVIEW: Suggest 4481, delete this special case. @@ -1529,7 +1521,7 @@ module internal MagicAssemblyResolution = // Otherwise continue let assemblyReferenceTextDll = (simpleAssemName + ".dll") let assemblyReferenceTextExe = (simpleAssemName + ".exe") - let overallSearchResult = + let overallSearchResult = // OK, try to resolve as an existing DLL in the resolved reference set. This does unification by assembly name // once an assembly has been referenced. @@ -1573,15 +1565,15 @@ module internal MagicAssemblyResolution = | Some(assembly) -> OkResult([],Choice2Of2 assembly) | None -> #endif - + // As a last resort, try to find the reference without an extension match tcImports.TryFindExistingFullyQualifiedPathByExactAssemblyRef(ctok, ILAssemblyRef.Create(simpleAssemName,None,None,false,None,None)) with | Some(resolvedPath) -> OkResult([],Choice1Of2 resolvedPath) | None -> - + ErrorResult([],Failure (FSIstrings.SR.fsiFailedToResolveAssembly(simpleAssemName))) - + match overallSearchResult with | ErrorResult _ -> null | OkResult _ -> @@ -1592,8 +1584,8 @@ module internal MagicAssemblyResolution = assemblyLoadFrom assemblyName | Choice2Of2 assembly -> assembly - - with e -> + + with e -> stopProcessingRecovery e range0 null @@ -1604,12 +1596,11 @@ module internal MagicAssemblyResolution = // during compilation. So we recover the CompilationThreadToken here. let ctok = AssumeCompilationThreadWithoutEvidence () ResolveAssembly (ctok, rangeStdin, tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput, args.Name)) - + AppDomain.CurrentDomain.add_AssemblyResolve(handler) { new System.IDisposable with member x.Dispose() = AppDomain.CurrentDomain.remove_AssemblyResolve(handler) } -#endif //---------------------------------------------------------------------------- // Reading stdin From b834b1284ef36e04b3d4ce624b457ceb6209ebb6 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 24 Sep 2019 12:15:04 -0700 Subject: [PATCH 082/146] relax multiple load objection (#7613) --- src/fsharp/CompileOps.fs | 12 ++++-------- src/fsharp/FSComp.txt | 1 - src/fsharp/xlf/FSComp.txt.cs.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.de.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.es.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.fr.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.it.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ja.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ko.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.pl.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ru.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.tr.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 5 ----- 15 files changed, 4 insertions(+), 74 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 624a27f92d..e2cbf4474f 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2572,17 +2572,13 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let filename = ComputeMakePathAbsolute data.implicitIncludeDir r.Text if FileSystem.SafeExists filename then r, Some filename - else + else // If the file doesn't exist, let reference resolution logic report the error later... defaultCoreLibraryReference, if Range.equals r.Range rangeStartup then Some(filename) else None match data.referencedDLLs |> List.filter (fun assemblyReference -> assemblyReference.SimpleAssemblyNameIs libraryName) with - | [r] -> nameOfDll r - | [] -> - defaultCoreLibraryReference, None - | r :: _ -> - // Recover by picking the first one. - errorR(Error(FSComp.SR.buildMultipleReferencesNotAllowed libraryName, rangeCmdArgs)) - nameOfDll r + | [] -> defaultCoreLibraryReference, None + | [r] + | r :: _ -> nameOfDll r // Look for an explicit reference to mscorlib/netstandard.dll or System.Runtime.dll and use that to compute clrRoot and targetFrameworkVersion let primaryAssemblyReference, primaryAssemblyExplicitFilenameOpt = computeKnownDllReference(data.primaryAssembly.Name) diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 096da0a7cc..703a8cd3a1 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -43,7 +43,6 @@ buildProductNameCommunity,"F# Compiler for F# %s" 212,buildInvalidFilename,"'%s' is not a valid filename" 213,buildInvalidAssemblyName,"'%s' is not a valid assembly name" 214,buildInvalidPrivacy,"Unrecognized privacy setting '%s' for managed resource, valid options are 'public' and 'private'" -215,buildMultipleReferencesNotAllowed,"Multiple references to '%s.dll' are not permitted" 218,buildCannotReadAssembly,"Unable to read assembly '%s'" 220,buildAssemblyResolutionFailed,"Assembly resolution failure at or near this location" 221,buildImplicitModuleIsNotLegalIdentifier,"The declarations in this file will be placed in an implicit module '%s' based on the file name '%s'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file." diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 996f007de8..10fa84ce31 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -267,11 +267,6 @@ Nerozpoznané nastavení ochrany osobních údajů {0} pro spravovaný prostředek. Platné možnosti jsou public a private. - - Multiple references to '{0}.dll' are not permitted - Víc odkazů na knihovnu {0}.dll se nepovoluje. - - Unable to read assembly '{0}' Sestavení {0} se nedá přečíst. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 44db98820d..2a97ef5d77 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -267,11 +267,6 @@ Unbekannte Datenschutzeinstellung "{0}" für verwaltete Ressource; gültige Optionen sind "public" und "private". - - Multiple references to '{0}.dll' are not permitted - Mehrere Verweise auf "{0}.dll" sind nicht zulässig - - Unable to read assembly '{0}' Assembly "{0}" kann nicht gelesen werden. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index f67f43053c..0a1069b1ad 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -267,11 +267,6 @@ Configuración de privacidad '{0}' no reconocida para un recurso administrado. Las opciones válidas son 'public' y 'private'. - - Multiple references to '{0}.dll' are not permitted - No se permiten varias referencias a '{0}.dll'. - - Unable to read assembly '{0}' No se puede leer el ensamblado '{0}'. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index e16fb76681..f19c1db7fd 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -267,11 +267,6 @@ Paramètre de confidentialité '{0}' non reconnu pour la ressource managée, les options valides sont 'public' et 'private' - - Multiple references to '{0}.dll' are not permitted - Les références multiples à '{0}.dll' ne sont pas autorisées - - Unable to read assembly '{0}' Impossible de lire l'assembly '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index 2ef271b33e..ec424688dc 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -267,11 +267,6 @@ Impostazione di privacy '{0}' non riconosciuta per una risorsa gestita. Le opzioni valide sono 'public' e 'private' - - Multiple references to '{0}.dll' are not permitted - Non sono consentiti più riferimenti a '{0}.dll' - - Unable to read assembly '{0}' Non è possibile leggere l'assembly '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index d64338297f..6b78b55ecc 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -267,11 +267,6 @@ マネージド リソースの認識されないプライバシー設定 '{0}'。有効なオプションは 'public' および 'private' です。 - - Multiple references to '{0}.dll' are not permitted - '{0}.dll' に対する複数の参照は許可されていません - - Unable to read assembly '{0}' アセンブリ '{0}' を読み取れません diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index 03880250e9..c6643da5ec 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -267,11 +267,6 @@ 관리되는 리소스에 대해 인식할 수 없는 개인 정보 보호 설정 '{0}'입니다. 올바른 옵션은 'public' 및 'private'입니다. - - Multiple references to '{0}.dll' are not permitted - '{0}.dll'에 대한 다중 참조는 허용되지 않습니다. - - Unable to read assembly '{0}' '{0}' 어셈블리를 읽을 수 없습니다. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 98461fea0a..8dcbcc291b 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -267,11 +267,6 @@ Nierozpoznane ustawienie prywatności „{0}” dla zasobu zarządzanego. Prawidłowe opcje to „public” i „private” - - Multiple references to '{0}.dll' are not permitted - Używanie wielu odwołań do pliku „{0}.dll” jest niedozwolone - - Unable to read assembly '{0}' Nie można odczytać zestawu „{0}” diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index bf05ba3e77..717ad3dd6d 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -267,11 +267,6 @@ A configuração de privacidade '{0}' não foi reconhecida pelo recurso gerenciado, as opções válidas são 'public' e 'private' - - Multiple references to '{0}.dll' are not permitted - As referências múltiplas '{0}.dll' não são permitidas - - Unable to read assembly '{0}' Não é possível ler o assembly '{0}' diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index 16272ba0dc..e1aa38d356 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -267,11 +267,6 @@ Нераспознанный параметр конфиденциальности "{0}" для управляемого ресурса. Допускается использование параметров "public" и "private" - - Multiple references to '{0}.dll' are not permitted - Множественные ссылки на файлы "{0}.dll" не допускаются - - Unable to read assembly '{0}' Не удается прочитать сборку "{0}" diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index 85f8ee2f02..ec02c91549 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -267,11 +267,6 @@ Yönetilen kaynak için tanınmayan gizlilik ayarı '{0}'; geçerli seçenekler: 'public' ve 'private' - - Multiple references to '{0}.dll' are not permitted - Birden çok '{0}.dll' başvurusuna izin verilmiyor - - Unable to read assembly '{0}' '{0}' bütünleştirilmiş kodu okunamıyor diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index c0dbdcb187..99448a0a6a 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -267,11 +267,6 @@ 无法识别的受管理资源隐私设置“{0}”,有效的选项为 "public" 和 "private" - - Multiple references to '{0}.dll' are not permitted - 不允许多次引用“{0}.dll” - - Unable to read assembly '{0}' 无法读取程序集“{0}” diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 90be2ee081..0eabef7607 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -267,11 +267,6 @@ 受控資源的無法辨識隱私設定 '{0}',有效的選項是 'public' 和 'private' - - Multiple references to '{0}.dll' are not permitted - 不允許多次參考 '{0}.dll' - - Unable to read assembly '{0}' 無法讀取組件 '{0}' From d44950e2b68fb403ed683372a0f81b1214141577 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Tue, 24 Sep 2019 12:20:18 -0700 Subject: [PATCH 083/146] Relax --noframework for mscorlib, netstandard and system.runtime (#7612) * Eliminate Relax requirement to apply --noframework when referencing mscorlib/system.runtime.dll/netstandard.dll * Relax requirement to pass --noframework with System.Runtime, netstandard and mscorlib.dll --- src/fsharp/CompileOps.fs | 6 ------ src/fsharp/DotNetFrameworkDependencies.fs | 1 - src/fsharp/FSComp.txt | 1 - src/fsharp/xlf/FSComp.txt.cs.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.de.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.es.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.fr.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.it.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ja.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ko.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.pl.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.pt-BR.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.ru.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.tr.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.zh-Hans.xlf | 5 ----- src/fsharp/xlf/FSComp.txt.zh-Hant.xlf | 5 ----- 16 files changed, 73 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index e2cbf4474f..239015820a 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2589,12 +2589,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = | Some _ -> dllReference | None -> AssemblyReference(range0, getDefaultFSharpCoreReference, None) - // If either mscorlib.dll/System.Runtime.dll/netstandard.dll or FSharp.Core.dll are explicitly specified then we require the --noframework flag. - // The reason is that some non-default frameworks may not have the default dlls. For example, Client profile does - // not have System.Web.dll. - do if (primaryAssemblyExplicitFilenameOpt.IsSome && data.framework) then - error(Error(FSComp.SR.buildExplicitCoreLibRequiresNoFramework("--noframework"), rangeStartup)) - // clrRoot: the location of the primary assembly (mscorlib.dll or netstandard.dll or System.Runtime.dll) // // targetFrameworkVersionValue: Normally just HighestInstalledNetFrameworkVersion() diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 3d8e33082c..2e96dcd367 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -182,7 +182,6 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies // (a) included in the environment used for all .fsx files (see service.fs) // (b) included in environment for files 'orphaned' from a project context // -- for orphaned files (files in VS without a project context) - // -- for files given on a command line without --noframework set let getDesktopDefaultReferences useFsiAuxLib = [ yield "mscorlib" yield "System" diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 703a8cd3a1..c1ab22ab6a 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -1086,7 +1086,6 @@ lexIndentOffForML,"Consider using a file with extension '.ml' or '.mli' instead" 1219,tcUnionCaseNameConflictsWithGeneratedType,"The union case named '%s' conflicts with the generated type '%s'" 1220,chkNoReflectedDefinitionOnStructMember,"ReflectedDefinitionAttribute may not be applied to an instance member on a struct type, because the instance member takes an implicit 'this' byref parameter" 1221,tcDllImportNotAllowed,"DLLImport bindings must be static members in a class or function definitions in a module" -1222,buildExplicitCoreLibRequiresNoFramework,"When mscorlib.dll is explicitly referenced the %s option must also be passed" 1223,buildExpectedSigdataFile,"FSharp.Core.sigdata not found alongside FSharp.Core. File expected in %s. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required." 1225,buildExpectedFileAlongSideFSharpCore,"File '%s' not found alongside FSharp.Core. File expected in %s. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required." 1227,buildUnexpectedFileNameCharacter,"Filename '%s' contains invalid character '%s'" diff --git a/src/fsharp/xlf/FSComp.txt.cs.xlf b/src/fsharp/xlf/FSComp.txt.cs.xlf index 10fa84ce31..04d79253ac 100644 --- a/src/fsharp/xlf/FSComp.txt.cs.xlf +++ b/src/fsharp/xlf/FSComp.txt.cs.xlf @@ -5322,11 +5322,6 @@ Vazby DLLImport musí být statickými členy v definici třídy nebo funkce v modulu. - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Pokud se na knihovnu mscorlib.dll nebo FSharp.Core.dll odkazuje explicitně, musí se předávat taky možnost {0}. - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. V FSharp.Core se nenašel soubor FSharp.Core.sigdata. Soubor se očekával v {0}. Zvažte upgrade na novější verzi FSharp.Core, kde se tento soubor už nevyžaduje. diff --git a/src/fsharp/xlf/FSComp.txt.de.xlf b/src/fsharp/xlf/FSComp.txt.de.xlf index 2a97ef5d77..da3dfb3f7d 100644 --- a/src/fsharp/xlf/FSComp.txt.de.xlf +++ b/src/fsharp/xlf/FSComp.txt.de.xlf @@ -5322,11 +5322,6 @@ Bei DLLImport-Bindungen muss es sich um statische Member von Klassen- oder Funktionsdefinitionen eines Moduls handeln. - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Wenn explizit auf "mscorlib.dll" oder "FSharp.Core.dll" verwiesen wird, muss auch die Option "{0}" übergeben werden. - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core.sigdata wurde nicht neben "FSharp.Core" gefunden. Die Datei wurde in {0} erwartet. Erwägen Sie ein Upgrade auf eine aktuellere Version von "FSharp.Core", in der die Datei nicht mehr erforderlich ist. diff --git a/src/fsharp/xlf/FSComp.txt.es.xlf b/src/fsharp/xlf/FSComp.txt.es.xlf index 0a1069b1ad..54d70ff1ef 100644 --- a/src/fsharp/xlf/FSComp.txt.es.xlf +++ b/src/fsharp/xlf/FSComp.txt.es.xlf @@ -5322,11 +5322,6 @@ Los enlaces DLLImport deben ser miembros estáticos en definiciones de función o clase dentro de un módulo. - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Cuando se hace referencia de forma explícita a mscorlib.dll o FSharp.Core.dll, debe pasarse también la opción {0}. - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. No se encontró FSharp.Core.sigdata junto con FSharp.Core. Archivo esperado en {0}. Considere la posibilidad de actualizar a una versión más reciente de FSharp.Core en la que ya no se requiere el archivo. diff --git a/src/fsharp/xlf/FSComp.txt.fr.xlf b/src/fsharp/xlf/FSComp.txt.fr.xlf index f19c1db7fd..0c95219908 100644 --- a/src/fsharp/xlf/FSComp.txt.fr.xlf +++ b/src/fsharp/xlf/FSComp.txt.fr.xlf @@ -5322,11 +5322,6 @@ Les liaisons DLLImport doivent être des membres statiques dans une classe ou des définitions de fonction dans un module - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Lorsque mscorlib.dll ou FSharp.Core.dll est explicitement référencé, l'option {0} doit également être passée - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core.sigdata introuvable avec FSharp.Core. Fichier attendu dans {0}. Effectuez une mise à niveau vers une version plus récente de FSharp.Core, où ce fichier n'est plus nécessaire. diff --git a/src/fsharp/xlf/FSComp.txt.it.xlf b/src/fsharp/xlf/FSComp.txt.it.xlf index ec424688dc..9c5dc0937a 100644 --- a/src/fsharp/xlf/FSComp.txt.it.xlf +++ b/src/fsharp/xlf/FSComp.txt.it.xlf @@ -5322,11 +5322,6 @@ I binding DLLImport devono essere membri statici in una classe o definizioni di funzione in un modulo - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Quando si fa riferimento in modo esplicito a mscorlib.dll o FSharp.Core.dll è necessario passare anche l'opzione {0} - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. Il file FSharp.Core.sigdata non è stato trovato con FSharp.Core. Il file deve trovarsi in {0}. Provare a eseguire l'aggiornamento a una versione più recente di FSharp.Core, in cui questo file non è più obbligatorio. diff --git a/src/fsharp/xlf/FSComp.txt.ja.xlf b/src/fsharp/xlf/FSComp.txt.ja.xlf index 6b78b55ecc..c79daf99e1 100644 --- a/src/fsharp/xlf/FSComp.txt.ja.xlf +++ b/src/fsharp/xlf/FSComp.txt.ja.xlf @@ -5322,11 +5322,6 @@ DLLImport 束縛はモジュール内のクラスまたは関数定義の静的メンバーであることが必要です - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll または FSharp.Core.dll が明示的に参照される場合は、{0} オプションも渡す必要があります - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core と同じ場所に FSharp.Core.sigdata が見つかりません。ファイルは {0} にある必要があります。このファイルを必要としない、より新しいバージョンの FSharp.Core にアップグレードすることをご検討ください。 diff --git a/src/fsharp/xlf/FSComp.txt.ko.xlf b/src/fsharp/xlf/FSComp.txt.ko.xlf index c6643da5ec..9b509f10fd 100644 --- a/src/fsharp/xlf/FSComp.txt.ko.xlf +++ b/src/fsharp/xlf/FSComp.txt.ko.xlf @@ -5322,11 +5322,6 @@ DLLImport 바인딩은 모듈의 클래스 또는 함수 정의에서 정적 멤버여야 합니다. - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll 또는 FSharp.Core.dll이 명시적으로 참조될 경우 {0} 옵션도 전달해야 합니다. - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core에서 FSharp.Core.sigdata를 찾을 수 없습니다. 파일이 {0}에 있어야 합니다. 이 파일이 더 이상 필요하지 않은 최신 버전의 FSharp.Core로의 업그레이드를 고려해 보세요. diff --git a/src/fsharp/xlf/FSComp.txt.pl.xlf b/src/fsharp/xlf/FSComp.txt.pl.xlf index 8dcbcc291b..56c58894e2 100644 --- a/src/fsharp/xlf/FSComp.txt.pl.xlf +++ b/src/fsharp/xlf/FSComp.txt.pl.xlf @@ -5322,11 +5322,6 @@ Powiązania DLLImport muszą być statycznymi elementami członkowskimi w definicjach klas lub funkcji w module - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - W przypadku jawnego odwołania do pliku mscorlib.dll lub pliku FSharp.Core.dll musi również zostać przekazana opcja {0} - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. Nie znaleziono zasobu FSharp.Core.sigdata z plikiem FSharp.Core. Plik oczekiwany w {0}. Rozważ uaktualnienie do nowszej wersji pliku FSharp.Core, w której ten plik nie jest już wymagany. diff --git a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf index 717ad3dd6d..7ff47eff44 100644 --- a/src/fsharp/xlf/FSComp.txt.pt-BR.xlf +++ b/src/fsharp/xlf/FSComp.txt.pt-BR.xlf @@ -5322,11 +5322,6 @@ As associações DLLImport devem ser membros estáticos em uma classe ou definições de função em um módulo - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - Enquanto mscorlib.dll ou FSharp.Core.dll é explicitamente referenciado, a opção {0} também deve ser passada - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core.sigdata não encontrado junto com FSharp.Core. Arquivo esperado em {0}. Considere atualizar para uma versão mais recente do FSharp.Corem, na qual esse arquivo não é mais necessário. diff --git a/src/fsharp/xlf/FSComp.txt.ru.xlf b/src/fsharp/xlf/FSComp.txt.ru.xlf index e1aa38d356..fa2acf5942 100644 --- a/src/fsharp/xlf/FSComp.txt.ru.xlf +++ b/src/fsharp/xlf/FSComp.txt.ru.xlf @@ -5322,11 +5322,6 @@ Привязки DLLImport должны быть статическими элементами в определениях класса или функции в модуле - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - При явной ссылке на mscorlib.dll или FSharp.Core.dll также должен передаваться параметр {0} - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. Ресурс FSharp.Core.sigdata не найден вместе с FSharp.Core. Файл ожидался в {0}. Рекомендуется обновление до более новой версии FSharp.Core, где этот файл не требуется. diff --git a/src/fsharp/xlf/FSComp.txt.tr.xlf b/src/fsharp/xlf/FSComp.txt.tr.xlf index ec02c91549..f701970ff2 100644 --- a/src/fsharp/xlf/FSComp.txt.tr.xlf +++ b/src/fsharp/xlf/FSComp.txt.tr.xlf @@ -5322,11 +5322,6 @@ DLLImport bağlamaları bir sınıf içinde statik üyeler veya bir modül içinde işlev tanımları olmalıdır - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - mscorlib.dll veya FSharp.Core.dll dosyalarına açık olarak başvurulduğunda {0} seçeneği de geçirilmelidir - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. FSharp.Core.sigdata, FSharp.Core ile birlikte bulunamadı. Dosyanın {0} içinde olması bekleniyordu. Bu dosyayı gerektirmeyen daha yeni bir FSharp.Core sürümüne yükseltmeniz önerilir. diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf index 99448a0a6a..184b48a968 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hans.xlf @@ -5322,11 +5322,6 @@ DLLImport 绑定必须是类中的静态成员或模块中的函数定义 - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - 当显式引用 mscorlib.dll 或 FSharp.Core.dll 时,同时也必须传递 {0} 选项 - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. 未能在 FSharp.Core 旁找到 FSharp.Core.sigdata。文件应在 {0} 中。请考虑升级到更新版本的 FSharp.Core,该版本不再需要此文件。 diff --git a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf index 0eabef7607..5f379b01d5 100644 --- a/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/fsharp/xlf/FSComp.txt.zh-Hant.xlf @@ -5322,11 +5322,6 @@ DLLImport 繫結必須是類別中的靜態成員或模組中的函式定義 - - When mscorlib.dll is explicitly referenced the {0} option must also be passed - 如果明確參考了 mscorlib.dll 或 FSharp.Core.dll,就必須同時傳遞 {0} 選項 - - FSharp.Core.sigdata not found alongside FSharp.Core. File expected in {0}. Consider upgrading to a more recent version of FSharp.Core, where this file is no longer be required. 找不到與 FSharp.Core 並存的 FSharp.Core.sigdata。檔案應位於 {0}。請考慮升級至最新版的 FSharp.Core,其中不再需要此檔案。 From 7e7d61b4b5060b6fa57d40664fedd6c7d7910e98 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 26 Sep 2019 13:24:21 -0700 Subject: [PATCH 084/146] add build telemetry for Linux/MacOS builds --- eng/build.sh | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/eng/build.sh b/eng/build.sh index cda4795f87..81363af5db 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -178,7 +178,7 @@ function TestUsingNUnit() { args="test \"$testproject\" --no-restore --no-build -c $configuration -f $targetframework --test-adapter-path . --logger \"nunit;LogFilePath=$testlogpath\"" "$DOTNET_INSTALL_DIR/dotnet" $args || { local exit_code=$? - echo "dotnet test failed (exit code '$exit_code')." >&2 + Write-PipelineTelemetryError -category 'Test' "dotnet test failed for $testproject:$targetframework (exit code $exit_code)." ExitWithExitCode $exit_code } } @@ -228,7 +228,11 @@ function BuildSolution { MSBuild "$repo_root/src/buildtools/buildtools.proj" \ /restore \ /p:Configuration=$bootstrap_config \ - /t:Publish + /t:Publish || { + local exit_code=$? + Write-PipelineTelemetryError -category 'Build' "Error building buildtools (exit code '$exit_code')." + ExitWithExitCode $exit_code + } mkdir -p "$bootstrap_dir" cp -pr $artifacts_dir/bin/fslex/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fslex @@ -238,7 +242,11 @@ function BuildSolution { MSBuild "$repo_root/proto.proj" \ /restore \ /p:Configuration=$bootstrap_config \ - /t:Publish + /t:Publish || { + local exit_code=$? + Write-PipelineTelemetryError -category 'Build' "Error building bootstrap compiler (exit code '$exit_code')." + ExitWithExitCode $exit_code + } cp -pr $artifacts_dir/bin/fsc/$bootstrap_config/netcoreapp2.1/publish $bootstrap_dir/fsc fi @@ -259,7 +267,11 @@ function BuildSolution { /p:ContinuousIntegrationBuild=$ci \ /p:QuietRestore=$quiet_restore \ /p:QuietRestoreBinaryLog="$binary_log" \ - $properties + $properties || { + local exit_code=$? + Write-PipelineTelemetryError -category 'Build' "Error building solution (exit code '$exit_code')." + ExitWithExitCode $exit_code + } } InitializeDotNetCli $restore From 8121dd5cd6881836d48a75ecb2133fc8f2af43f1 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 27 Sep 2019 09:35:22 -0700 Subject: [PATCH 085/146] add workspace and diagnostics to lsp (#7006) --- ...rp.Compiler.LanguageServer.DesignTime.proj | 49 +++++ ...Compiler.LanguageServer.DesignTime.targets | 52 +++++ .../FSharp.Compiler.LanguageServer.fsproj | 9 + .../LspExternalAccess.fs | 12 +- .../LspTypes.fs | 9 +- .../FSharp.Compiler.LanguageServer/Methods.fs | 13 +- .../FSharp.Compiler.LanguageServer/Server.fs | 8 +- .../FSharp.Compiler.LanguageServer/State.fs | 207 ++++++++++++++++++ .../TextDocument.fs | 59 ++++- .../DiagnosticsTests.fs | 154 +++++++++++++ ...p.Compiler.LanguageServer.UnitTests.fsproj | 4 + .../MiscTests.fs | 43 ++++ .../ProtocolTests.fs | 18 +- .../TemporaryDirectory.fs | 20 ++ .../TestClient.fs | 121 ++++++++++ .../Diagnostics/DocumentDiagnosticAnalyzer.fs | 13 +- .../LanguageService/FSharpLanguageClient.fs | 8 +- .../FSharp.Editor/Options/EditorOptions.fs | 12 +- .../AdvancedOptionsControl.xaml | 8 +- .../FSharp.UIResources/Strings.Designer.cs | 9 + .../src/FSharp.UIResources/Strings.resx | 3 + .../src/FSharp.UIResources/xlf/Strings.cs.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.de.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.es.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.fr.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.it.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.ja.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.ko.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.pl.xlf | 5 + .../FSharp.UIResources/xlf/Strings.pt-BR.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.ru.xlf | 5 + .../src/FSharp.UIResources/xlf/Strings.tr.xlf | 5 + .../xlf/Strings.zh-Hans.xlf | 5 + .../xlf/Strings.zh-Hant.xlf | 5 + 34 files changed, 855 insertions(+), 41 deletions(-) create mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj create mode 100644 src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets create mode 100644 tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs create mode 100644 tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs create mode 100644 tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs create mode 100644 tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj new file mode 100644 index 0000000000..d02ae419bc --- /dev/null +++ b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.proj @@ -0,0 +1,49 @@ + + + + + + + $(MSBuildThisFileDirectory)FSharp.Compiler.LanguageServer.DesignTime.targets + + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets new file mode 100644 index 0000000000..ea8f3e2866 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.DesignTime.targets @@ -0,0 +1,52 @@ + + + + + true + false + true + true + false + false + false + true + false + true + false + + + + + + + _ComputeTargetFrameworkItems + _PopulateTargetFrameworks + + + + + <_TargetFramework Include="$(TargetFramework)" /> + + + + + + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj index fd6e517e54..0bb0899140 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj +++ b/src/fsharp/FSharp.Compiler.LanguageServer/FSharp.Compiler.LanguageServer.fsproj @@ -23,6 +23,15 @@ + + + + + + + + + diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs index e6fa760d1c..48e4b0b405 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/LspExternalAccess.fs @@ -9,10 +9,18 @@ module FunctionNames = [] let OptionsSet = "options/set" + [] + let TextDocumentPublishDiagnostics = "textDocument/publishDiagnostics" + type Options = - { usePreviewTextHover: bool } + { usePreviewTextHover: bool + usePreviewDiagnostics: bool } static member Default() = - { usePreviewTextHover = false } + { usePreviewTextHover = false + usePreviewDiagnostics = false } + static member AllOn() = + { usePreviewTextHover = true + usePreviewDiagnostics = true } module Extensions = type JsonRpc with diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs b/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs index 97479eef26..264e526fcd 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/LspTypes.fs @@ -5,8 +5,9 @@ namespace FSharp.Compiler.LanguageServer open Newtonsoft.Json.Linq open Newtonsoft.Json -// Interfaces as defined at https://microsoft.github.io/language-server-protocol/specification. The properties on -// these types are camlCased to match the underlying JSON properties to avoid attributes on every field: +// Interfaces as defined at https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/. +// The properties on these types are camlCased to match the underlying JSON properties to avoid attributes on every +// field: // [] /// Represents a zero-based line and column of a text document. @@ -32,7 +33,7 @@ type Diagnostic = { range: Range severity: int option code: string - source: string option // "F#" + source: string option message: string relatedInformation: DiagnosticRelatedInformation[] option } static member Error = 1 @@ -46,7 +47,7 @@ type PublishDiagnosticsParams = type ClientCapabilities = { workspace: JToken option // TODO: WorkspaceClientCapabilities - textDocument: JToken option // TODO: TextDocumentCapabilities + textDocument: JToken option // TODO: TextDocumentClientCapabilities, publishDiagnostics: { relatedInformation: bool option } experimental: JToken option supportsVisualStudioExtensions: bool option } diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs index d1e614cb29..453b7f8228 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/Methods.fs @@ -8,8 +8,10 @@ open System.Threading open Newtonsoft.Json.Linq open StreamJsonRpc -// https://microsoft.github.io/language-server-protocol/specification -type Methods(state: State) = +// https://microsoft.github.io/language-server-protocol/specifications/specification-3-14/ +type Methods() = + + let state = State() /// Helper to run Async<'T> with a CancellationToken. let runAsync (cancellationToken: CancellationToken) (computation: Async<'T>) = Async.StartAsTask(computation, cancellationToken=cancellationToken) @@ -29,8 +31,10 @@ type Methods(state: State) = [] initializationOptions: JToken, capabilities: ClientCapabilities, [] trace: string, - [] workspaceFolders: WorkspaceFolder[] + [] workspaceFolders: WorkspaceFolder[], + [] cancellationToken: CancellationToken ) = + state.Initialize rootPath rootUri (fun projectOptions -> TextDocument.PublishDiagnostics(state, projectOptions) |> Async.Start) { InitializeResult.capabilities = ServerCapabilities.DefaultCapabilities() } [] @@ -63,5 +67,6 @@ type Methods(state: State) = ( options: Options ) = - sprintf "got options %A" options |> Console.Error.WriteLine + eprintfn "got options %A" options state.Options <- options + state.InvalidateAllProjects() diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs b/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs index 071ad6b226..28d5e49a58 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/Server.fs @@ -12,17 +12,17 @@ type Server(sendingStream: Stream, receivingStream: Stream) = let converter = JsonOptionConverter() // special handler to convert between `Option<'T>` and `obj/null`. do formatter.JsonSerializer.Converters.Add(converter) let handler = new HeaderDelimitedMessageHandler(sendingStream, receivingStream, formatter) - let state = State() - let methods = Methods(state) + let methods = Methods() let rpc = new JsonRpc(handler, methods) + do methods.State.JsonRpc <- Some rpc member __.StartListening() = rpc.StartListening() member __.WaitForExitAsync() = async { - do! Async.AwaitEvent (state.Shutdown) - do! Async.AwaitEvent (state.Exit) + do! Async.AwaitEvent (methods.State.Shutdown) + do! Async.AwaitEvent (methods.State.Exit) } interface IDisposable with diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs b/src/fsharp/FSharp.Compiler.LanguageServer/State.fs index 5ca2d3f845..0812bb9a7f 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/State.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/State.fs @@ -2,11 +2,209 @@ namespace FSharp.Compiler.LanguageServer +open System +open System.Collections.Concurrent +open System.Collections.Generic +open System.Diagnostics +open System.IO +open System.Text.RegularExpressions +open FSharp.Compiler.SourceCodeServices +open StreamJsonRpc + +module internal Solution = + // easy unit testing + let getProjectPaths (solutionContent: string) (solutionDir: string) = + // This looks scary, but is much more lightweight than carrying along MSBuild just to have it parse the solution file. + // + // A valid line in .sln looks like: + // Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "ConsoleApp2", "ConsoleApp2\ConsoleApp2.fsproj", "{60A4BE67-7E03-4200-AD38-B0E5E8E049C1}" + // and we're hoping to extract this: ------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + // + // therefore: + // ^Project text 'Project' at the start of the line + // .* any number of characters + // \"" double quote character (it's doubled up to escape from the raw string literal here) + // ( start of capture group + // [^\""] not a quote + // * many of those + // \.fsproj literal string ".fsproj" + // ) end of capture group + // \"" double quote + let pattern = Regex(@"^Project.*\""([^\""]*\.fsproj)\""") + let lines = solutionContent.Split('\n') + let relativeProjects = + lines + |> Array.map pattern.Match + |> Array.filter (fun m -> m.Success) + |> Array.map (fun m -> m.Groups.[1].Value) + // .sln files by convention uses backslashes, which might not be appropriate at runtime + |> Array.map (fun p -> p.Replace('\\', Path.DirectorySeparatorChar)) + let projects = + relativeProjects + |> Array.map (fun p -> if Path.IsPathRooted(p) then p else Path.Combine(solutionDir, p)) + projects + type State() = + let checker = FSharpChecker.Create() + + let sourceFileToProjectMap = ConcurrentDictionary() + let shutdownEvent = new Event<_>() let exitEvent = new Event<_>() let cancelEvent = new Event<_>() + let projectInvalidatedEvent = new Event<_>() + + let fileChanged (args: FileSystemEventArgs) = + match sourceFileToProjectMap.TryGetValue args.FullPath with + | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) + | false, _ -> () + let fileRenamed (args: RenamedEventArgs) = + match sourceFileToProjectMap.TryGetValue args.FullPath with + | true, projectOptions -> projectInvalidatedEvent.Trigger(projectOptions) + | false, _ -> () + let fileWatcher = new FileSystemWatcher() + do fileWatcher.IncludeSubdirectories <- true + do fileWatcher.Changed.Add(fileChanged) + do fileWatcher.Created.Add(fileChanged) + do fileWatcher.Deleted.Add(fileChanged) + do fileWatcher.Renamed.Add(fileRenamed) + + let execProcess (name: string) (args: string) = + let startInfo = ProcessStartInfo(name, args) + eprintfn "executing: %s %s" name args + startInfo.CreateNoWindow <- true + startInfo.RedirectStandardOutput <- true + startInfo.UseShellExecute <- false + let lines = List() + use proc = new Process() + proc.StartInfo <- startInfo + proc.OutputDataReceived.Add(fun args -> lines.Add(args.Data)) + proc.Start() |> ignore + proc.BeginOutputReadLine() + proc.WaitForExit() + lines.ToArray() + + let linesWithPrefixClean (prefix: string) (lines: string[]) = + lines + |> Array.filter (isNull >> not) + |> Array.map (fun line -> line.TrimStart(' ')) + |> Array.filter (fun line -> line.StartsWith(prefix)) + |> Array.map (fun line -> line.Substring(prefix.Length)) + + let getProjectOptions (rootDir: string) = + if isNull rootDir then [||] + else + fileWatcher.Path <- rootDir + fileWatcher.EnableRaisingEvents <- true + + /// This function is meant to be temporary. Until we figure out what a language server for a project + /// system looks like, we have to guess based on the files we find in the root. + let getProjectOptions (projectPath: string) = + let projectDir = Path.GetDirectoryName(projectPath) + let normalizePath (path: string) = + if Path.IsPathRooted(path) then path + else Path.Combine(projectDir, path) + + // To avoid essentially re-creating a copy of MSBuild alongside this tool, we instead fake a design- + // time build with this project. The output of building this helper project is text that's easily + // parsable. See the helper project for more information. + let reporterProject = Path.Combine(Path.GetDirectoryName(typeof.Assembly.Location), "FSharp.Compiler.LanguageServer.DesignTime.proj") + let detectedTfmSentinel = "DetectedTargetFramework=" + let detectedCommandLineArgSentinel = "DetectedCommandLineArg=" + + let execTfmReporter = + sprintf "build \"%s\" \"/p:ProjectFile=%s\"" reporterProject projectPath + |> execProcess "dotnet" + + let execArgReporter (tfm: string) = + sprintf "build \"%s\" \"/p:ProjectFile=%s\" \"/p:TargetFramework=%s\"" reporterProject projectPath tfm + |> execProcess "dotnet" + + // find the target frameworks + let targetFrameworks = + execTfmReporter + |> linesWithPrefixClean detectedTfmSentinel + + let getArgs (tfm: string) = + execArgReporter tfm + |> linesWithPrefixClean detectedCommandLineArgSentinel + + let tfmAndArgs = + targetFrameworks + |> Array.map (fun tfm -> tfm, getArgs tfm) + + let separateArgs (args: string[]) = + args + |> Array.partition (fun a -> a.StartsWith("-")) + |> (fun (options, files) -> + let normalizedFiles = files |> Array.map normalizePath + options, normalizedFiles) + + // TODO: for now we're only concerned with the first TFM + let _tfm, args = Array.head tfmAndArgs + + let otherOptions, sourceFiles = separateArgs args + + let projectOptions: FSharpProjectOptions = + { ProjectFileName = projectPath + ProjectId = None + SourceFiles = sourceFiles + OtherOptions = otherOptions + ReferencedProjects = [||] // TODO: populate from @(ProjectReference) + IsIncompleteTypeCheckEnvironment = false + UseScriptResolutionRules = false + LoadTime = DateTime.Now + UnresolvedReferences = None + OriginalLoadReferences = [] + ExtraProjectInfo = None + Stamp = None } + projectOptions + let topLevelProjects = Directory.GetFiles(rootDir, "*.fsproj") + let watchableProjectPaths = + match topLevelProjects with + | [||] -> + match Directory.GetFiles(rootDir, "*.sln") with + // TODO: what to do with multiple .sln or a combo of .sln/.fsproj? + | [| singleSolution |] -> + let content = File.ReadAllText(singleSolution) + let solutionDir = Path.GetDirectoryName(singleSolution) + Solution.getProjectPaths content solutionDir + | _ -> [||] + | _ -> topLevelProjects + let watchableProjectOptions = + watchableProjectPaths + |> Array.map getProjectOptions + + // associate source files with project options + let watchFile file projectOptions = + sourceFileToProjectMap.AddOrUpdate(file, projectOptions, fun _ _ -> projectOptions) + + for projectOptions in watchableProjectOptions do + // watch .fsproj + watchFile projectOptions.ProjectFileName projectOptions |> ignore + // TODO: watch .deps.json + for sourceFile in projectOptions.SourceFiles do + let sourceFileFullPath = + if Path.IsPathRooted(sourceFile) then sourceFile + else + let projectDir = Path.GetDirectoryName(projectOptions.ProjectFileName) + Path.Combine(projectDir, sourceFile) + watchFile sourceFileFullPath projectOptions |> ignore + + watchableProjectOptions + + member __.Checker = checker + + /// Initialize the LSP at the specified location. According to the spec, `rootUri` is to be preferred over `rootPath`. + member __.Initialize (rootPath: string) (rootUri: DocumentUri) (computeDiagnostics: FSharpProjectOptions -> unit) = + let rootDir = + if not (isNull rootUri) then Uri(rootUri).LocalPath + else rootPath + let projectOptions = getProjectOptions rootDir + projectInvalidatedEvent.Publish.Add computeDiagnostics // compute diagnostics on project invalidation + for projectOption in projectOptions do + computeDiagnostics projectOption // compute initial set of diagnostics [] member __.Shutdown = shutdownEvent.Publish @@ -17,10 +215,19 @@ type State() = [] member __.Cancel = cancelEvent.Publish + [] + member __.ProjectInvalidated = projectInvalidatedEvent.Publish + member __.DoShutdown() = shutdownEvent.Trigger() member __.DoExit() = exitEvent.Trigger() member __.DoCancel() = cancelEvent.Trigger() + member __.InvalidateAllProjects() = + for projectOptions in sourceFileToProjectMap.Values do + projectInvalidatedEvent.Trigger(projectOptions) + member val Options = Options.Default() with get, set + + member val JsonRpc: JsonRpc option = None with get, set diff --git a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs b/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs index 0c73796505..489b55ebce 100644 --- a/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs +++ b/src/fsharp/FSharp.Compiler.LanguageServer/TextDocument.fs @@ -2,13 +2,15 @@ namespace FSharp.Compiler.LanguageServer -open System +open System.Threading module TextDocument = + let mutable publishDiagnosticsCancellationTokenSource = new CancellationTokenSource() + let Hover (state: State) (textDocument: TextDocumentIdentifier) (position: Position) = async { - Console.Error.WriteLine("hover at " + position.line.ToString() + "," + position.character.ToString()) + eprintfn "hover at %d, %d" position.line position.character if not state.Options.usePreviewTextHover then return None else let startCol, endCol = @@ -21,10 +23,53 @@ module TextDocument = } } - let PublishDiagnostics(state: State) = + let PublishDiagnostics(state: State, projectOptions: FSharp.Compiler.SourceCodeServices.FSharpProjectOptions) = + // TODO: honor TextDocumentClientCapabilities.publishDiagnostics.relatedInformation + // cancel any existing request to publish diagnostics + publishDiagnosticsCancellationTokenSource.Cancel() + publishDiagnosticsCancellationTokenSource <- new CancellationTokenSource() async { - return { - PublishDiagnosticsParams.uri = "" - diagnostics = [||] - } + if not state.Options.usePreviewDiagnostics then return () + else + eprintfn "starting diagnostics computation" + match state.JsonRpc with + | None -> eprintfn "state.JsonRpc was null; should not be?" + | Some jsonRpc -> + let! results = state.Checker.ParseAndCheckProject projectOptions + let diagnostics = results.Errors + let diagnosticsPerFile = + diagnostics + |> Array.fold (fun state t -> + let existing = Map.tryFind t.FileName state |> Option.defaultValue [] + Map.add t.FileName (t :: existing) state) Map.empty + for sourceFile in projectOptions.SourceFiles do + let diagnostics = + Map.tryFind sourceFile diagnosticsPerFile + |> Option.defaultValue [] + |> List.map (fun d -> + // F# errors count lines starting at 1, but LSP starts at 0 + let range: Range = + { start = { line = d.StartLineAlternate - 1; character = d.StartColumn } + ``end`` = { line = d.EndLineAlternate - 1; character = d.EndColumn } } + let severity = + match d.Severity with + | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Warning -> Diagnostic.Warning + | FSharp.Compiler.SourceCodeServices.FSharpErrorSeverity.Error -> Diagnostic.Error + let res: Diagnostic = + { range = range + severity = Some severity + code = "FS" + d.ErrorNumber.ToString("0000") + source = Some d.FileName + message = d.Message + relatedInformation = None } + res) + |> List.toArray + let args: PublishDiagnosticsParams = + { uri = System.Uri(sourceFile).AbsoluteUri + diagnostics = diagnostics } + + // fire each notification separately + jsonRpc.NotifyAsync(TextDocumentPublishDiagnostics, args) |> Async.AwaitTask |> Async.Start } + |> (fun computation -> Async.StartAsTask(computation, cancellationToken=publishDiagnosticsCancellationTokenSource.Token)) + |> Async.AwaitTask diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs new file mode 100644 index 0000000000..aaadff258e --- /dev/null +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/DiagnosticsTests.fs @@ -0,0 +1,154 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.LanguageServer.UnitTests + +open System +open System.IO +open System.Linq +open System.Threading.Tasks +open FSharp.Compiler.LanguageServer +open Nerdbank.Streams +open NUnit.Framework + +[] +type DiagnosticsTests() = + + let createTestableProject (tfm: string) (sourceFiles: (string * string) list) = + let testDir = new TemporaryDirectory() + let directoryBuildText = "" + File.WriteAllText(Path.Combine(testDir.Directory, "Directory.Build.props"), directoryBuildText) + File.WriteAllText(Path.Combine(testDir.Directory, "Directory.Build.targets"), directoryBuildText) + for name, contents in sourceFiles do + File.WriteAllText(Path.Combine(testDir.Directory, name), contents) + let compileItems = + sourceFiles + |> List.map fst + |> List.map (sprintf " ") + |> List.fold (fun content line -> content + "\n" + line) "" + let replacements = + [ "{{COMPILE}}", compileItems + "{{TARGETFRAMEWORK}}", tfm ] + let projectTemplate = + @" + + + Library + {{TARGETFRAMEWORK}} + + +{{COMPILE}} + +" + let projectFile = + replacements + |> List.fold (fun (content: string) (find, replace) -> content.Replace(find, replace)) projectTemplate + File.WriteAllText(Path.Combine(testDir.Directory, "test.fsproj"), projectFile) + testDir + + let createRpcClient (tempDir: TemporaryDirectory) = + let clientStream, serverStream = FullDuplexStream.CreatePair().ToTuple() + let server = new Server(serverStream, serverStream) + server.StartListening() + let client = new TestClient(tempDir, clientStream, clientStream, server) + client + + let createClientTest (tfm: string) (sourceFiles: (string * string) list) = + let testDir = createTestableProject tfm sourceFiles + let client = createRpcClient testDir + client + + let getDiagnostics (content: string) = + async { + use client = createClientTest "netstandard2.0" [ "lib.fs", content ] + let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] + return diagnostics.["lib.fs"] + } + + [] + member __.``No diagnostics for correct code``() = + async { + let! diagnostics = getDiagnostics @" +namespace Test + +module Numbers = + let one: int = 1 +" + Assert.AreEqual(0, diagnostics.Length) + } |> Async.StartAsTask :> Task + + [] + member __.``Diagnostics for incorrect code``() = + async { + let! diagnostics = getDiagnostics @" +namespace Test + +module Numbers = + let one: int = false +" + let diag = diagnostics.Single() + Assert.AreEqual("FS0001", diag.code) + Assert.AreEqual(Some 1, diag.severity) + Assert.AreEqual(4, diag.range.start.line) + Assert.AreEqual(19, diag.range.start.character) + Assert.AreEqual(4, diag.range.``end``.line) + Assert.AreEqual(24, diag.range.``end``.character) + Assert.AreEqual("This expression was expected to have type\n 'int' \nbut here has type\n 'bool'", diag.message.Trim()) + Assert.IsTrue(diag.source.Value.EndsWith("lib.fs")) + } |> Async.StartAsTask :> Task + + [] + member __.``Diagnostics added for updated incorrect code``() = + async { + let correct = @" +namespace Test + +module Numbers = + let one: int = 1 +" + let incorrect = @" +namespace Test + +module Numbers = + let one: int = false +" + + // verify initial state + use client = createClientTest "netstandard2.0" [ "lib.fs", correct ] + let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] + Assert.AreEqual(0, diagnostics.["lib.fs"].Length) + + // touch file with incorrect data + let touch () = File.WriteAllText(Path.Combine(client.RootPath, "lib.fs"), incorrect) + let! diagnostics = client.WaitForDiagnostics touch ["lib.fs"] + let diag = diagnostics.["lib.fs"].Single() + Assert.AreEqual("FS0001", diag.code) + } |> Async.StartAsTask :> Task + + [] + member __.``Diagnostics removed for updated correct code``() = + async { + let incorrect = @" +namespace Test + +module Numbers = + let one: int = false +" + let correct = @" +namespace Test + +module Numbers = + let one: int = 1 +" + + // verify initial state + use client = createClientTest "netstandard2.0" [ "lib.fs", incorrect ] + let! diagnostics = client.WaitForDiagnosticsAsync client.Initialize ["lib.fs"] + let diag = diagnostics.["lib.fs"].Single() + Assert.AreEqual("FS0001", diag.code) + + // touch file with correct data + let touch () = File.WriteAllText(Path.Combine(client.RootPath, "lib.fs"), correct) + let! diagnostics = client.WaitForDiagnostics touch ["lib.fs"] + let libActualContents = File.ReadAllText(Path.Combine(client.RootPath, "lib.fs")) + Assert.AreEqual(0, diagnostics.["lib.fs"].Length, "Actual on-disk contents of lib.fs:\n" + libActualContents) + } |> Async.StartAsTask :> Task diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj b/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj index c457b9e563..4e061f5575 100644 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/FSharp.Compiler.LanguageServer.UnitTests.fsproj @@ -11,8 +11,12 @@ + + + + diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs new file mode 100644 index 0000000000..02104be2e6 --- /dev/null +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/MiscTests.fs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.LanguageServer.UnitTests + +open System.IO +open FSharp.Compiler.LanguageServer +open NUnit.Framework + +[] +type MiscTests() = + + [] + member __.``Find F# projects in a .sln file``() = + let slnContent = @" +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29201.188 +MinimumVisualStudioVersion = 10.0.40219.1 +Project(""{F2A71F9B-5D33-465A-A702-920D77279786}"") = ""ConsoleApp1"", ""ConsoleApp1\ConsoleApp1.fsproj"", ""{60A4BE67-7E03-4200-AD38-B0E5E8E049C1}"" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60A4BE67-7E03-4200-AD38-B0E5E8E049C1}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {80902CFC-54E6-4485-AC17-4516930C8B2B} + EndGlobalSection +EndGlobal +" + let testDir = @"C:\Dir\With\Solution" // don't care about the potentially improper directory separators here, it's really just a dumb string + let foundProjects = Solution.getProjectPaths slnContent testDir + let expected = Path.Combine(testDir, "ConsoleApp1", "ConsoleApp1.fsproj") // proper directory separator characters will be used at runtime + Assert.AreEqual([| expected |], foundProjects) diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs index 4d0a789b9c..e9de31049b 100644 --- a/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/ProtocolTests.fs @@ -31,21 +31,17 @@ type ProtocolTests() = client.StartListening() // initialize - let capabilities = - { ClientCapabilities.workspace = None + let capabilities: ClientCapabilities = + { workspace = None textDocument = None experimental = None supportsVisualStudioExtensions = None } let! result = - client.InvokeAsync( - "initialize", // method - 0, // processId - "rootPath", - "rootUri", - null, // initializationOptions - capabilities, // client capabilities - "none") // trace - |> Async.AwaitTask + client.InvokeWithParameterObjectAsync( + "initialize", + {| processId = Process.GetCurrentProcess().Id + capabilities = capabilities |} + ) |> Async.AwaitTask Assert.True(result.capabilities.hoverProvider) do! client.NotifyAsync("initialized") |> Async.AwaitTask diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs new file mode 100644 index 0000000000..ef3953d781 --- /dev/null +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/TemporaryDirectory.fs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.LanguageServer.UnitTests + +open System +open System.IO + +type TemporaryDirectory() = + + let directory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()) + do Directory.CreateDirectory(directory) |> ignore + + member __.Directory = directory + + interface IDisposable with + member __.Dispose() = + try + Directory.Delete(directory, true) + with + | _ -> () diff --git a/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs b/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs new file mode 100644 index 0000000000..0baaaf40eb --- /dev/null +++ b/tests/FSharp.Compiler.LanguageServer.UnitTests/TestClient.fs @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. + +namespace FSharp.Compiler.LanguageServer.UnitTests + +open System +open System.Collections.Generic +open System.Diagnostics +open System.IO +open System.Threading +open FSharp.Compiler.LanguageServer +open Newtonsoft.Json.Linq +open StreamJsonRpc + +type TestClient(tempDir: TemporaryDirectory, sendingStream: Stream, receivingStream: Stream, server: Server) = + + let rootPath = tempDir.Directory + let rootPath = if rootPath.EndsWith(Path.DirectorySeparatorChar.ToString()) then rootPath else rootPath + Path.DirectorySeparatorChar.ToString() + let diagnosticsEvent = Event<_>() + + let formatter = JsonMessageFormatter() + let converter = JsonOptionConverter() // special handler to convert between `Option<'T>` and `obj/null`. + do formatter.JsonSerializer.Converters.Add(converter) + let handler = new HeaderDelimitedMessageHandler(sendingStream, receivingStream, formatter) + let client = new JsonRpc(handler) + let handler (functionName: string) (args: JToken): JToken = + match functionName with + | TextDocumentPublishDiagnostics -> + let args = args.ToObject(formatter.JsonSerializer) + let fullPath = Uri(args.uri).LocalPath + let shortPath = if fullPath.StartsWith(rootPath) then fullPath.Substring(rootPath.Length) else fullPath + diagnosticsEvent.Trigger((shortPath, args.diagnostics)) + null + | _ -> null + let addHandler (name: string) = + client.AddLocalRpcMethod(name, new Func(handler name)) + do addHandler TextDocumentPublishDiagnostics + do client.StartListening() + + member __.RootPath = rootPath + + member __.Server = server + + [] + member __.PublishDiagnostics = diagnosticsEvent.Publish + + member __.Initialize () = + async { + do! client.NotifyWithParameterObjectAsync(OptionsSet, {| options = Options.AllOn() |}) |> Async.AwaitTask + let capabilities: ClientCapabilities = + { workspace = None + textDocument = None + experimental = None + supportsVisualStudioExtensions = None } + let! _result = + client.InvokeWithParameterObjectAsync( + "initialize", // method + {| processId = Process.GetCurrentProcess().Id + rootPath = rootPath + capabilities = capabilities |} + ) |> Async.AwaitTask + return () + } + + member this.WaitForDiagnostics (triggerAction: unit -> unit) (fileNames: string list) = + async { + // prepare file diagnostic triggers + let diagnosticTriggers = Dictionary() + fileNames |> List.iter (fun f -> diagnosticTriggers.[f] <- new ManualResetEvent(false)) + + // prepare callback handler + let diagnosticsMap = Dictionary() + let handler (fileName: string, diagnostics: Diagnostic[]) = + diagnosticsMap.[fileName] <- diagnostics + // auto-generated files (e.g., AssemblyInfo.fs) won't be in the trigger map + if diagnosticTriggers.ContainsKey(fileName) then + diagnosticTriggers.[fileName].Set() |> ignore + + // subscribe to the event + let wrappedHandler = new Handler(fun _sender args -> handler args) + this.PublishDiagnostics.AddHandler(wrappedHandler) + triggerAction () + + // wait for all triggers to hit + let! results = + diagnosticTriggers + |> Seq.map (fun entry -> + async { + let! result = Async.AwaitWaitHandle(entry.Value, millisecondsTimeout = int (TimeSpan.FromSeconds(10.0).TotalMilliseconds)) + return if result then None + else + let filePath = Path.Combine(rootPath, entry.Key) + let actualContents = File.ReadAllText(filePath) + Some <| sprintf "No diagnostics received for file '%s'. Contents:\n%s\n" entry.Key actualContents + }) + |> Async.Parallel + let results = results |> Array.choose (fun x -> x) + if results.Length > 0 then + let combinedErrors = String.Join("-----\n", results) + let allDiagnosticsEvents = + diagnosticsMap + |> Seq.map (fun entry -> + sprintf "File '%s' reported %d diagnostics." entry.Key entry.Value.Length) + |> (fun s -> String.Join("\n", s)) + failwith <| sprintf "Error waiting for diagnostics:\n%s\n-----\n%s" combinedErrors allDiagnosticsEvents + + // clean up event + this.PublishDiagnostics.RemoveHandler(wrappedHandler) + + // done + return diagnosticsMap + } + + member this.WaitForDiagnosticsAsync (triggerAction: unit -> Async) (fileNames: string list) = + this.WaitForDiagnostics (fun () -> triggerAction () |> Async.RunSynchronously) fileNames + + interface IDisposable with + member __.Dispose() = + try + (tempDir :> IDisposable).Dispose() + with + | _ -> () diff --git a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs index 273e0bad4b..0d92ce047b 100644 --- a/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs +++ b/vsintegration/src/FSharp.Editor/Diagnostics/DocumentDiagnosticAnalyzer.fs @@ -33,7 +33,10 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = let getProjectInfoManager(document: Document) = document.Project.Solution.Workspace.Services.GetService().FSharpProjectOptionsManager - + + let getSettings(document: Document) = + document.Project.Solution.Workspace.Services.GetService() + static let errorInfoEqualityComparer = { new IEqualityComparer with member __.Equals (x, y) = @@ -110,6 +113,10 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = interface IFSharpDocumentDiagnosticAnalyzer with member this.AnalyzeSyntaxAsync(document: Document, cancellationToken: CancellationToken): Task> = + // if using LSP, just bail early + let settings = getSettings document + if settings.Advanced.UsePreviewDiagnostics then Task.FromResult(ImmutableArray.Empty) + else let projectInfoManager = getProjectInfoManager document asyncMaybe { let! parsingOptions, projectOptions = projectInfoManager.TryGetOptionsForEditingDocumentOrProject(document, cancellationToken) @@ -123,6 +130,10 @@ type internal FSharpDocumentDiagnosticAnalyzer [] () = |> RoslynHelpers.StartAsyncAsTask cancellationToken member this.AnalyzeSemanticsAsync(document: Document, cancellationToken: CancellationToken): Task> = + // if using LSP, just bail early + let settings = getSettings document + if settings.Advanced.UsePreviewDiagnostics then Task.FromResult(ImmutableArray.Empty) + else let projectInfoManager = getProjectInfoManager document asyncMaybe { let! parsingOptions, _, projectOptions = projectInfoManager.TryGetOptionsForDocumentOrProject(document, cancellationToken) diff --git a/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs b/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs index 176ba2cc50..7a987d665f 100644 --- a/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs +++ b/vsintegration/src/FSharp.Editor/LanguageService/FSharpLanguageClient.fs @@ -34,7 +34,8 @@ type FSharpContentDefinition() = type internal FSharpLanguageClient [] ( - lspService: LspService + lspService: LspService, + settings: EditorOptions ) = inherit LanguageClient() override __.Name = "F# Language Service" @@ -63,4 +64,7 @@ type internal FSharpLanguageClient member __.CustomMessageTarget = null member __.MiddleLayer = null member __.AttachForCustomMessageAsync(rpc: JsonRpc) = - lspService.SetJsonRpc(rpc) |> Async.StartAsTask :> Task + async { + do! lspService.SetJsonRpc(rpc) + do! lspService.SetOptions(settings.Advanced.AsLspOptions()) + } |> Async.StartAsTask :> Task diff --git a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs index 3d71e2522c..af88f02d10 100644 --- a/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs +++ b/vsintegration/src/FSharp.Editor/Options/EditorOptions.fs @@ -93,11 +93,16 @@ type CodeLensOptions = type AdvancedOptions = { IsBlockStructureEnabled: bool IsOutliningEnabled: bool - UsePreviewTextHover: bool } + UsePreviewTextHover: bool + UsePreviewDiagnostics: bool } static member Default = { IsBlockStructureEnabled = true IsOutliningEnabled = true - UsePreviewTextHover = false } + UsePreviewTextHover = false + UsePreviewDiagnostics = false } + member this.AsLspOptions(): Options = + { usePreviewTextHover = this.UsePreviewTextHover + usePreviewDiagnostics = this.UsePreviewDiagnostics } [] type FormattingOptions = @@ -203,8 +208,7 @@ module internal OptionsUI = async { let lspService = this.GetService() let settings = this.GetService() - let options = - { Options.usePreviewTextHover = settings.Advanced.UsePreviewTextHover } + let options = settings.Advanced.AsLspOptions() do! lspService.SetOptions options } |> Async.Start diff --git a/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml b/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml index f8dd82f7d0..57ca75df75 100644 --- a/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml +++ b/vsintegration/src/FSharp.UIResources/AdvancedOptionsControl.xaml @@ -27,8 +27,12 @@ diff --git a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs index 661fffa569..c03ff05d77 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.Designer.cs +++ b/vsintegration/src/FSharp.UIResources/Strings.Designer.cs @@ -150,6 +150,15 @@ public class Strings { } } + /// + /// Looks up a localized string similar to Diagnostics. + /// + public static string Diagnostics { + get { + return ResourceManager.GetString("Diagnostics", resourceCulture); + } + } + /// /// Looks up a localized string similar to D_ot underline. /// diff --git a/vsintegration/src/FSharp.UIResources/Strings.resx b/vsintegration/src/FSharp.UIResources/Strings.resx index f4066cf346..037596b716 100644 --- a/vsintegration/src/FSharp.UIResources/Strings.resx +++ b/vsintegration/src/FSharp.UIResources/Strings.resx @@ -237,4 +237,7 @@ Text hover + + Diagnostics + \ No newline at end of file diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf index 973cdbd6e9..0d27949790 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.cs.xlf @@ -42,6 +42,11 @@ Seznamy dokončení + + Diagnostics + Diagnostics + + Performance Výkon diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf index c2defd7c40..fc1d36391d 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.de.xlf @@ -42,6 +42,11 @@ Vervollständigungslisten + + Diagnostics + Diagnostics + + Performance Leistung diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf index 2b0507a438..24649ecad9 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.es.xlf @@ -42,6 +42,11 @@ Listas de finalización + + Diagnostics + Diagnostics + + Performance Rendimiento diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf index 423d9c97c8..d0f77ba362 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.fr.xlf @@ -42,6 +42,11 @@ Listes de saisie semi-automatique + + Diagnostics + Diagnostics + + Performance Performances diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf index a577a1e315..a5555f9738 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.it.xlf @@ -42,6 +42,11 @@ Elenchi di completamento + + Diagnostics + Diagnostics + + Performance Prestazioni diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf index de08a58854..847e294368 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ja.xlf @@ -42,6 +42,11 @@ 入力候補一覧 + + Diagnostics + Diagnostics + + Performance パフォーマンス diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf index 0651ce96fa..55927919df 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ko.xlf @@ -42,6 +42,11 @@ 완성 목록 + + Diagnostics + Diagnostics + + Performance 성능 diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf index 1c6085f856..db4a139485 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pl.xlf @@ -42,6 +42,11 @@ Listy uzupełniania + + Diagnostics + Diagnostics + + Performance Wydajność diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf index 2fca2b08f6..5385f6147d 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.pt-BR.xlf @@ -42,6 +42,11 @@ Listas de Conclusão + + Diagnostics + Diagnostics + + Performance Desempenho diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf index de85346435..ba6871df2e 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.ru.xlf @@ -42,6 +42,11 @@ Списки завершения + + Diagnostics + Diagnostics + + Performance Производительность diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf index dd44a1a1b4..9caf1fa8b9 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.tr.xlf @@ -42,6 +42,11 @@ Tamamlama Listeleri + + Diagnostics + Diagnostics + + Performance Performans diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf index ba5c37bf74..cff797b883 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hans.xlf @@ -42,6 +42,11 @@ 完成列表 + + Diagnostics + Diagnostics + + Performance 性能 diff --git a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf index db714fc7bc..a3267c876f 100644 --- a/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf +++ b/vsintegration/src/FSharp.UIResources/xlf/Strings.zh-Hant.xlf @@ -42,6 +42,11 @@ 完成清單 + + Diagnostics + Diagnostics + + Performance 效能 From 4c114077ebc5e57e346c25d9e169c4aaca9e4cb7 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 27 Sep 2019 21:40:37 +0300 Subject: [PATCH 086/146] Less subsequent filtering in completion (#7650) --- src/fsharp/service/FSharpCheckerResults.fs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index 6b493ca332..d17b56c085 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -717,8 +717,9 @@ type internal TypeCheckInfo | None | Some [] -> let globalItems = allSymbols() - |> List.filter (fun x -> not x.Symbol.IsExplicitlySuppressed) - |> List.filter (fun x -> + |> List.filter (fun x -> + not x.Symbol.IsExplicitlySuppressed && + match x.Symbol with | :? FSharpMemberOrFunctionOrValue as m when m.IsConstructor && filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) From f4c38f01b9f7fb7affefe1fdef0c7bd661aacbe5 Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Fri, 27 Sep 2019 20:41:19 +0200 Subject: [PATCH 087/146] Fix typo: abilty -> ability (#7647) --- tests/fsharpqa/Source/Misc/StaticMethodValueTypeMain.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharpqa/Source/Misc/StaticMethodValueTypeMain.fs b/tests/fsharpqa/Source/Misc/StaticMethodValueTypeMain.fs index 727dbd68c8..74dec356ff 100644 --- a/tests/fsharpqa/Source/Misc/StaticMethodValueTypeMain.fs +++ b/tests/fsharpqa/Source/Misc/StaticMethodValueTypeMain.fs @@ -1,7 +1,7 @@ // #Regression #Misc #light -// Verify abilty to call a static method on a generic type +// Verify ability to call a static method on a generic type // defined in another assembly. (FSB 1.0, 1529) let _ = StructType.StaticMethod() From dfbfeecf9edbde22989c15f0a724490c9953aa3e Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 27 Sep 2019 21:51:29 +0300 Subject: [PATCH 088/146] Make ILPreTypeDef interface (#7649) --- src/absil/il.fs | 45 +++++++++++++++++++++++++------------------- src/absil/il.fsi | 14 +++++++++----- src/fsharp/import.fs | 6 +++--- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/absil/il.fs b/src/absil/il.fs index ce513a5af0..51b75e55fb 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -2133,26 +2133,33 @@ and [] ILTypeDefs(f : unit -> ILPreTypeDef[]) = let ns, n = splitILTypeName nm dict.Value.[(ns, n)].GetTypeDef() + +and [] ILPreTypeDef = + abstract Namespace: string list + abstract Name: string + abstract GetTypeDef: unit -> ILTypeDef + + /// This is a memory-critical class. Very many of these objects get allocated and held to represent the contents of .NET assemblies. -and [] ILPreTypeDef(nameSpace: string list, name: string, metadataIndex: int32, storage: ILTypeDefStored) = +and [] ILPreTypeDefImpl(nameSpace: string list, name: string, metadataIndex: int32, storage: ILTypeDefStored) = let mutable store : ILTypeDef = Unchecked.defaultof<_> - member __.Namespace = nameSpace - member __.Name = name - member __.MetadataIndex = metadataIndex + interface ILPreTypeDef with + member __.Namespace = nameSpace + member __.Name = name - member x.GetTypeDef() = - match box store with - | null -> - match storage with - | ILTypeDefStored.Given td -> - store <- td - td - | ILTypeDefStored.Computed f -> - LazyInitializer.EnsureInitialized(&store, Func<_>(fun () -> f())) - | ILTypeDefStored.Reader f -> - LazyInitializer.EnsureInitialized(&store, Func<_>(fun () -> f x.MetadataIndex)) - | _ -> store + member x.GetTypeDef() = + match box store with + | null -> + match storage with + | ILTypeDefStored.Given td -> + store <- td + td + | ILTypeDefStored.Computed f -> + LazyInitializer.EnsureInitialized(&store, Func<_>(fun () -> f())) + | ILTypeDefStored.Reader f -> + LazyInitializer.EnsureInitialized(&store, Func<_>(fun () -> f metadataIndex)) + | _ -> store and ILTypeDefStored = | Given of ILTypeDef @@ -2491,11 +2498,11 @@ let mkRefForNestedILTypeDef scope (enc: ILTypeDef list, td: ILTypeDef) = let mkILPreTypeDef (td: ILTypeDef) = let ns, n = splitILTypeName td.Name - ILPreTypeDef (ns, n, NoMetadataIdx, ILTypeDefStored.Given td) + ILPreTypeDefImpl (ns, n, NoMetadataIdx, ILTypeDefStored.Given td) :> ILPreTypeDef let mkILPreTypeDefComputed (ns, n, f) = - ILPreTypeDef (ns, n, NoMetadataIdx, ILTypeDefStored.Computed f) + ILPreTypeDefImpl (ns, n, NoMetadataIdx, ILTypeDefStored.Computed f) :> ILPreTypeDef let mkILPreTypeDefRead (ns, n, idx, f) = - ILPreTypeDef (ns, n, idx, f) + ILPreTypeDefImpl (ns, n, idx, f) :> ILPreTypeDef let addILTypeDef td (tdefs: ILTypeDefs) = ILTypeDefs (fun () -> [| yield mkILPreTypeDef td; yield! tdefs.AsArrayOfPreTypeDefs |]) diff --git a/src/absil/il.fsi b/src/absil/il.fsi index 87fd66932a..e981e8e8b5 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -1322,12 +1322,16 @@ and [] /// The information is enough to perform name resolution for the F# compiler, probe attributes /// for ExtensionAttribute etc. This is key to the on-demand exploration of .NET metadata. /// This information has to be "Goldilocks" - not too much, not too little, just right. -and [] ILPreTypeDef = - member Namespace: string list - member Name: string - member MetadataIndex: int32 +and [] ILPreTypeDef = + abstract Namespace: string list + abstract Name: string /// Realise the actual full typedef - member GetTypeDef : unit -> ILTypeDef + abstract GetTypeDef : unit -> ILTypeDef + + +and [] ILPreTypeDefImpl = + interface ILPreTypeDef + and [] ILTypeDefStored diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index dbe4296e0f..8fdd28f3b5 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -478,7 +478,7 @@ and ImportILTypeDefList amap m (cpath: CompilationPath) enc items = let modty = lazy (ImportILTypeDefList amap m (cpath.NestedCompPath n Namespace) enc tgs) NewModuleOrNamespace (Some cpath) taccessPublic (mkSynId m n) XmlDoc.Empty [] (MaybeLazy.Lazy modty)) (fun (n, info: Lazy<_>) -> - let (scoref2, _, lazyTypeDef: ILPreTypeDef) = info.Force() + let (scoref2, lazyTypeDef: ILPreTypeDef) = info.Force() ImportILTypeDef amap m scoref2 cpath enc n (lazyTypeDef.GetTypeDef())) let kind = match enc with [] -> Namespace | _ -> ModuleOrType @@ -489,7 +489,7 @@ and ImportILTypeDefList amap m (cpath: CompilationPath) enc items = and ImportILTypeDefs amap m scoref cpath enc (tdefs: ILTypeDefs) = // We be very careful not to force a read of the type defs here tdefs.AsArrayOfPreTypeDefs - |> Array.map (fun pre -> (pre.Namespace, (pre.Name, notlazy(scoref, pre.MetadataIndex, pre)))) + |> Array.map (fun pre -> (pre.Namespace, (pre.Name, notlazy(scoref, pre)))) |> Array.toList |> ImportILTypeDefList amap m cpath enc @@ -519,7 +519,7 @@ let ImportILAssemblyExportedType amap m auxModLoader (scoref: ILScopeRef) (expor | None -> error(Error(FSComp.SR.impReferenceToDllRequiredByAssembly(exportedType.ScopeRef.QualifiedName, scoref.QualifiedName, exportedType.Name), m)) | Some preTypeDef -> - scoref, -1, preTypeDef) + scoref, preTypeDef) [ ImportILTypeDefList amap m (CompPath(scoref, [])) [] [(ns, (n, info))] ] From 5a813b5c2e07e407e986631c7e78c80a6aa827ca Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 27 Sep 2019 21:51:48 +0300 Subject: [PATCH 089/146] Add FSharpDisplayContext.WithShortTypeNames(bool) (#7651) --- src/fsharp/symbols/Symbols.fs | 4 ++++ src/fsharp/symbols/Symbols.fsi | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index f6b93d4e32..fcfe2c085f 100644 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -188,8 +188,12 @@ module Impl = type FSharpDisplayContext(denv: TcGlobals -> DisplayEnv) = member x.Contents g = denv g + static member Empty = FSharpDisplayContext(fun g -> DisplayEnv.Empty g) + member x.WithShortTypeNames shortNames = + FSharpDisplayContext(fun g -> { denv g with shortTypeNames = shortNames }) + // delay the realization of 'item' in case it is unresolved type FSharpSymbol(cenv: SymbolEnv, item: (unit -> Item), access: (FSharpSymbol -> CcuThunk -> AccessorDomain -> bool)) = diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index c8580fedf3..60c3cecedd 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -50,6 +50,8 @@ type [] public FSharpDisplayContext = internal new : denv: (TcGlobals -> Tastops.DisplayEnv) -> FSharpDisplayContext static member Empty: FSharpDisplayContext + member WithShortTypeNames: bool -> FSharpDisplayContext + /// Represents a symbol in checked F# source code or a compiled .NET component. /// /// The subtype of the symbol may reveal further information and can be one of FSharpEntity, FSharpUnionCase From b2c8d6668c836965cf5f8a63dcc9bdd6a8ede390 Mon Sep 17 00:00:00 2001 From: Fraser Waters Date: Fri, 27 Sep 2019 20:09:12 +0100 Subject: [PATCH 090/146] Change cancellation test to not depend on how AwaitTask works (#7467) * Change cancellation test to not depend on how AwaitTask works This test is to check that when an Async is started as a Task (via StartAsTask) that when cancelled the Task isn't immediately marked as cancelled but instead waits for the underlying Async to finish (normally via cancellation) * Add test that AwaitTask ignore async cancellation --- .../Microsoft.FSharp.Control/AsyncType.fs | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index c0797038f5..79a179bea1 100644 --- a/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/tests/FSharp.Core.UnitTests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -145,10 +145,12 @@ type AsyncType() = [] member this.StartAsTaskCancellation () = let cts = new CancellationTokenSource() - let tcs = TaskCompletionSource() + let mutable spinloop = true + let doSpinloop () = while spinloop do () let a = async { cts.CancelAfter (100) - do! tcs.Task |> Async.AwaitTask } + doSpinloop() + } #if !NET46 let t : Task = #else @@ -156,13 +158,13 @@ type AsyncType() = #endif Async.StartAsTask(a, cancellationToken = cts.Token) - // Should not finish + // Should not finish, we don't eagerly mark the task done just because it's been signaled to cancel. try let result = t.Wait(300) Assert.IsFalse (result) - with :? AggregateException -> Assert.Fail "Task should not finish, jet" + with :? AggregateException -> Assert.Fail "Task should not finish, yet" - tcs.SetCanceled() + spinloop <- false try this.WaitASec t @@ -172,6 +174,31 @@ type AsyncType() = | _ -> reraise() Assert.IsTrue (t.IsCompleted, "Task is not completed") + [] + member this.``AwaitTask ignores Async cancellation`` () = + let cts = new CancellationTokenSource() + let tcs = new TaskCompletionSource() + let innerTcs = new TaskCompletionSource() + let a = innerTcs.Task |> Async.AwaitTask + + Async.StartWithContinuations(a, tcs.SetResult, tcs.SetException, ignore >> tcs.SetCanceled, cts.Token) + + cts.CancelAfter(100) + try + let result = tcs.Task.Wait(300) + Assert.IsFalse (result) + with :? AggregateException -> Assert.Fail "Should not finish, yet" + + innerTcs.SetResult () + + try + this.WaitASec tcs.Task + with :? AggregateException as a -> + match a.InnerException with + | :? TaskCanceledException -> () + | _ -> reraise() + Assert.IsTrue (tcs.Task.IsCompleted, "Task is not completed") + [] member this.StartTask () = let s = "Hello tasks!" From fd440a9ffa37cd5472940239c32fba59cfaef72c Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 27 Sep 2019 12:50:33 -0700 Subject: [PATCH 091/146] ensure localized menu name is used for 'F# Interactive' (#7652) --- .../Vsix/RegisterFsharpPackage.pkgdef | 2 +- .../FSharp.ProjectSystem.FSharp/.gitignore | 1 - .../ProjectSystem.fsproj | 19 ------------------- .../VSPackage.resx | 3 --- 4 files changed, 1 insertion(+), 24 deletions(-) delete mode 100644 vsintegration/src/FSharp.ProjectSystem.FSharp/.gitignore diff --git a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef index b0b49ad4ef..c4a9de29e2 100644 --- a/vsintegration/Vsix/RegisterFsharpPackage.pkgdef +++ b/vsintegration/Vsix/RegisterFsharpPackage.pkgdef @@ -60,7 +60,7 @@ "CompanyName"="Microsoft Corp." [$RootKey$\Menus] -"{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}"=", 1000_ctmenu, 1" +"{91a04a73-4f2c-4e7c-ad38-c1a68e7da05c}"=", Menus.ctmenu, 1" [$RootKey$\CLSID\{e1194663-db3c-49eb-8b45-276fcdc440ea}] "InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL" diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/.gitignore b/vsintegration/src/FSharp.ProjectSystem.FSharp/.gitignore deleted file mode 100644 index dca31eb19a..0000000000 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/.gitignore +++ /dev/null @@ -1 +0,0 @@ -ctofiles/ diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj index a161faab96..7779a1a3f0 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/ProjectSystem.fsproj @@ -124,23 +124,4 @@ - - - - - - - - - - - - - - <_GeneratedCTOFilesWithCulture Update="%(Identity)"> - %(ResourceName).%(Culture) - - - - diff --git a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx index 506f60a7e2..0e636602e5 100644 --- a/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx +++ b/vsintegration/src/FSharp.ProjectSystem.FSharp/VSPackage.resx @@ -220,9 +220,6 @@ Resources\FSharpAboutBox.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ctofiles\MenusAndCommands.cto;System.Byte[], mscorlib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - Resources\FSharpWindowsApplication.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a From b2f996bd439f4e2321cc496f4abd884adfa6cb25 Mon Sep 17 00:00:00 2001 From: Youssef Victor <31348972+Youssef1313@users.noreply.github.com> Date: Fri, 27 Sep 2019 21:59:52 +0200 Subject: [PATCH 092/146] typo: ahve -> have (#7648) --- vsintegration/src/FSharp.PatternMatcher/EditDistance.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vsintegration/src/FSharp.PatternMatcher/EditDistance.cs b/vsintegration/src/FSharp.PatternMatcher/EditDistance.cs index 9040649516..7cfde4a859 100644 --- a/vsintegration/src/FSharp.PatternMatcher/EditDistance.cs +++ b/vsintegration/src/FSharp.PatternMatcher/EditDistance.cs @@ -323,7 +323,7 @@ private static int GetEditDistanceWorker(ArraySlice source, ArraySlice Date: Fri, 27 Sep 2019 23:40:44 +0300 Subject: [PATCH 093/146] Remove unused opens --- .../ProjectCracker.fs | 3 -- .../ProjectCrackerTool.fs | 1 - src/absil/bytes.fs | 4 -- src/absil/il.fs | 1 - src/absil/ilbinary.fs | 3 -- src/absil/ildiag.fs | 1 - src/absil/ilmorph.fs | 3 -- src/absil/ilprint.fs | 4 -- src/absil/ilread.fs | 3 -- src/absil/ilreflect.fs | 1 - src/absil/ilsupp.fs | 4 -- src/absil/ilwrite.fs | 4 -- src/absil/ilwritepdb.fs | 2 - src/absil/ilx.fs | 3 -- src/absil/zset.fs | 2 - src/fsharp/CompileOps.fs | 1 - src/fsharp/CompilerGlobalState.fs | 1 - src/fsharp/DotNetFrameworkDependencies.fs | 1 - src/fsharp/ExtensionTyping.fs | 1 - src/fsharp/IlxGen.fs | 2 - src/fsharp/InfoReader.fs | 1 - src/fsharp/InternalCollections.fs | 1 - src/fsharp/LexFilter.fs | 2 - src/fsharp/LowerCallsAndSeqs.fs | 1 - src/fsharp/QuotationPickler.fs | 1 - src/fsharp/TastPickle.fs | 1 - src/fsharp/TypeRelations.fs | 1 - src/fsharp/UnicodeLexing.fs | 2 - src/fsharp/XmlAdapters.fs | 4 -- src/fsharp/ast.fs | 2 - src/fsharp/fsc.fs | 4 -- src/fsharp/fsi/fsi.fs | 10 ---- src/fsharp/import.fs | 1 - src/fsharp/layout.fs | 1 - src/fsharp/lexhelp.fs | 4 -- src/fsharp/lib.fs | 1 - src/fsharp/service/IncrementalBuild.fs | 2 - src/fsharp/service/ServiceAnalysis.fs | 1 - src/fsharp/service/ServiceAssemblyContent.fs | 2 - src/fsharp/service/ServiceDeclarationLists.fs | 1 - src/fsharp/service/ServiceUntypedParse.fs | 2 - src/fsharp/service/ServiceXmlDocParser.fs | 1 - src/fsharp/service/service.fs | 1 - src/fsharp/sr.fs | 8 ---- src/fsharp/symbols/SymbolHelpers.fs | 1 - src/fsharp/tainted.fs | 3 -- src/ilx/EraseClosures.fs | 5 -- src/ilx/EraseUnions.fs | 2 - src/ilx/ilxsettings.fs | 2 - src/utils/CompilerLocationUtils.fs | 1 - src/utils/EditDistance.fs | 1 - src/utils/HashMultiMap.fs | 1 - src/utils/TaggedCollections.fs | 4 -- src/utils/prim-parsing.fs | 2 - src/utils/sformat.fs | 6 --- tests/service/AssemblyReaderShim.fs | 1 - tests/service/CSharpProjectAnalysis.fs | 6 --- tests/service/Common.fs | 1 - tests/service/EditorTests.fs | 1 - tests/service/ExprTests.fs | 4 -- tests/service/FileSystemTests.fs | 2 - tests/service/InteractiveCheckerTests.fs | 1 - tests/service/MultiProjectAnalysisTests.fs | 15 ------ tests/service/PerfTests.fs | 4 -- tests/service/ProjectAnalysisTests.fs | 46 ------------------- tests/service/ProjectOptionsTests.fs | 1 - tests/service/TokenizerTests.fs | 5 -- 67 files changed, 215 deletions(-) diff --git a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs index d5be2c7565..3a096cb566 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCracker/ProjectCracker.fs @@ -2,13 +2,10 @@ #if !NETSTANDARD open System.Runtime.Serialization.Json -open System.Runtime -open System.Diagnostics #endif open System.Text open System.IO open System -open System.Xml module Utils = diff --git a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs index 7cf970f7a7..93a74cbb0e 100644 --- a/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs +++ b/fcs/FSharp.Compiler.Service.ProjectCrackerTool/ProjectCrackerTool.fs @@ -8,7 +8,6 @@ open Microsoft.Build.Utilities module internal ProjectCrackerTool = open System.Collections.Generic - open Microsoft.Build.Evaluation let runningOnMono = #if NETCOREAPP2_0 diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index a272b99a45..d488f7acc8 100644 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -3,11 +3,7 @@ /// Byte arrays namespace FSharp.Compiler.AbstractIL.Internal -open System.IO -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal module internal Bytes = let b0 n = (n &&& 0xFF) diff --git a/src/absil/il.fs b/src/absil/il.fs index 51b75e55fb..e30160d2fd 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -12,7 +12,6 @@ open System.IO open System.Collections open System.Collections.Generic open System.Collections.Concurrent -open System.Runtime.CompilerServices open System.Reflection open System.Text open System.Threading diff --git a/src/absil/ilbinary.fs b/src/absil/ilbinary.fs index 2b22b4cbab..eea2f06bfd 100644 --- a/src/absil/ilbinary.fs +++ b/src/absil/ilbinary.fs @@ -2,10 +2,7 @@ module internal FSharp.Compiler.AbstractIL.Internal.BinaryConstants -open Internal.Utilities -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library [] diff --git a/src/absil/ildiag.fs b/src/absil/ildiag.fs index de7411fbf9..1cd20ad875 100644 --- a/src/absil/ildiag.fs +++ b/src/absil/ildiag.fs @@ -4,7 +4,6 @@ module internal FSharp.Compiler.AbstractIL.Diagnostics -open Internal.Utilities let diagnosticsLog = ref (Some stdout) diff --git a/src/absil/ilmorph.fs b/src/absil/ilmorph.fs index ffd86aa504..fd59b34e93 100644 --- a/src/absil/ilmorph.fs +++ b/src/absil/ilmorph.fs @@ -3,11 +3,8 @@ module internal FSharp.Compiler.AbstractIL.Morphs open System.Collections.Generic -open Internal.Utilities open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL let mutable morphCustomAttributeData = false diff --git a/src/absil/ilprint.fs b/src/absil/ilprint.fs index e2ed4e9302..7f408d48cb 100644 --- a/src/absil/ilprint.fs +++ b/src/absil/ilprint.fs @@ -2,16 +2,12 @@ module internal FSharp.Compiler.AbstractIL.ILAsciiWriter -open Internal.Utilities -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.Internal.AsciiConstants open FSharp.Compiler.AbstractIL.IL -open System.Text open System.IO open System.Reflection diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index 38c1c5ff81..cc5c865515 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -18,7 +18,6 @@ open System.Runtime.InteropServices open System.Text open Internal.Utilities open Internal.Utilities.Collections -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Support open FSharp.Compiler.AbstractIL.Diagnostics @@ -27,7 +26,6 @@ open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Range -open Microsoft.FSharp.NativeInterop open System.Reflection let checking = false @@ -4128,7 +4126,6 @@ let OpenILModuleReader fileName opts = [] module Shim = - open FSharp.Compiler.Lib type IAssemblyReader = abstract GetILModuleReader: filename: string * readerOptions: ILReaderOptions -> ILModuleReader diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index cf43af269e..336215f69b 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -19,7 +19,6 @@ open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.ILAsciiWriter open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Range open FSharp.Core.Printf diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index fb8a98b349..308120152e 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -2,11 +2,8 @@ module internal FSharp.Compiler.AbstractIL.Internal.Support -open Internal.Utilities open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Internal.Bytes -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Internal.NativeRes #if FX_NO_CORHOST_SIGNER @@ -15,7 +12,6 @@ open FSharp.Compiler.AbstractIL.Internal.StrongNameSign open System open System.IO -open System.Text open System.Reflection #if !FX_NO_SYMBOLSTORE diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index dbd8a28875..dc5a944ac0 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -6,17 +6,13 @@ open System.Collections.Generic open System.IO open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.ILAsciiWriter open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Diagnostics -open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.BinaryConstants open FSharp.Compiler.AbstractIL.Internal.Support open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.ILPdbWriter -open FSharp.Compiler.DiagnosticMessage open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Range #if FX_NO_CORHOST_SIGNER diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index 90d53444e7..682b20a688 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -10,11 +10,9 @@ open System.IO.Compression open System.Reflection open System.Reflection.Metadata open System.Reflection.Metadata.Ecma335 -open System.Reflection.PortableExecutable open System.Text open Internal.Utilities open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.Internal.Support open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger diff --git a/src/absil/ilx.fs b/src/absil/ilx.fs index 56d264a6dc..2b364186c9 100644 --- a/src/absil/ilx.fs +++ b/src/absil/ilx.fs @@ -3,9 +3,6 @@ /// Defines an extension of the IL algebra module internal FSharp.Compiler.AbstractIL.Extensions.ILX.Types -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library diff --git a/src/absil/zset.fs b/src/absil/zset.fs index 5d6588a598..aee52eb68e 100644 --- a/src/absil/zset.fs +++ b/src/absil/zset.fs @@ -3,9 +3,7 @@ namespace FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library -open Internal.Utilities open Internal.Utilities.Collections.Tagged open System.Collections.Generic diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 239015820a..425bcaf374 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -4941,7 +4941,6 @@ type CodeContext = module private ScriptPreprocessClosure = - open Internal.Utilities.Text.Lexing /// Represents an input to the closure finding process type ClosureSource = ClosureSource of filename: string * referenceRange: range * sourceText: ISourceText * parseRequired: bool diff --git a/src/fsharp/CompilerGlobalState.fs b/src/fsharp/CompilerGlobalState.fs index 1e857e7cad..a54fc0426a 100644 --- a/src/fsharp/CompilerGlobalState.fs +++ b/src/fsharp/CompilerGlobalState.fs @@ -5,7 +5,6 @@ namespace FSharp.Compiler open System.Collections.Generic -open FSharp.Compiler.AbstractIL open FSharp.Compiler.Range open FSharp.Compiler.PrettyNaming diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 2e96dcd367..34d1c7d899 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -6,7 +6,6 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic - open System.Diagnostics open System.IO open System.Reflection diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index c075e0dbe9..3e1692e78b 100755 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -15,7 +15,6 @@ module internal ExtensionTyping = open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Range open FSharp.Compiler.AbstractIL.IL - open FSharp.Compiler.AbstractIL.Diagnostics // dprintfn open FSharp.Compiler.AbstractIL.Internal.Library // frontAndBack type TypeProviderDesignation = TypeProviderDesignation of string diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 62300df676..3adebb1872 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -1832,7 +1832,6 @@ module CG = let SetStack (cgbuf: CodeGenBuffer) s = cgbuf.SetStack s let GenerateMark (cgbuf: CodeGenBuffer) s = cgbuf.Mark s -open CG //-------------------------------------------------------------------------- @@ -7622,7 +7621,6 @@ let GenerateCode (cenv, anonTypeTable, eenv, TypedAssemblyAfterOptimization file //------------------------------------------------------------------------- open System -open System.Reflection /// The lookup* functions are the conversions available from ilreflect. type ExecutionContext = diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 7e9dffdd52..d23fe4b4a8 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -6,7 +6,6 @@ module internal FSharp.Compiler.InfoReader open System.Collections.Generic -open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler open FSharp.Compiler.AccessibilityLogic diff --git a/src/fsharp/InternalCollections.fs b/src/fsharp/InternalCollections.fs index eda256e715..34076bf5fd 100755 --- a/src/fsharp/InternalCollections.fs +++ b/src/fsharp/InternalCollections.fs @@ -2,7 +2,6 @@ namespace Internal.Utilities.Collections open System -open System.Collections.Generic [] type internal ValueStrength<'T when 'T : not struct> = diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index e37b0c35b1..468ac0b3aa 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -6,8 +6,6 @@ module internal FSharp.Compiler.LexFilter open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.Ast diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 6bc583faae..ccf4d0c1f2 100644 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -14,7 +14,6 @@ open FSharp.Compiler.ErrorLogger open FSharp.Compiler.Tast open FSharp.Compiler.Tastops open FSharp.Compiler.Lib -open FSharp.Compiler.TcGlobals open FSharp.Compiler.InfoReader open FSharp.Compiler.MethodCalls diff --git a/src/fsharp/QuotationPickler.fs b/src/fsharp/QuotationPickler.fs index 90a9e29994..82273b01ab 100644 --- a/src/fsharp/QuotationPickler.fs +++ b/src/fsharp/QuotationPickler.fs @@ -5,7 +5,6 @@ module internal FSharp.Compiler.QuotationPickler open System.Text open Internal.Utilities.Collections open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler open FSharp.Compiler.Lib let mkRLinear mk (vs, body) = List.foldBack (fun v acc -> mk (v, acc)) vs body diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index da6906cf33..deab45911f 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -6,7 +6,6 @@ open System.Collections.Generic open System.Text open Internal.Utilities open FSharp.Compiler -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library diff --git a/src/fsharp/TypeRelations.fs b/src/fsharp/TypeRelations.fs index 29c95cc55a..dd32a6ee00 100755 --- a/src/fsharp/TypeRelations.fs +++ b/src/fsharp/TypeRelations.fs @@ -11,7 +11,6 @@ open FSharp.Compiler.Tast open FSharp.Compiler.Tastops open FSharp.Compiler.TcGlobals open FSharp.Compiler.Infos -open FSharp.Compiler.PrettyNaming /// Implements a :> b without coercion based on finalized (no type variable) types // Note: This relation is approximate and not part of the language specification. diff --git a/src/fsharp/UnicodeLexing.fs b/src/fsharp/UnicodeLexing.fs index d34092940e..c776a1f1f7 100644 --- a/src/fsharp/UnicodeLexing.fs +++ b/src/fsharp/UnicodeLexing.fs @@ -7,8 +7,6 @@ module internal FSharp.Compiler.UnicodeLexing // open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.Features -open Internal.Utilities open System.IO open Internal.Utilities.Text.Lexing diff --git a/src/fsharp/XmlAdapters.fs b/src/fsharp/XmlAdapters.fs index 4f48955945..2e04733fc1 100644 --- a/src/fsharp/XmlAdapters.fs +++ b/src/fsharp/XmlAdapters.fs @@ -1,13 +1,9 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. namespace Microsoft.FSharp.Core -open System.Reflection //Replacement for: System.Security.SecurityElement.Escape(line) All platforms module internal XmlAdapters = - open System.Text - open Microsoft.FSharp.Collections - let s_escapeChars = [| '<'; '>'; '\"'; '\''; '&' |] let getEscapeSequence c = diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 59e93205ce..d8406e1a85 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -2,12 +2,10 @@ module public FSharp.Compiler.Ast -open System.Collections.Generic open Internal.Utilities.Text.Lexing open Internal.Utilities.Text.Parsing open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler open FSharp.Compiler.UnicodeLexing diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index dc5777cdc3..bb46f75e1d 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -13,13 +13,11 @@ module internal FSharp.Compiler.Driver open System -open System.Collections.Concurrent open System.Collections.Generic open System.Diagnostics open System.Globalization open System.IO open System.Reflection -open System.Runtime.CompilerServices open System.Text open System.Threading @@ -37,7 +35,6 @@ open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.IlxGen open FSharp.Compiler.AccessibilityLogic -open FSharp.Compiler.AttributeChecking open FSharp.Compiler.Ast open FSharp.Compiler.CompileOps open FSharp.Compiler.CompileOptions @@ -1105,7 +1102,6 @@ module MainModuleBuilder = /// Optional static linking of all DLLs that depend on the F# Library, plus other specified DLLs module StaticLinker = - open FSharp.Compiler.AbstractIL // Handles TypeForwarding for the generated IL model type TypeForwarding (tcImports: TcImports) = diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 99bffe0b73..de1f733598 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -13,20 +13,16 @@ open System open System.Collections.Generic open System.Diagnostics open System.Globalization -open System.Runtime.InteropServices open System.IO open System.Text open System.Threading open System.Reflection -open System.Runtime.CompilerServices open FSharp.Compiler open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.ILBinaryReader -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX open FSharp.Compiler.AbstractIL.ILRuntimeWriter open FSharp.Compiler.Lib open FSharp.Compiler.AccessibilityLogic @@ -34,16 +30,11 @@ open FSharp.Compiler.Ast open FSharp.Compiler.CompileOptions open FSharp.Compiler.CompileOps open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Features -open FSharp.Compiler.Infos open FSharp.Compiler.InfoReader open FSharp.Compiler.NameResolution open FSharp.Compiler.IlxGen open FSharp.Compiler.Lexhelp open FSharp.Compiler.Layout -open FSharp.Compiler.Lib -open FSharp.Compiler.Optimizer -open FSharp.Compiler.PostTypeCheckSemanticChecks open FSharp.Compiler.Range open FSharp.Compiler.TypeChecker open FSharp.Compiler.Tast @@ -54,7 +45,6 @@ open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.ReferenceResolver open Internal.Utilities -open Internal.Utilities.Collections open Internal.Utilities.StructuredFormat //---------------------------------------------------------------------------- diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 8fdd28f3b5..29943461bd 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -3,7 +3,6 @@ /// Functions to import .NET binary metadata as TAST objects module internal FSharp.Compiler.Import -open System.Reflection open System.Collections.Concurrent open System.Collections.Generic diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index d63a8f8f02..fc6a52d763 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -3,7 +3,6 @@ module FSharp.Compiler.Layout open System -open System.Collections.Generic open System.IO open Internal.Utilities.StructuredFormat open Microsoft.FSharp.Core.Printf diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs index 6a9a6430cb..b25627e9a4 100644 --- a/src/fsharp/lexhelp.fs +++ b/src/fsharp/lexhelp.fs @@ -6,19 +6,15 @@ open System open System.Text open Internal.Utilities -open Internal.Utilities.Collections -open Internal.Utilities.Text open Internal.Utilities.Text.Lexing open FSharp.Compiler -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Lib open FSharp.Compiler.Ast open FSharp.Compiler.PrettyNaming open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.Range open FSharp.Compiler.Parser diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 6c4599f8a1..ceb8062115 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -5,7 +5,6 @@ module internal FSharp.Compiler.Lib open System.IO open System.Collections.Generic open Internal.Utilities -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 96e81e3214..406e16db7a 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -4,7 +4,6 @@ namespace FSharp.Compiler open System -open System.Collections.Concurrent open System.Collections.Generic open System.IO open System.Threading @@ -18,7 +17,6 @@ open FSharp.Compiler.AbstractIL.ILBinaryReader open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.CompileOps open FSharp.Compiler.CompileOptions -open FSharp.Compiler.Ast open FSharp.Compiler.ErrorLogger open FSharp.Compiler.TcGlobals open FSharp.Compiler.TypeChecker diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index e4f942b657..70cf19fb4a 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -3,7 +3,6 @@ namespace FSharp.Compiler.SourceCodeServices open FSharp.Compiler -open FSharp.Compiler.Ast open FSharp.Compiler.Range open FSharp.Compiler.PrettyNaming open System.Collections.Generic diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 8ceb381225..1a375fdf33 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -491,8 +491,6 @@ type OpenStatementInsertionPoint = | Nearest module ParsedInput = - open FSharp.Compiler - open FSharp.Compiler.Ast /// An recursive pattern that collect all sequential expressions to avoid StackOverflowException let rec (|Sequentials|_|) = function diff --git a/src/fsharp/service/ServiceDeclarationLists.fs b/src/fsharp/service/ServiceDeclarationLists.fs index c4bf83bf08..ef9c0b4098 100644 --- a/src/fsharp/service/ServiceDeclarationLists.fs +++ b/src/fsharp/service/ServiceDeclarationLists.fs @@ -8,7 +8,6 @@ namespace FSharp.Compiler.SourceCodeServices open FSharp.Compiler -open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Diagnostics open FSharp.Compiler.AccessibilityLogic diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index 84c8947d13..04c79ab136 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -17,8 +17,6 @@ open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler open FSharp.Compiler.Range open FSharp.Compiler.Ast -open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.CompileOps open FSharp.Compiler.Lib open FSharp.Compiler.PrettyNaming diff --git a/src/fsharp/service/ServiceXmlDocParser.fs b/src/fsharp/service/ServiceXmlDocParser.fs index cac3a2743d..5b71775adc 100644 --- a/src/fsharp/service/ServiceXmlDocParser.fs +++ b/src/fsharp/service/ServiceXmlDocParser.fs @@ -2,7 +2,6 @@ namespace FSharp.Compiler.SourceCodeServices -open FSharp.Compiler open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Text diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 7eac7390c2..6250c87a92 100644 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -19,7 +19,6 @@ open FSharp.Compiler.CompileOps open FSharp.Compiler.CompileOptions open FSharp.Compiler.Driver open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Features open FSharp.Compiler.Lib open FSharp.Compiler.Range open FSharp.Compiler.TcGlobals diff --git a/src/fsharp/sr.fs b/src/fsharp/sr.fs index ee64fcdb19..ae81bb6abc 100644 --- a/src/fsharp/sr.fs +++ b/src/fsharp/sr.fs @@ -2,13 +2,8 @@ namespace FSharp.Compiler open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Collections open Microsoft.FSharp.Reflection - open System.Globalization - open System.IO - open System.Text - open System.Reflection module internal SR = let private resources = lazy (new System.Resources.ResourceManager("fsstrings", System.Reflection.Assembly.GetExecutingAssembly())) @@ -24,9 +19,6 @@ namespace FSharp.Compiler module internal DiagnosticMessage = open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Reflection - open System.Reflection - open Internal.Utilities.StructuredFormat let mkFunctionValue (tys: System.Type[]) (impl:obj->obj) = FSharpValue.MakeFunction(FSharpType.MakeFunctionType(tys.[0],tys.[1]), impl) diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index b1c46d9bd7..e818d44181 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -8,7 +8,6 @@ namespace FSharp.Compiler.SourceCodeServices open System -open System.Collections.Generic open System.IO open Microsoft.FSharp.Core.Printf diff --git a/src/fsharp/tainted.fs b/src/fsharp/tainted.fs index ebdc96c746..15d2378b3f 100644 --- a/src/fsharp/tainted.fs +++ b/src/fsharp/tainted.fs @@ -9,9 +9,6 @@ open FSharp.Compiler.Range open Microsoft.FSharp.Core.CompilerServices open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library -open System.Reflection -open System.Collections.Generic -open ErrorLogger type internal TypeProviderError ( diff --git a/src/ilx/EraseClosures.fs b/src/ilx/EraseClosures.fs index ca0dbfcdf8..abc5e4bc97 100644 --- a/src/ilx/EraseClosures.fs +++ b/src/ilx/EraseClosures.fs @@ -2,18 +2,13 @@ module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures -open Internal.Utilities -open FSharp.Compiler.AbstractIL -open FSharp.Compiler.AbstractIL.Internal open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.Extensions.ILX open FSharp.Compiler.AbstractIL.Extensions.ILX.Types -open FSharp.Compiler.AbstractIL.Extensions.ILX.IlxSettings open FSharp.Compiler.AbstractIL.Morphs open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.PrettyNaming -open System.Reflection // -------------------------------------------------------------------- // Erase closures and function types diff --git a/src/ilx/EraseUnions.fs b/src/ilx/EraseUnions.fs index 1d0175676c..c24a30a610 100644 --- a/src/ilx/EraseUnions.fs +++ b/src/ilx/EraseUnions.fs @@ -9,10 +9,8 @@ module internal FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions open System.Collections.Generic -open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal.Library -open FSharp.Compiler.AbstractIL.Extensions.ILX open FSharp.Compiler.AbstractIL.Extensions.ILX.Types open System.Reflection diff --git a/src/ilx/ilxsettings.fs b/src/ilx/ilxsettings.fs index 868a29d94e..64ea572e02 100644 --- a/src/ilx/ilxsettings.fs +++ b/src/ilx/ilxsettings.fs @@ -2,11 +2,9 @@ module internal FSharp.Compiler.AbstractIL.Extensions.ILX.IlxSettings -open Internal.Utilities open FSharp.Compiler.AbstractIL open FSharp.Compiler.AbstractIL.IL open FSharp.Compiler.AbstractIL.Internal -open FSharp.Compiler.AbstractIL.Extensions.ILX type IlxCallImplementation = | VirtEntriesVirtCode diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 95aa5c5a31..fe6728586b 100644 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -3,7 +3,6 @@ namespace Internal.Utilities open System open System.IO -open System.Reflection open Microsoft.Win32 open System.Runtime.InteropServices diff --git a/src/utils/EditDistance.fs b/src/utils/EditDistance.fs index 503662400f..bd66352d44 100644 --- a/src/utils/EditDistance.fs +++ b/src/utils/EditDistance.fs @@ -4,7 +4,6 @@ module internal Internal.Utilities.EditDistance open System -open System.Collections.Generic /// Given an offset and a radius from that offset, does mChar exist in that part of str? let inline existsInWin (mChar: char) (str: string) (offset: int) (rad: int) = diff --git a/src/utils/HashMultiMap.fs b/src/utils/HashMultiMap.fs index 7f571c232d..a76b3ccc25 100644 --- a/src/utils/HashMultiMap.fs +++ b/src/utils/HashMultiMap.fs @@ -2,7 +2,6 @@ namespace Internal.Utilities.Collections -open System open System.Collections.Generic open Microsoft.FSharp.Collections diff --git a/src/utils/TaggedCollections.fs b/src/utils/TaggedCollections.fs index 232d3b7505..54f7e07fc5 100644 --- a/src/utils/TaggedCollections.fs +++ b/src/utils/TaggedCollections.fs @@ -7,12 +7,8 @@ namespace Internal.Utilities.Collections.Tagged #nowarn "60" // override implementations in augmentations open Microsoft.FSharp.Core - open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open System open System.Collections.Generic - open Internal.Utilities - open Internal.Utilities.Collections [] diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs index 9ce01bff90..43c5e6cb33 100644 --- a/src/utils/prim-parsing.fs +++ b/src/utils/prim-parsing.fs @@ -4,11 +4,9 @@ namespace Internal.Utilities.Text.Parsing -open Internal.Utilities open Internal.Utilities.Text.Lexing open System -open System.Collections.Generic exception RecoverableParseError exception Accept of obj diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs index 42cb18fa8d..21b84f5bef 100644 --- a/src/utils/sformat.fs +++ b/src/utils/sformat.fs @@ -25,18 +25,14 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl // This is a fresh implementation of pre-existing ideas. open System - open System.Diagnostics - open System.Text open System.IO open System.Reflection open System.Globalization open System.Collections.Generic open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators - open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Reflection open Microsoft.FSharp.Collections - open Microsoft.FSharp.Primitives.Basics [] type LayoutTag = @@ -342,8 +338,6 @@ namespace Microsoft.FSharp.Text.StructuredPrintfImpl module ReflectUtils = - open System - open System.Reflection [] type TypeInfo = diff --git a/tests/service/AssemblyReaderShim.fs b/tests/service/AssemblyReaderShim.fs index 329fce8198..71ad67809d 100644 --- a/tests/service/AssemblyReaderShim.fs +++ b/tests/service/AssemblyReaderShim.fs @@ -7,7 +7,6 @@ module FSharp.Compiler.Service.Tests.AssemblyReaderShim #endif -open FSharp.Compiler.Service.Tests.Common open FsUnit open FSharp.Compiler.AbstractIL.ILBinaryReader open NUnit.Framework diff --git a/tests/service/CSharpProjectAnalysis.fs b/tests/service/CSharpProjectAnalysis.fs index bac536c294..8f787e90e5 100644 --- a/tests/service/CSharpProjectAnalysis.fs +++ b/tests/service/CSharpProjectAnalysis.fs @@ -12,14 +12,8 @@ module FSharp.Compiler.Service.Tests.CSharpProjectAnalysis open NUnit.Framework open FsUnit -open System open System.IO -open System.Collections.Generic - -open FSharp.Compiler -open FSharp.Compiler.Service.Tests open FSharp.Compiler.SourceCodeServices - open FSharp.Compiler.Service.Tests.Common let internal getProjectReferences (content, dllFiles, libDirs, otherFlags) = diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 6920e682af..1d45956d30 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -76,7 +76,6 @@ let sysLib nm = [] module Helpers = - open System type DummyType = A | B let PathRelativeToTestAssembly p = Path.Combine(Path.GetDirectoryName(Uri(typeof.Assembly.CodeBase).LocalPath), p) diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index 69b9e40764..47f67fadea 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -30,7 +30,6 @@ module Tests.Service.Editor open NUnit.Framework open FsUnit open System -open System.IO open FSharp.Compiler open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common diff --git a/tests/service/ExprTests.fs b/tests/service/ExprTests.fs index a92301bcef..f2215974b9 100644 --- a/tests/service/ExprTests.fs +++ b/tests/service/ExprTests.fs @@ -15,9 +15,7 @@ open FsUnit open System open System.IO open System.Collections.Generic -open FSharp.Compiler open FSharp.Compiler.SourceCodeServices -open FSharp.Compiler.Service open FSharp.Compiler.Service.Tests.Common let internal exprChecker = FSharpChecker.Create(keepAssemblyContents=true) @@ -282,7 +280,6 @@ module internal Utils = // This project is a smoke test for a whole range of standard and obscure expressions module internal Project1 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2669,7 +2666,6 @@ let ``Test Operator Declarations for String`` () = // This big list expression was causing us trouble module internal ProjectStressBigExpressions = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() diff --git a/tests/service/FileSystemTests.fs b/tests/service/FileSystemTests.fs index 24b45414fd..8580462c2b 100644 --- a/tests/service/FileSystemTests.fs +++ b/tests/service/FileSystemTests.fs @@ -12,9 +12,7 @@ open NUnit.Framework open FsUnit open System open System.IO -open System.Collections.Generic open System.Text -open FSharp.Compiler open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.Service.Tests.Common diff --git a/tests/service/InteractiveCheckerTests.fs b/tests/service/InteractiveCheckerTests.fs index ea892fc1b5..3d7e13769b 100644 --- a/tests/service/InteractiveCheckerTests.fs +++ b/tests/service/InteractiveCheckerTests.fs @@ -12,7 +12,6 @@ open NUnit.Framework open FsUnit open System open FSharp.Compiler -open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common let internal longIdentToString (longIdent: Ast.LongIdent) = diff --git a/tests/service/MultiProjectAnalysisTests.fs b/tests/service/MultiProjectAnalysisTests.fs index 04ba820da0..26d430f500 100644 --- a/tests/service/MultiProjectAnalysisTests.fs +++ b/tests/service/MultiProjectAnalysisTests.fs @@ -13,12 +13,8 @@ open FSharp.Compiler.SourceCodeServices open NUnit.Framework open FsUnit -open System open System.IO -open System -open System.Collections.Generic -open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common let numProjectsForStressTest = 100 @@ -29,7 +25,6 @@ let internal tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m. module internal Project1A = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -69,7 +64,6 @@ type U = //----------------------------------------------------------------------------------------- module internal Project1B = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -97,7 +91,6 @@ let x = // A project referencing two sub-projects module internal MultiProject1 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -248,7 +241,6 @@ let ``Test multi project 1 xmldoc`` () = // A project referencing many sub-projects module internal ManyProjectsStressTest = - open System.IO let numProjectsForStressTest = 100 @@ -390,7 +382,6 @@ let ``Test ManyProjectsStressTest all symbols`` () = //----------------------------------------------------------------------------------------- module internal MultiProjectDirty1 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -412,7 +403,6 @@ let x = "F#" checker.GetProjectOptionsFromCommandLineArgs (projFileName, args) module internal MultiProjectDirty2 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -608,7 +598,6 @@ let ``Test multi project symbols should pick up changes in dependent projects`` module internal Project2A = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName1 = Path.GetTempFileName() @@ -638,7 +627,6 @@ type C() = //Project2A.fileSource1 // A project referencing Project2A module internal Project2B = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName2, ".dll") @@ -663,7 +651,6 @@ let v = Project2A.C().InternalMember // access an internal symbol //Project2A.fileSource1 // A project referencing Project2A but without access to the internals of A module internal Project2C = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let dllName = Path.ChangeExtension(Project2A.baseName3, ".dll") @@ -728,7 +715,6 @@ let ``Test multi project 2 all symbols`` () = //------------------------------------------------------------------------------------ module internal Project3A = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() @@ -752,7 +738,6 @@ let (|DivisibleBy|_|) by n = // A project referencing a sub-project module internal MultiProject3 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let baseName = Path.GetTempFileName() diff --git a/tests/service/PerfTests.fs b/tests/service/PerfTests.fs index c5f2afbc7a..ffffa412a3 100644 --- a/tests/service/PerfTests.fs +++ b/tests/service/PerfTests.fs @@ -10,11 +10,8 @@ module FSharp.Compiler.Service.Tests.PerfTests open NUnit.Framework open FsUnit -open System open System.IO -open System.Collections.Generic -open FSharp.Compiler open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common @@ -23,7 +20,6 @@ open FSharp.Compiler.Service.Tests.Common let internal checker = FSharpChecker.Create() module internal Project1 = - open System.IO let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() diff --git a/tests/service/ProjectAnalysisTests.fs b/tests/service/ProjectAnalysisTests.fs index c9635c7083..45b5dc1b50 100644 --- a/tests/service/ProjectAnalysisTests.fs +++ b/tests/service/ProjectAnalysisTests.fs @@ -13,7 +13,6 @@ open NUnit.Framework open FsUnit open System open System.IO -open System.Collections.Generic open FSharp.Compiler open FSharp.Compiler.SourceCodeServices @@ -21,7 +20,6 @@ open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.Service.Tests.Common module internal Project1 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -639,7 +637,6 @@ let ``Test file explicit parse all symbols`` () = //----------------------------------------------------------------------------------------- module internal Project2 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -836,7 +833,6 @@ let ``Test project2 all uses of all symbols`` () = //----------------------------------------------------------------------------------------- module internal Project3 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1277,7 +1273,6 @@ let ``Test project3 all uses of all signature symbols`` () = //----------------------------------------------------------------------------------------- module internal Project4 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1432,7 +1427,6 @@ let ``Test project4 T symbols`` () = module internal Project5 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") @@ -1648,7 +1642,6 @@ let ``Test partial active patterns' exact ranges from uses of symbols`` () = //----------------------------------------------------------------------------------------- module internal Project6 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1702,7 +1695,6 @@ let ``Test project 6 all symbols`` () = //----------------------------------------------------------------------------------------- module internal Project7 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1764,7 +1756,6 @@ let ``Test project 7 all symbols`` () = //----------------------------------------------------------------------------------------- module internal Project8 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1849,7 +1840,6 @@ let ``Test project 8 all symbols`` () = //----------------------------------------------------------------------------------------- module internal Project9 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -1927,7 +1917,6 @@ let ``Test project 9 all symbols`` () = // see https://github.com/fsharp/FSharp.Compiler.Service/issues/95 module internal Project10 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2010,7 +1999,6 @@ let ``Test Project10 all symbols`` () = // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 module internal Project11 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2078,7 +2066,6 @@ let ``Test Project11 all symbols`` () = // see https://github.com/fsharp/FSharp.Compiler.Service/issues/92 module internal Project12 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2147,7 +2134,6 @@ let ``Test Project12 all symbols`` () = // Test fetching information about some external types (e.g. System.Object, System.DateTime) module internal Project13 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2296,7 +2282,6 @@ let ``Test Project13 all symbols`` () = // Misc - structs module internal Project14 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2365,7 +2350,6 @@ let ``Test Project14 all symbols`` () = // Misc - union patterns module internal Project15 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2425,7 +2409,6 @@ let ``Test Project15 all symbols`` () = // Misc - signature files module internal Project16 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -2725,7 +2708,6 @@ let ``Test project16 DeclaringEntity`` () = // Misc - namespace symbols module internal Project17 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2818,7 +2800,6 @@ let ``Test Project17 all symbols`` () = // Misc - generic type definnitions module internal Project18 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2869,7 +2850,6 @@ let ``Test Project18 all symbols`` () = // Misc - enums module internal Project19 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -2948,7 +2928,6 @@ let ``Test Project19 all symbols`` () = // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/109 module internal Project20 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3001,7 +2980,6 @@ let ``Test Project20 all symbols`` () = // Misc - https://github.com/fsharp/FSharp.Compiler.Service/issues/137 module internal Project21 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3080,7 +3058,6 @@ let ``Test Project21 all symbols`` () = // Misc - namespace symbols module internal Project22 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3220,7 +3197,6 @@ let ``Test Project22 IList properties`` () = // Misc - properties module internal Project23 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3353,7 +3329,6 @@ let ``Test Project23 extension properties' getters/setters should refer to the c // Misc - property symbols module internal Project24 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3646,7 +3621,6 @@ let ``Test symbol uses of properties with both getters and setters`` () = #endif // Misc - type provider symbols module internal Project25 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3787,7 +3761,6 @@ let ``Test symbol uses of fully-qualified records`` () = module internal Project26 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3879,7 +3852,6 @@ let ``Test Project26 parameter symbols`` () = ("M3", None, "type Microsoft.FSharp.Core.unit", "")]) module internal Project27 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -3925,7 +3897,6 @@ let ``Test project27 all symbols in signature`` () = ("member AbstractMethod", ["member"; "overridemem"])] module internal Project28 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4028,7 +3999,6 @@ let ``Test project28 all symbols in signature`` () = ("FSharpGenericParameter", "?", "")|] #endif module internal Project29 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4085,7 +4055,6 @@ let ``Test project29 event symbols`` () = module internal Project30 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4146,7 +4115,6 @@ let ``Test project30 Format attributes`` () = """[]""")]) module internal Project31 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4264,7 +4232,6 @@ let ``Test project31 Format C# method attributes`` () = ]) module internal Project32 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let sigFileName1 = Path.ChangeExtension(fileName1, ".fsi") @@ -4337,7 +4304,6 @@ let ``Test Project32 should be able to find impl symbols`` () = ("file1", ((3, 4), (3, 8)), ["val"])] module internal Project33 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4383,7 +4349,6 @@ let ``Test Project33 extension methods`` () = ("GetValue", ["member"; "extmem"])] module internal Project34 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4448,7 +4413,6 @@ let ``Test project34 should report correct accessibility for System.Data.Listene //------------------------------------------------------ module internal Project35 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4526,7 +4490,6 @@ let ``Test project35 CurriedParameterGroups should be available for nested funct //------------------------------------------------------ module internal Project35b = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fsx") let fileSource1Text = """ @@ -4581,7 +4544,6 @@ let ``Test project35b Dependency files for check of project`` () = //------------------------------------------------------ module internal Project36 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4679,7 +4641,6 @@ let ``Test project36 FSharpMemberOrFunctionOrValue.LiteralValue`` () = shouldEqual true notLit.LiteralValue.IsNone module internal Project37 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4831,7 +4792,6 @@ let ``Test project37 DeclaringEntity`` () = module internal Project38 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -4929,7 +4889,6 @@ let ``Test project38 abstract slot information`` () = //-------------------------------------------- module internal Project39 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5010,7 +4969,6 @@ let ``Test project39 all symbols`` () = //-------------------------------------------- module internal Project40 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5075,7 +5033,6 @@ let ``Test Project40 all symbols`` () = //-------------------------------------------- module internal Project41 = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") // We need to us a stable name to keep the hashes stable @@ -5169,7 +5126,6 @@ let ``Test project41 all symbols`` () = module internal ProjectBig = - open System.IO let fileNamesI = [ for i in 1 .. 10 -> (i, Path.ChangeExtension(Path.GetTempFileName(), ".fs")) ] let base2 = Path.GetTempFileName() @@ -5206,7 +5162,6 @@ let ``add files with same name from different folders`` () = shouldEqual 0 errors.Length module internal ProjectStructUnions = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() @@ -5253,7 +5208,6 @@ let ``Test typed AST for struct unions`` () = // See https://github.com/fsharp/F |> shouldEqual true module internal ProjectLineDirectives = - open System.IO let fileName1 = Path.ChangeExtension(Path.GetTempFileName(), ".fs") let base2 = Path.GetTempFileName() diff --git a/tests/service/ProjectOptionsTests.fs b/tests/service/ProjectOptionsTests.fs index de7aed1675..1b1e252055 100644 --- a/tests/service/ProjectOptionsTests.fs +++ b/tests/service/ProjectOptionsTests.fs @@ -10,7 +10,6 @@ module FSharp.Compiler.Service.Tests.ProjectOptionsTests let runningOnMono = try System.Type.GetType("Mono.Runtime") <> null with e -> false -open System open System.IO open NUnit.Framework open FsUnit diff --git a/tests/service/TokenizerTests.fs b/tests/service/TokenizerTests.fs index c03fbce937..0827ff3502 100644 --- a/tests/service/TokenizerTests.fs +++ b/tests/service/TokenizerTests.fs @@ -8,14 +8,9 @@ module FSharp.Compiler.Service.Tests.TokenizerTests #endif -open FSharp.Compiler -open FSharp.Compiler.Interactive.Shell open FSharp.Compiler.SourceCodeServices open NUnit.Framework -open FsUnit -open System -open System.IO let sourceTok = FSharpSourceTokenizer([], Some "C:\\test.fsx") From 613fcae4115834cb0c56b26c13351060817bfaeb Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 27 Sep 2019 23:48:47 +0300 Subject: [PATCH 094/146] Remove unused opens --- fcs/samples/EditorService/Program.fs | 2 -- fcs/samples/FscExe/FscMain.fs | 2 -- fcs/samples/FsiExe/fsimain.fs | 2 -- fcs/samples/UntypedTree/Program.fs | 1 - 4 files changed, 7 deletions(-) diff --git a/fcs/samples/EditorService/Program.fs b/fcs/samples/EditorService/Program.fs index e3ab70185c..d457bf17c9 100644 --- a/fcs/samples/EditorService/Program.fs +++ b/fcs/samples/EditorService/Program.fs @@ -1,6 +1,4 @@ // Open the namespace with InteractiveChecker type -open System -open FSharp.Compiler open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.QuickParse diff --git a/fcs/samples/FscExe/FscMain.fs b/fcs/samples/FscExe/FscMain.fs index 26f26be63d..da272800d6 100644 --- a/fcs/samples/FscExe/FscMain.fs +++ b/fcs/samples/FscExe/FscMain.fs @@ -7,12 +7,10 @@ open System.Diagnostics open System.IO open System.Reflection open System.Runtime.CompilerServices -open FSharp.Compiler open FSharp.Compiler.SourceCodeServices open FSharp.Compiler.AbstractIL.IL // runningOnMono open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.ErrorLogger -open FSharp.Compiler.Range #if RESIDENT_COMPILER type TypeInThisAssembly() = member x.Dummy = 1 diff --git a/fcs/samples/FsiExe/fsimain.fs b/fcs/samples/FsiExe/fsimain.fs index c59ef2fe50..5fb34c3af1 100644 --- a/fcs/samples/FsiExe/fsimain.fs +++ b/fcs/samples/FsiExe/fsimain.fs @@ -17,13 +17,11 @@ module internal Sample.FSharp.Compiler.Interactive.Main open System open System.Globalization -open System.IO open System.Reflection open System.Threading open System.Windows.Forms open FSharp.Compiler.Interactive.Shell -open FSharp.Compiler.Interactive open FSharp.Compiler #nowarn "55" diff --git a/fcs/samples/UntypedTree/Program.fs b/fcs/samples/UntypedTree/Program.fs index ba6afb2dd2..9d99b8199f 100644 --- a/fcs/samples/UntypedTree/Program.fs +++ b/fcs/samples/UntypedTree/Program.fs @@ -1,5 +1,4 @@ // Open the namespace with InteractiveChecker type -open System open FSharp.Compiler.SourceCodeServices From 1e1be1b1d424817f323a95d94f2a22ef3aef1c6d Mon Sep 17 00:00:00 2001 From: TIHan Date: Fri, 25 Oct 2019 13:06:48 -0700 Subject: [PATCH 095/146] Initial work --- src/fsharp/IlxGen.fs | 27 +- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- .../fsharp/Compiler/Stress/LargeExprTests.fs | 2025 +++++++++++++++++ 3 files changed, 2040 insertions(+), 14 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 62300df676..d743c30e52 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -847,14 +847,14 @@ and IlxGenEnv = withinSEH: bool /// Are we inside of a recursive let binding, while loop, or a for loop? - isInLoop: bool + inLoop: bool } override __.ToString() = "" -let SetIsInLoop isInLoop eenv = - if eenv.isInLoop = isInLoop then eenv - else { eenv with isInLoop = isInLoop } +let SetInLoop inLoop eenv = + if eenv.inLoop = inLoop then eenv + else { eenv with inLoop = inLoop } let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } @@ -1911,9 +1911,10 @@ let CodeGenThen cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, c let innerVals = entryPointInfo |> List.map (fun (v, kind) -> (v, (kind, start))) (* Call the given code generator *) - codeGenFunction cgbuf {eenv with withinSEH=false - liveLocals=IntMap.empty() - innerVals = innerVals} + codeGenFunction cgbuf { eenv with withinSEH = false + liveLocals = IntMap.empty() + innerVals = innerVals + inLoop = false } let locals, maxStack, lab2pc, code, exnSpecs, hasSequencePoints = cgbuf.Close() @@ -2196,7 +2197,7 @@ and GenExprWithStackGuard cenv cgbuf eenv sp expr sequel = assert (cenv.exprRecursionDepth = 1) with | :? System.InsufficientExecutionStackException -> - error(InternalError("Expression is too large and/or complex to emit.", expr.Range)) + error(InternalError(sprintf "Expression is too large and/or complex to emit. Method name: '%s'. Recursive depth: %i." cgbuf.MethodName cenv.exprRecursionDepth, expr.Range)) and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = let g = cenv.g @@ -3456,7 +3457,7 @@ and GenTryFinally cenv cgbuf eenv (bodyExpr, handlerExpr, m, resty, spTry, spFin //-------------------------------------------------------------------------- and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = - let eenv = SetIsInLoop true eenv + let eenv = SetInLoop true eenv let g = cenv.g // The JIT/NGen eliminate array-bounds checks for C# loops of form: @@ -3547,7 +3548,7 @@ and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = //-------------------------------------------------------------------------- and GenWhileLoop cenv cgbuf eenv (spWhile, e1, e2, m) sequel = - let eenv = SetIsInLoop true eenv + let eenv = SetInLoop true eenv let finish = CG.GenerateDelayMark cgbuf "while_finish" let startTest = CG.GenerateMark cgbuf "startTest" @@ -5150,7 +5151,7 @@ and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFi /// Generate letrec bindings and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) = - let eenv = SetIsInLoop true eenv + let eenv = SetInLoop true eenv // Fix up recursion for non-toplevel recursive bindings let bindsPossiblyRequiringFixup = allBinds |> List.filter (fun b -> @@ -5400,7 +5401,7 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) s let storage = StorageForVal cenv.g m vspec eenv match storage, rhsExpr with // locals are zero-init, no need to initialize them, except if you are in a loop and the local is mutable. - | Local (_, realloc, _), Expr.Const (Const.Zero, _, _) when not realloc && not (eenv.isInLoop && vspec.IsMutable) -> + | Local (_, realloc, _), Expr.Const (Const.Zero, _, _) when not realloc && not (eenv.inLoop && vspec.IsMutable) -> CommitStartScope cgbuf startScopeMarkOpt | _ -> GenBindingRhs cenv cgbuf eenv SPSuppress vspec rhsExpr @@ -7535,7 +7536,7 @@ let GetEmptyIlxGenEnv (ilg: ILGlobals) ccu = innerVals = [] sigToImplRemapInfo = [] (* "module remap info" *) withinSEH = false - isInLoop = false } + inLoop = false } type IlxGenResults = { ilTypeDefs: ILTypeDef list diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 50102ab21c..f4f5e008f0 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -143,7 +143,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US";"--warn:5"|] + OtherOptions = [|"--preferreduilang:en-US";"--warn:5";"--optimize-"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) diff --git a/tests/fsharp/Compiler/Stress/LargeExprTests.fs b/tests/fsharp/Compiler/Stress/LargeExprTests.fs index 572c0e5355..004f737cb9 100644 --- a/tests/fsharp/Compiler/Stress/LargeExprTests.fs +++ b/tests/fsharp/Compiler/Stress/LargeExprTests.fs @@ -1015,6 +1015,2031 @@ type TestRecord = test1000: int } +[] +let main _ = 0 + """ + + [] + let LargeRecordWithStringFieldsDoesNotStackOverflow() = + CompilerAssert.CompileExe + """ +type TestRecord = + { + test1: string + test2: string + test3: string + test4: string + test5: string + test6: string + test7: string + test8: string + test9: string + test10: string + test11: string + test12: string + test13: string + test14: string + test15: string + test16: string + test17: string + test18: string + test19: string + test20: string + test21: string + test22: string + test23: string + test24: string + test25: string + test26: string + test27: string + test28: string + test29: string + test30: string + test31: string + test32: string + test33: string + test34: string + test35: string + test36: string + test37: string + test38: string + test39: string + test40: string + test41: string + test42: string + test43: string + test44: string + test45: string + test46: string + test47: string + test48: string + test49: string + test50: string + test51: string + test52: string + test53: string + test54: string + test55: string + test56: string + test57: string + test58: string + test59: string + test60: string + test61: string + test62: string + test63: string + test64: string + test65: string + test66: string + test67: string + test68: string + test69: string + test70: string + test71: string + test72: string + test73: string + test74: string + test75: string + test76: string + test77: string + test78: string + test79: string + test80: string + test81: string + test82: string + test83: string + test84: string + test85: string + test86: string + test87: string + test88: string + test89: string + test90: string + test91: string + test92: string + test93: string + test94: string + test95: string + test96: string + test97: string + test98: string + test99: string + test100: string + test101: string + test102: string + test103: string + test104: string + test105: string + test106: string + test107: string + test108: string + test109: string + test110: string + test111: string + test112: string + test113: string + test114: string + test115: string + test116: string + test117: string + test118: string + test119: string + test120: string + test121: string + test122: string + test123: string + test124: string + test125: string + test126: string + test127: string + test128: string + test129: string + test130: string + test131: string + test132: string + test133: string + test134: string + test135: string + test136: string + test137: string + test138: string + test139: string + test140: string + test141: string + test142: string + test143: string + test144: string + test145: string + test146: string + test147: string + test148: string + test149: string + test150: string + test151: string + test152: string + test153: string + test154: string + test155: string + test156: string + test157: string + test158: string + test159: string + test160: string + test161: string + test162: string + test163: string + test164: string + test165: string + test166: string + test167: string + test168: string + test169: string + test170: string + test171: string + test172: string + test173: string + test174: string + test175: string + test176: string + test177: string + test178: string + test179: string + test180: string + test181: string + test182: string + test183: string + test184: string + test185: string + test186: string + test187: string + test188: string + test189: string + test190: string + test191: string + test192: string + test193: string + test194: string + test195: string + test196: string + test197: string + test198: string + test199: string + test200: string + test201: string + test202: string + test203: string + test204: string + test205: string + test206: string + test207: string + test208: string + test209: string + test210: string + test211: string + test212: string + test213: string + test214: string + test215: string + test216: string + test217: string + test218: string + test219: string + test220: string + test221: string + test222: string + test223: string + test224: string + test225: string + test226: string + test227: string + test228: string + test229: string + test230: string + test231: string + test232: string + test233: string + test234: string + test235: string + test236: string + test237: string + test238: string + test239: string + test240: string + test241: string + test242: string + test243: string + test244: string + test245: string + test246: string + test247: string + test248: string + test249: string + test250: string + test251: string + test252: string + test253: string + test254: string + test255: string + test256: string + test257: string + test258: string + test259: string + test260: string + test261: string + test262: string + test263: string + test264: string + test265: string + test266: string + test267: string + test268: string + test269: string + test270: string + test271: string + test272: string + test273: string + test274: string + test275: string + test276: string + test277: string + test278: string + test279: string + test280: string + test281: string + test282: string + test283: string + test284: string + test285: string + test286: string + test287: string + test288: string + test289: string + test290: string + test291: string + test292: string + test293: string + test294: string + test295: string + test296: string + test297: string + test298: string + test299: string + test300: string + test301: string + test302: string + test303: string + test304: string + test305: string + test306: string + test307: string + test308: string + test309: string + test310: string + test311: string + test312: string + test313: string + test314: string + test315: string + test316: string + test317: string + test318: string + test319: string + test320: string + test321: string + test322: string + test323: string + test324: string + test325: string + test326: string + test327: string + test328: string + test329: string + test330: string + test331: string + test332: string + test333: string + test334: string + test335: string + test336: string + test337: string + test338: string + test339: string + test340: string + test341: string + test342: string + test343: string + test344: string + test345: string + test346: string + test347: string + test348: string + test349: string + test350: string + test351: string + test352: string + test353: string + test354: string + test355: string + test356: string + test357: string + test358: string + test359: string + test360: string + test361: string + test362: string + test363: string + test364: string + test365: string + test366: string + test367: string + test368: string + test369: string + test370: string + test371: string + test372: string + test373: string + test374: string + test375: string + test376: string + test377: string + test378: string + test379: string + test380: string + test381: string + test382: string + test383: string + test384: string + test385: string + test386: string + test387: string + test388: string + test389: string + test390: string + test391: string + test392: string + test393: string + test394: string + test395: string + test396: string + test397: string + test398: string + test399: string + test400: string + test401: string + test402: string + test403: string + test404: string + test405: string + test406: string + test407: string + test408: string + test409: string + test410: string + test411: string + test412: string + test413: string + test414: string + test415: string + test416: string + test417: string + test418: string + test419: string + test420: string + test421: string + test422: string + test423: string + test424: string + test425: string + test426: string + test427: string + test428: string + test429: string + test430: string + test431: string + test432: string + test433: string + test434: string + test435: string + test436: string + test437: string + test438: string + test439: string + test440: string + test441: string + test442: string + test443: string + test444: string + test445: string + test446: string + test447: string + test448: string + test449: string + test450: string + test451: string + test452: string + test453: string + test454: string + test455: string + test456: string + test457: string + test458: string + test459: string + test460: string + test461: string + test462: string + test463: string + test464: string + test465: string + test466: string + test467: string + test468: string + test469: string + test470: string + test471: string + test472: string + test473: string + test474: string + test475: string + test476: string + test477: string + test478: string + test479: string + test480: string + test481: string + test482: string + test483: string + test484: string + test485: string + test486: string + test487: string + test488: string + test489: string + test490: string + test491: string + test492: string + test493: string + test494: string + test495: string + test496: string + test497: string + test498: string + test499: string + test500: string + test501: string + test502: string + test503: string + test504: string + test505: string + test506: string + test507: string + test508: string + test509: string + test510: string + test511: string + test512: string + test513: string + test514: string + test515: string + test516: string + test517: string + test518: string + test519: string + test520: string + test521: string + test522: string + test523: string + test524: string + test525: string + test526: string + test527: string + test528: string + test529: string + test530: string + test531: string + test532: string + test533: string + test534: string + test535: string + test536: string + test537: string + test538: string + test539: string + test540: string + test541: string + test542: string + test543: string + test544: string + test545: string + test546: string + test547: string + test548: string + test549: string + test550: string + test551: string + test552: string + test553: string + test554: string + test555: string + test556: string + test557: string + test558: string + test559: string + test560: string + test561: string + test562: string + test563: string + test564: string + test565: string + test566: string + test567: string + test568: string + test569: string + test570: string + test571: string + test572: string + test573: string + test574: string + test575: string + test576: string + test577: string + test578: string + test579: string + test580: string + test581: string + test582: string + test583: string + test584: string + test585: string + test586: string + test587: string + test588: string + test589: string + test590: string + test591: string + test592: string + test593: string + test594: string + test595: string + test596: string + test597: string + test598: string + test599: string + test600: string + test601: string + test602: string + test603: string + test604: string + test605: string + test606: string + test607: string + test608: string + test609: string + test610: string + test611: string + test612: string + test613: string + test614: string + test615: string + test616: string + test617: string + test618: string + test619: string + test620: string + test621: string + test622: string + test623: string + test624: string + test625: string + test626: string + test627: string + test628: string + test629: string + test630: string + test631: string + test632: string + test633: string + test634: string + test635: string + test636: string + test637: string + test638: string + test639: string + test640: string + test641: string + test642: string + test643: string + test644: string + test645: string + test646: string + test647: string + test648: string + test649: string + test650: string + test651: string + test652: string + test653: string + test654: string + test655: string + test656: string + test657: string + test658: string + test659: string + test660: string + test661: string + test662: string + test663: string + test664: string + test665: string + test666: string + test667: string + test668: string + test669: string + test670: string + test671: string + test672: string + test673: string + test674: string + test675: string + test676: string + test677: string + test678: string + test679: string + test680: string + test681: string + test682: string + test683: string + test684: string + test685: string + test686: string + test687: string + test688: string + test689: string + test690: string + test691: string + test692: string + test693: string + test694: string + test695: string + test696: string + test697: string + test698: string + test699: string + test700: string + test701: string + test702: string + test703: string + test704: string + test705: string + test706: string + test707: string + test708: string + test709: string + test710: string + test711: string + test712: string + test713: string + test714: string + test715: string + test716: string + test717: string + test718: string + test719: string + test720: string + test721: string + test722: string + test723: string + test724: string + test725: string + test726: string + test727: string + test728: string + test729: string + test730: string + test731: string + test732: string + test733: string + test734: string + test735: string + test736: string + test737: string + test738: string + test739: string + test740: string + test741: string + test742: string + test743: string + test744: string + test745: string + test746: string + test747: string + test748: string + test749: string + test750: string + test751: string + test752: string + test753: string + test754: string + test755: string + test756: string + test757: string + test758: string + test759: string + test760: string + test761: string + test762: string + test763: string + test764: string + test765: string + test766: string + test767: string + test768: string + test769: string + test770: string + test771: string + test772: string + test773: string + test774: string + test775: string + test776: string + test777: string + test778: string + test779: string + test780: string + test781: string + test782: string + test783: string + test784: string + test785: string + test786: string + test787: string + test788: string + test789: string + test790: string + test791: string + test792: string + test793: string + test794: string + test795: string + test796: string + test797: string + test798: string + test799: string + test800: string + test801: string + test802: string + test803: string + test804: string + test805: string + test806: string + test807: string + test808: string + test809: string + test810: string + test811: string + test812: string + test813: string + test814: string + test815: string + test816: string + test817: string + test818: string + test819: string + test820: string + test821: string + test822: string + test823: string + test824: string + test825: string + test826: string + test827: string + test828: string + test829: string + test830: string + test831: string + test832: string + test833: string + test834: string + test835: string + test836: string + test837: string + test838: string + test839: string + test840: string + test841: string + test842: string + test843: string + test844: string + test845: string + test846: string + test847: string + test848: string + test849: string + test850: string + test851: string + test852: string + test853: string + test854: string + test855: string + test856: string + test857: string + test858: string + test859: string + test860: string + test861: string + test862: string + test863: string + test864: string + test865: string + test866: string + test867: string + test868: string + test869: string + test870: string + test871: string + test872: string + test873: string + test874: string + test875: string + test876: string + test877: string + test878: string + test879: string + test880: string + test881: string + test882: string + test883: string + test884: string + test885: string + test886: string + test887: string + test888: string + test889: string + test890: string + test891: string + test892: string + test893: string + test894: string + test895: string + test896: string + test897: string + test898: string + test899: string + test900: string + test901: string + test902: string + test903: string + test904: string + test905: string + test906: string + test907: string + test908: string + test909: string + test910: string + test911: string + test912: string + test913: string + test914: string + test915: string + test916: string + test917: string + test918: string + test919: string + test920: string + test921: string + test922: string + test923: string + test924: string + test925: string + test926: string + test927: string + test928: string + test929: string + test930: string + test931: string + test932: string + test933: string + test934: string + test935: string + test936: string + test937: string + test938: string + test939: string + test940: string + test941: string + test942: string + test943: string + test944: string + test945: string + test946: string + test947: string + test948: string + test949: string + test950: string + test951: string + test952: string + test953: string + test954: string + test955: string + test956: string + test957: string + test958: string + test959: string + test960: string + test961: string + test962: string + test963: string + test964: string + test965: string + test966: string + test967: string + test968: string + test969: string + test970: string + test971: string + test972: string + test973: string + test974: string + test975: string + test976: string + test977: string + test978: string + test979: string + test980: string + test981: string + test982: string + test983: string + test984: string + test985: string + test986: string + test987: string + test988: string + test989: string + test990: string + test991: string + test992: string + test993: string + test994: string + test995: string + test996: string + test997: string + test998: string + test999: string + test1000: string + } + +[] +let main _ = 0 + """ + + [] + let LargeStructRecordDoesNotStackOverflow() = + CompilerAssert.CompileExe + """ +[] +type TestRecord = + { + test1: int + test2: int + test3: int + test4: int + test5: int + test6: int + test7: int + test8: int + test9: int + test10: int + test11: int + test12: int + test13: int + test14: int + test15: int + test16: int + test17: int + test18: int + test19: int + test20: int + test21: int + test22: int + test23: int + test24: int + test25: int + test26: int + test27: int + test28: int + test29: int + test30: int + test31: int + test32: int + test33: int + test34: int + test35: int + test36: int + test37: int + test38: int + test39: int + test40: int + test41: int + test42: int + test43: int + test44: int + test45: int + test46: int + test47: int + test48: int + test49: int + test50: int + test51: int + test52: int + test53: int + test54: int + test55: int + test56: int + test57: int + test58: int + test59: int + test60: int + test61: int + test62: int + test63: int + test64: int + test65: int + test66: int + test67: int + test68: int + test69: int + test70: int + test71: int + test72: int + test73: int + test74: int + test75: int + test76: int + test77: int + test78: int + test79: int + test80: int + test81: int + test82: int + test83: int + test84: int + test85: int + test86: int + test87: int + test88: int + test89: int + test90: int + test91: int + test92: int + test93: int + test94: int + test95: int + test96: int + test97: int + test98: int + test99: int + test100: int + test101: int + test102: int + test103: int + test104: int + test105: int + test106: int + test107: int + test108: int + test109: int + test110: int + test111: int + test112: int + test113: int + test114: int + test115: int + test116: int + test117: int + test118: int + test119: int + test120: int + test121: int + test122: int + test123: int + test124: int + test125: int + test126: int + test127: int + test128: int + test129: int + test130: int + test131: int + test132: int + test133: int + test134: int + test135: int + test136: int + test137: int + test138: int + test139: int + test140: int + test141: int + test142: int + test143: int + test144: int + test145: int + test146: int + test147: int + test148: int + test149: int + test150: int + test151: int + test152: int + test153: int + test154: int + test155: int + test156: int + test157: int + test158: int + test159: int + test160: int + test161: int + test162: int + test163: int + test164: int + test165: int + test166: int + test167: int + test168: int + test169: int + test170: int + test171: int + test172: int + test173: int + test174: int + test175: int + test176: int + test177: int + test178: int + test179: int + test180: int + test181: int + test182: int + test183: int + test184: int + test185: int + test186: int + test187: int + test188: int + test189: int + test190: int + test191: int + test192: int + test193: int + test194: int + test195: int + test196: int + test197: int + test198: int + test199: int + test200: int + test201: int + test202: int + test203: int + test204: int + test205: int + test206: int + test207: int + test208: int + test209: int + test210: int + test211: int + test212: int + test213: int + test214: int + test215: int + test216: int + test217: int + test218: int + test219: int + test220: int + test221: int + test222: int + test223: int + test224: int + test225: int + test226: int + test227: int + test228: int + test229: int + test230: int + test231: int + test232: int + test233: int + test234: int + test235: int + test236: int + test237: int + test238: int + test239: int + test240: int + test241: int + test242: int + test243: int + test244: int + test245: int + test246: int + test247: int + test248: int + test249: int + test250: int + test251: int + test252: int + test253: int + test254: int + test255: int + test256: int + test257: int + test258: int + test259: int + test260: int + test261: int + test262: int + test263: int + test264: int + test265: int + test266: int + test267: int + test268: int + test269: int + test270: int + test271: int + test272: int + test273: int + test274: int + test275: int + test276: int + test277: int + test278: int + test279: int + test280: int + test281: int + test282: int + test283: int + test284: int + test285: int + test286: int + test287: int + test288: int + test289: int + test290: int + test291: int + test292: int + test293: int + test294: int + test295: int + test296: int + test297: int + test298: int + test299: int + test300: int + test301: int + test302: int + test303: int + test304: int + test305: int + test306: int + test307: int + test308: int + test309: int + test310: int + test311: int + test312: int + test313: int + test314: int + test315: int + test316: int + test317: int + test318: int + test319: int + test320: int + test321: int + test322: int + test323: int + test324: int + test325: int + test326: int + test327: int + test328: int + test329: int + test330: int + test331: int + test332: int + test333: int + test334: int + test335: int + test336: int + test337: int + test338: int + test339: int + test340: int + test341: int + test342: int + test343: int + test344: int + test345: int + test346: int + test347: int + test348: int + test349: int + test350: int + test351: int + test352: int + test353: int + test354: int + test355: int + test356: int + test357: int + test358: int + test359: int + test360: int + test361: int + test362: int + test363: int + test364: int + test365: int + test366: int + test367: int + test368: int + test369: int + test370: int + test371: int + test372: int + test373: int + test374: int + test375: int + test376: int + test377: int + test378: int + test379: int + test380: int + test381: int + test382: int + test383: int + test384: int + test385: int + test386: int + test387: int + test388: int + test389: int + test390: int + test391: int + test392: int + test393: int + test394: int + test395: int + test396: int + test397: int + test398: int + test399: int + test400: int + test401: int + test402: int + test403: int + test404: int + test405: int + test406: int + test407: int + test408: int + test409: int + test410: int + test411: int + test412: int + test413: int + test414: int + test415: int + test416: int + test417: int + test418: int + test419: int + test420: int + test421: int + test422: int + test423: int + test424: int + test425: int + test426: int + test427: int + test428: int + test429: int + test430: int + test431: int + test432: int + test433: int + test434: int + test435: int + test436: int + test437: int + test438: int + test439: int + test440: int + test441: int + test442: int + test443: int + test444: int + test445: int + test446: int + test447: int + test448: int + test449: int + test450: int + test451: int + test452: int + test453: int + test454: int + test455: int + test456: int + test457: int + test458: int + test459: int + test460: int + test461: int + test462: int + test463: int + test464: int + test465: int + test466: int + test467: int + test468: int + test469: int + test470: int + test471: int + test472: int + test473: int + test474: int + test475: int + test476: int + test477: int + test478: int + test479: int + test480: int + test481: int + test482: int + test483: int + test484: int + test485: int + test486: int + test487: int + test488: int + test489: int + test490: int + test491: int + test492: int + test493: int + test494: int + test495: int + test496: int + test497: int + test498: int + test499: int + test500: int + test501: int + test502: int + test503: int + test504: int + test505: int + test506: int + test507: int + test508: int + test509: int + test510: int + test511: int + test512: int + test513: int + test514: int + test515: int + test516: int + test517: int + test518: int + test519: int + test520: int + test521: int + test522: int + test523: int + test524: int + test525: int + test526: int + test527: int + test528: int + test529: int + test530: int + test531: int + test532: int + test533: int + test534: int + test535: int + test536: int + test537: int + test538: int + test539: int + test540: int + test541: int + test542: int + test543: int + test544: int + test545: int + test546: int + test547: int + test548: int + test549: int + test550: int + test551: int + test552: int + test553: int + test554: int + test555: int + test556: int + test557: int + test558: int + test559: int + test560: int + test561: int + test562: int + test563: int + test564: int + test565: int + test566: int + test567: int + test568: int + test569: int + test570: int + test571: int + test572: int + test573: int + test574: int + test575: int + test576: int + test577: int + test578: int + test579: int + test580: int + test581: int + test582: int + test583: int + test584: int + test585: int + test586: int + test587: int + test588: int + test589: int + test590: int + test591: int + test592: int + test593: int + test594: int + test595: int + test596: int + test597: int + test598: int + test599: int + test600: int + test601: int + test602: int + test603: int + test604: int + test605: int + test606: int + test607: int + test608: int + test609: int + test610: int + test611: int + test612: int + test613: int + test614: int + test615: int + test616: int + test617: int + test618: int + test619: int + test620: int + test621: int + test622: int + test623: int + test624: int + test625: int + test626: int + test627: int + test628: int + test629: int + test630: int + test631: int + test632: int + test633: int + test634: int + test635: int + test636: int + test637: int + test638: int + test639: int + test640: int + test641: int + test642: int + test643: int + test644: int + test645: int + test646: int + test647: int + test648: int + test649: int + test650: int + test651: int + test652: int + test653: int + test654: int + test655: int + test656: int + test657: int + test658: int + test659: int + test660: int + test661: int + test662: int + test663: int + test664: int + test665: int + test666: int + test667: int + test668: int + test669: int + test670: int + test671: int + test672: int + test673: int + test674: int + test675: int + test676: int + test677: int + test678: int + test679: int + test680: int + test681: int + test682: int + test683: int + test684: int + test685: int + test686: int + test687: int + test688: int + test689: int + test690: int + test691: int + test692: int + test693: int + test694: int + test695: int + test696: int + test697: int + test698: int + test699: int + test700: int + test701: int + test702: int + test703: int + test704: int + test705: int + test706: int + test707: int + test708: int + test709: int + test710: int + test711: int + test712: int + test713: int + test714: int + test715: int + test716: int + test717: int + test718: int + test719: int + test720: int + test721: int + test722: int + test723: int + test724: int + test725: int + test726: int + test727: int + test728: int + test729: int + test730: int + test731: int + test732: int + test733: int + test734: int + test735: int + test736: int + test737: int + test738: int + test739: int + test740: int + test741: int + test742: int + test743: int + test744: int + test745: int + test746: int + test747: int + test748: int + test749: int + test750: int + test751: int + test752: int + test753: int + test754: int + test755: int + test756: int + test757: int + test758: int + test759: int + test760: int + test761: int + test762: int + test763: int + test764: int + test765: int + test766: int + test767: int + test768: int + test769: int + test770: int + test771: int + test772: int + test773: int + test774: int + test775: int + test776: int + test777: int + test778: int + test779: int + test780: int + test781: int + test782: int + test783: int + test784: int + test785: int + test786: int + test787: int + test788: int + test789: int + test790: int + test791: int + test792: int + test793: int + test794: int + test795: int + test796: int + test797: int + test798: int + test799: int + test800: int + test801: int + test802: int + test803: int + test804: int + test805: int + test806: int + test807: int + test808: int + test809: int + test810: int + test811: int + test812: int + test813: int + test814: int + test815: int + test816: int + test817: int + test818: int + test819: int + test820: int + test821: int + test822: int + test823: int + test824: int + test825: int + test826: int + test827: int + test828: int + test829: int + test830: int + test831: int + test832: int + test833: int + test834: int + test835: int + test836: int + test837: int + test838: int + test839: int + test840: int + test841: int + test842: int + test843: int + test844: int + test845: int + test846: int + test847: int + test848: int + test849: int + test850: int + test851: int + test852: int + test853: int + test854: int + test855: int + test856: int + test857: int + test858: int + test859: int + test860: int + test861: int + test862: int + test863: int + test864: int + test865: int + test866: int + test867: int + test868: int + test869: int + test870: int + test871: int + test872: int + test873: int + test874: int + test875: int + test876: int + test877: int + test878: int + test879: int + test880: int + test881: int + test882: int + test883: int + test884: int + test885: int + test886: int + test887: int + test888: int + test889: int + test890: int + test891: int + test892: int + test893: int + test894: int + test895: int + test896: int + test897: int + test898: int + test899: int + test900: int + test901: int + test902: int + test903: int + test904: int + test905: int + test906: int + test907: int + test908: int + test909: int + test910: int + test911: int + test912: int + test913: int + test914: int + test915: int + test916: int + test917: int + test918: int + test919: int + test920: int + test921: int + test922: int + test923: int + test924: int + test925: int + test926: int + test927: int + test928: int + test929: int + test930: int + test931: int + test932: int + test933: int + test934: int + test935: int + test936: int + test937: int + test938: int + test939: int + test940: int + test941: int + test942: int + test943: int + test944: int + test945: int + test946: int + test947: int + test948: int + test949: int + test950: int + test951: int + test952: int + test953: int + test954: int + test955: int + test956: int + test957: int + test958: int + test959: int + test960: int + test961: int + test962: int + test963: int + test964: int + test965: int + test966: int + test967: int + test968: int + test969: int + test970: int + test971: int + test972: int + test973: int + test974: int + test975: int + test976: int + test977: int + test978: int + test979: int + test980: int + test981: int + test982: int + test983: int + test984: int + test985: int + test986: int + test987: int + test988: int + test989: int + test990: int + test991: int + test992: int + test993: int + test994: int + test995: int + test996: int + test997: int + test998: int + test999: int + test1000: int + } + [] let main _ = 0 """ From 2b1e29cf2bb96b1a87cba68b32594b5270e800a1 Mon Sep 17 00:00:00 2001 From: TIHan Date: Fri, 25 Oct 2019 14:05:30 -0700 Subject: [PATCH 096/146] Quick re-name for OptimizeMethod(s) to OptimizeObjectExprMethod(s). --- src/fsharp/Optimizer.fs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index e89f3e4284..f1df754803 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -1932,7 +1932,7 @@ let rec OptimizeExpr cenv (env: IncrementalOptimizationEnv) expr = /// Optimize/analyze an object expression and OptimizeObjectExpr cenv env (ty, baseValOpt, basecall, overrides, iimpls, m) = let basecallR, basecallinfo = OptimizeExpr cenv env basecall - let overridesR, overrideinfos = OptimizeMethods cenv env baseValOpt overrides + let overridesR, overrideinfos = OptimizeObjectExprMethods cenv env baseValOpt overrides let iimplsR, iimplsinfos = OptimizeInterfaceImpls cenv env baseValOpt iimpls let exprR=mkObjExpr(ty, baseValOpt, basecallR, overridesR, iimplsR, m) exprR, { TotalSize=closureTotalSize + basecallinfo.TotalSize + AddTotalSizes overrideinfos + AddTotalSizes iimplsinfos @@ -1942,10 +1942,10 @@ and OptimizeObjectExpr cenv env (ty, baseValOpt, basecall, overrides, iimpls, m) Info=UnknownValue} /// Optimize/analyze the methods that make up an object expression -and OptimizeMethods cenv env baseValOpt methods = - OptimizeList (OptimizeMethod cenv env baseValOpt) methods +and OptimizeObjectExprMethods cenv env baseValOpt methods = + OptimizeList (OptimizeObjectExprMethod cenv env baseValOpt) methods -and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = +and OptimizeObjectExprMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = let env = {env with latestBoundId=Some tmethod.Id; functionVal = None} let env = BindTypeVarsToUnknown tps env let env = BindInternalValsToUnknown cenv vs env @@ -1965,7 +1965,7 @@ and OptimizeInterfaceImpls cenv env baseValOpt iimpls = /// Optimize/analyze the interface implementations that form part of an object expression and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = - let overridesR, overridesinfos = OptimizeMethods cenv env baseValOpt overrides + let overridesR, overridesinfos = OptimizeObjectExprMethods cenv env baseValOpt overrides (ty, overridesR), { TotalSize = AddTotalSizes overridesinfos FunctionSize = 1 From 0a6764ab46b1b7d5528e8c4ea100b225d8a464af Mon Sep 17 00:00:00 2001 From: TIHan Date: Fri, 25 Oct 2019 17:19:04 -0700 Subject: [PATCH 097/146] Delaying lambdas working --- src/fsharp/CompileOptions.fs | 2 +- src/fsharp/IlxGen.fs | 114 ++++++++++++++++++----------------- src/fsharp/Optimizer.fs | 21 ++++++- src/fsharp/Optimizer.fsi | 4 ++ 4 files changed, 84 insertions(+), 57 deletions(-) diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c4595d2dc2..c7ef18c94b 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -395,7 +395,7 @@ let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true } - tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = 6 } + tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = Optimizer.LambdaInlineThresholdDefault } tcConfigB.doDetuple <- true tcConfigB.doTLR <- true tcConfigB.doFinalSimplify <- true diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index d743c30e52..857365a6fc 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2353,9 +2353,7 @@ and CodeGenMethodForExpr cenv mgbuf (spReq, entryPointInfo, methodName, eenv, al CodeGenMethod cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, (fun cgbuf eenv -> GenExpr cenv cgbuf eenv spReq expr0 sequel0), expr0.Range) - code - - + code //-------------------------------------------------------------------------- // Generate sequels @@ -4305,9 +4303,65 @@ and GenGenericParams cenv eenv tps = and GenGenericArgs m (tyenv: TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c, m])) +and DelayGenMethodForLambda cenv mgbuf eenv args = + cenv.delayedGenMethods.Enqueue(fun cenv -> GenMethodForLambda cenv mgbuf eenv args) + +and GenMethodForLambda cenv mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) = + let g = cenv.g + let ilCloBody = CodeGenMethodForExpr cenv mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + let cloTypeDefs = + if isLocalTypeFunc then + + // Work out the contract type and generate a class with an abstract method for this type + let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo + let ilContractTypeRef = ilContractTySpec.TypeRef + let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams + let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object + + let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] + let ilContractTypeDef = + ILTypeDef(name = ilContractTypeRef.Name, + layout = ILTypeDefLayout.Auto, + attributes = enum 0, + genericParams = ilContractGenericParams, + customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], + fields = emptyILFields, + events= emptyILEvents, + properties = emptyILProperties, + methods= mkILMethods ilContractMeths, + methodImpls= emptyILMethodImpls, + nestedTypes=emptyILTypeDefs, + implements = [], + extends= Some g.ilg.typ_Object, + securityDecls= emptyILSecurityDecls) + + // the contract type is an abstract type and not sealed + let ilContractTypeDef = + ilContractTypeDef + .WithAbstract(true) + .WithAccess(ComputeTypeAccess ilContractTypeRef true) + .WithSerializable(true) + .WithSpecialName(true) + .WithLayout(ILTypeDefLayout.Auto) + .WithInitSemantics(ILTypeInit.BeforeField) + .WithEncoding(ILDefaultPInvokeEncoding.Auto) + + mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) + + let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) + let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.cloILFormalRetTy), MethodBody.IL ilCloBody) ] + let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, []) + cloTypeDefs + + else + GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, []) + CountClosure() + for cloTypeDef in cloTypeDefs do + mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) + /// Generate the closure class for a function and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr = - let g = cenv.g match expr with | Expr.Lambda (_, _, _, _, _, m, _) | Expr.TyLambda (_, _, _, m, _) -> @@ -4319,57 +4373,7 @@ and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Some v -> [(v, BranchCallClosure (cloinfo.cloArityInfo))] | _ -> [] - let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - let cloTypeDefs = - if isLocalTypeFunc then - - // Work out the contract type and generate a class with an abstract method for this type - let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo - let ilContractTypeRef = ilContractTySpec.TypeRef - let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams - let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object - - let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] - let ilContractTypeDef = - ILTypeDef(name = ilContractTypeRef.Name, - layout = ILTypeDefLayout.Auto, - attributes = enum 0, - genericParams = ilContractGenericParams, - customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], - fields = emptyILFields, - events= emptyILEvents, - properties = emptyILProperties, - methods= mkILMethods ilContractMeths, - methodImpls= emptyILMethodImpls, - nestedTypes=emptyILTypeDefs, - implements = [], - extends= Some g.ilg.typ_Object, - securityDecls= emptyILSecurityDecls) - - // the contract type is an abstract type and not sealed - let ilContractTypeDef = - ilContractTypeDef - .WithAbstract(true) - .WithAccess(ComputeTypeAccess ilContractTypeRef true) - .WithSerializable(true) - .WithSpecialName(true) - .WithLayout(ILTypeDefLayout.Auto) - .WithInitSemantics(ILTypeInit.BeforeField) - .WithEncoding(ILDefaultPInvokeEncoding.Auto) - - cgbuf.mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) - - let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) - let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.cloILFormalRetTy), MethodBody.IL ilCloBody) ] - let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, []) - cloTypeDefs - - else - GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, []) - CountClosure() - for cloTypeDef in cloTypeDefs do - cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) + DelayGenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) cloinfo, m | _ -> failwith "GenLambda: not a lambda" diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index f1df754803..1fbc5338f4 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -278,6 +278,8 @@ let [] localOptDefault = true let [] crossModuleOptDefault = true +let [] LambdaInlineThresholdDefault = 6 + type OptimizationSettings = { abstractBigTargets : bool @@ -315,7 +317,7 @@ type OptimizationSettings = bigTargetSize = 100 veryBigExprSize = 3000 crossModuleOptUser = None - lambdaInlineThreshold = 6 + lambdaInlineThreshold = LambdaInlineThresholdDefault reportingPhase = false reportNoNeedToTailcall = false reportFunctionSizes = false @@ -419,6 +421,14 @@ type IncrementalOptimizationEnv = override x.ToString() = "" +let SetAbstractBigTargetsOn cenv = + { cenv with + settings = + { cenv.settings with + abstractBigTargets = true + } + } + //------------------------------------------------------------------------- // IsPartialExprVal - is the expr fully known? //------------------------------------------------------------------------- @@ -2911,6 +2921,15 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = let env = Option.foldBack (BindInternalValToUnknown cenv) baseValOpt env let env = BindTypeVarsToUnknown tps env let env = List.foldBack (BindInternalValsToUnknown cenv) vsl env + + let cenv = + match env.functionVal with + // If the lambda is compiler generated and we are in the reporing phase, allow lambda to be split. + // As an example, allows generated GetHashCode/Equals/CompareTo/etc methods to be split even if optimizations were off. + // This helps prevent stack overflows in IlxGen.fs. + | Some (v, _) when v.IsCompilerGenerated && cenv.settings.reportingPhase -> SetAbstractBigTargetsOn cenv + | _ -> cenv + let env = BindInternalValsToUnknown cenv (Option.toList baseValOpt) env let bodyR, bodyinfo = OptimizeExpr cenv env body let exprR = mkMemberLambdas m tps ctorThisValOpt baseValOpt vsl (bodyR, bodyty) diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi index e156a26d3e..d489878da1 100644 --- a/src/fsharp/Optimizer.fsi +++ b/src/fsharp/Optimizer.fsi @@ -62,3 +62,7 @@ val UnionOptimizationInfos: seq -> CcuOptimizationInfo val ExprHasEffect: TcGlobals -> Expr -> bool val internal u_CcuOptimizationInfo : TastPickle.ReaderState -> CcuOptimizationInfo + +// REVIEW: We need to put the literal at the end of a file due to a bug that causes a compiler error when a literal is put in the middle other signature constructs. +[] +val LambdaInlineThresholdDefault : int = 6 \ No newline at end of file From 4df0e4fdd8703bc73b352a6fb699865650de6208 Mon Sep 17 00:00:00 2001 From: TIHan Date: Mon, 28 Oct 2019 13:33:57 -0700 Subject: [PATCH 098/146] fix regression test, starting to add linear match expr handling --- src/fsharp/IlxGen.fs | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 857365a6fc..8015d3ef1c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -1913,8 +1913,7 @@ let CodeGenThen cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, c (* Call the given code generator *) codeGenFunction cgbuf { eenv with withinSEH = false liveLocals = IntMap.empty() - innerVals = innerVals - inLoop = false } + innerVals = innerVals } let locals, maxStack, lab2pc, code, exnSpecs, hasSequencePoints = cgbuf.Close() @@ -2212,6 +2211,15 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | None -> match expr with + // Most generation of linear expressions is implemented routinely using tailcalls and the correct sequels. + // This is because the element of expansion happens to be the final thing generated in most cases. However + // for large lists we have to process the linearity separately + | Expr.Sequential _ + | Expr.Let _ + | LinearOpExpr _ + | LinearMatchExpr _ -> + GenLinearExpr cenv cgbuf eenv sp expr sequel (* canProcessSequencePoint *) false id |> ignore + | Expr.Const (c, m, ty) -> GenConstant cenv cgbuf eenv (c, m, ty) sequel | Expr.Match (spBind, exprm, tree, targets, m, ty) -> @@ -2235,14 +2243,6 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | Expr.Val (v, _, m) -> GenGetVal cenv cgbuf eenv (v, m) sequel - // Most generation of linear expressions is implemented routinely using tailcalls and the correct sequels. - // This is because the element of expansion happens to be the final thing generated in most cases. However - // for large lists we have to process the linearity separately - | Expr.Sequential _ - | Expr.Let _ - | LinearOpExpr _ -> - GenLinearExpr cenv cgbuf eenv sp expr sequel (* canProcessSequencePoint *) false id |> ignore - | Expr.Op (op, tyargs, args, m) -> match op, args, tyargs with | TOp.ExnConstr c, _, _ -> @@ -2555,6 +2555,10 @@ and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) = let expr = stripExpr expr + + if canProcessSequencePoint then + ProcessSequencePointForExpr cenv cgbuf sp expr + match expr with | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> GenExprs cenv cgbuf eenv argsFront @@ -2564,9 +2568,6 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: Fake)) | Expr.Sequential (e1, e2, specialSeqFlag, spSeq, _) -> - if canProcessSequencePoint then - ProcessSequencePointForExpr cenv cgbuf sp expr - // Compiler generated sequential executions result in suppressions of sequence points on both // left and right of the sequence let spAction, spExpr = @@ -2585,9 +2586,6 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: contf Fake | Expr.Let (bind, body, _, _) -> - if canProcessSequencePoint then - ProcessSequencePointForExpr cenv cgbuf sp expr - // This case implemented here to get a guaranteed tailcall // Make sure we generate the sequence point outside the scope of the variable let startScope, endScope as scopeMarks = StartDelayedLocalScope "let" cgbuf @@ -2609,6 +2607,11 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // Generate the body GenLinearExpr cenv cgbuf eenv spBody body (EndLocalScope(sequel, endScope)) (* canProcessSequencePoint *) true contf + | LinearMatchExpr (spBind, exprm, tree, tg1, e2, spTg2, m, ty) -> + GenMatch cenv cgbuf eenv (spBind, exprm, tree, [|tg1;TTarget([], e2, spTg2)|], m, ty) sequel + contf Fake + //| Expr.Match (spBind, exprm, tree, targets, m, ty) -> + // GenMatch cenv cgbuf eenv (spBind, exprm, tree, targets, m, ty) sequel | _ -> GenExpr cenv cgbuf eenv sp expr sequel contf Fake From bf043555cc2fbdc46c270122de5122af132f9ccc Mon Sep 17 00:00:00 2001 From: TIHan Date: Mon, 28 Oct 2019 15:03:35 -0700 Subject: [PATCH 099/146] Minor code move --- src/fsharp/IlxGen.fs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 8015d3ef1c..fa3dc68962 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2560,13 +2560,6 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: ProcessSequencePointForExpr cenv cgbuf sp expr match expr with - | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> - GenExprs cenv cgbuf eenv argsFront - GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue (* canProcessSequencePoint *) true (contf << (fun Fake -> - GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) - GenSequel cenv eenv.cloc cgbuf sequel - Fake)) - | Expr.Sequential (e1, e2, specialSeqFlag, spSeq, _) -> // Compiler generated sequential executions result in suppressions of sequence points on both // left and right of the sequence @@ -2610,8 +2603,14 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: | LinearMatchExpr (spBind, exprm, tree, tg1, e2, spTg2, m, ty) -> GenMatch cenv cgbuf eenv (spBind, exprm, tree, [|tg1;TTarget([], e2, spTg2)|], m, ty) sequel contf Fake - //| Expr.Match (spBind, exprm, tree, targets, m, ty) -> - // GenMatch cenv cgbuf eenv (spBind, exprm, tree, targets, m, ty) sequel + + | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> + GenExprs cenv cgbuf eenv argsFront + GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue (* canProcessSequencePoint *) true (contf << (fun Fake -> + GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) + GenSequel cenv eenv.cloc cgbuf sequel + Fake)) + | _ -> GenExpr cenv cgbuf eenv sp expr sequel contf Fake @@ -4376,7 +4375,10 @@ and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Some v -> [(v, BranchCallClosure (cloinfo.cloArityInfo))] | _ -> [] - DelayGenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) + if cenv.exprRecursionDepth > 0 then + DelayGenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) + else + GenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) cloinfo, m | _ -> failwith "GenLambda: not a lambda" From 99a2ca25dcb3ef1f3c93e523b04a600d563a89ea Mon Sep 17 00:00:00 2001 From: TIHan Date: Tue, 29 Oct 2019 17:54:57 -0700 Subject: [PATCH 100/146] Might have it working --- src/fsharp/IlxGen.fs | 270 +++++++++++++++--------- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- 2 files changed, 172 insertions(+), 100 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index fa3dc68962..a4e170fe6c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2217,13 +2217,13 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | Expr.Sequential _ | Expr.Let _ | LinearOpExpr _ - | LinearMatchExpr _ -> + | Expr.Match _ -> GenLinearExpr cenv cgbuf eenv sp expr sequel (* canProcessSequencePoint *) false id |> ignore | Expr.Const (c, m, ty) -> GenConstant cenv cgbuf eenv (c, m, ty) sequel - | Expr.Match (spBind, exprm, tree, targets, m, ty) -> - GenMatch cenv cgbuf eenv (spBind, exprm, tree, targets, m, ty) sequel + //| Expr.Match (spBind, exprm, tree, targets, m, ty) -> + // GenMatch cenv cgbuf eenv (spBind, exprm, tree, targets, m, ty) sequel | Expr.LetRec (binds, body, m, _) -> GenLetRec cenv cgbuf eenv (binds, body, m) sequel | Expr.Lambda _ | Expr.TyLambda _ -> @@ -2553,14 +2553,34 @@ and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = GenAllocUnionCaseCore cenv cgbuf eenv (c,tyargs,args.Length,m) GenSequel cenv eenv.cloc cgbuf sequel -and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) = - let expr = stripExpr expr +and GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin = + CG.SetMarkToHere cgbuf afterJoin + + //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... + CG.SetStack cgbuf stackAfterJoin + // If any values are left on the stack after the join then we're certainly going to do something with them + // For example, we may be about to execute a 'stloc' for + // + // let y2 = if System.DateTime.Now.Year < 2000 then 1 else 2 + // + // or a 'stelem' for + // + // arr.[0] <- if System.DateTime.Now.Year > 2000 then 1 else 2 + // + // In both cases, any instructions that come after this point will be falsely associated with the last branch of the control + // prior to the join point. This is base, e.g. see FSharp 1.0 bug 5155 + if not (isNil stackAfterJoin) then + cgbuf.EmitStartOfHiddenCode() - if canProcessSequencePoint then - ProcessSequencePointForExpr cenv cgbuf sp expr + GenSequel cenv eenv.cloc cgbuf sequelAfterJoin +and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) = + let expr = stripExpr expr match expr with | Expr.Sequential (e1, e2, specialSeqFlag, spSeq, _) -> + if canProcessSequencePoint then + ProcessSequencePointForExpr cenv cgbuf sp expr + // Compiler generated sequential executions result in suppressions of sequence points on both // left and right of the sequence let spAction, spExpr = @@ -2579,6 +2599,9 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: contf Fake | Expr.Let (bind, body, _, _) -> + if canProcessSequencePoint then + ProcessSequencePointForExpr cenv cgbuf sp expr + // This case implemented here to get a guaranteed tailcall // Make sure we generate the sequence point outside the scope of the variable let startScope, endScope as scopeMarks = StartDelayedLocalScope "let" cgbuf @@ -2600,11 +2623,80 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // Generate the body GenLinearExpr cenv cgbuf eenv spBody body (EndLocalScope(sequel, endScope)) (* canProcessSequencePoint *) true contf - | LinearMatchExpr (spBind, exprm, tree, tg1, e2, spTg2, m, ty) -> - GenMatch cenv cgbuf eenv (spBind, exprm, tree, [|tg1;TTarget([], e2, spTg2)|], m, ty) sequel - contf Fake + | Expr.Match (spBind, _exprm, tree, targets, m, ty) -> + if canProcessSequencePoint then + ProcessSequencePointForExpr cenv cgbuf sp expr + + match spBind with + | SequencePointAtBinding m -> CG.EmitSeqPoint cgbuf m + | NoSequencePointAtDoBinding + | NoSequencePointAtLetBinding + | NoSequencePointAtInvisibleBinding + | NoSequencePointAtStickyBinding -> () + + // The target of branch needs a sequence point. + // If we don't give it one it will get entirely the wrong sequence point depending on earlier codegen + // Note we're not interested in having pattern matching and decision trees reveal their inner working. + // Hence at each branch target we 'reassert' the overall sequence point that was active as we came into the match. + // + // NOTE: sadly this causes multiple sequence points to appear for the "initial" location of an if/then/else or match. + let activeSP = cgbuf.GetLastSequencePoint() + let repeatSP() = + match activeSP with + | None -> () + | Some src -> + if activeSP <> cgbuf.GetLastSequencePoint() then + CG.EmitSeqPoint cgbuf src + + // First try the common cases where we don't need a join point. + match tree with + | TDSuccess _ -> + failwith "internal error: matches that immediately succeed should have been normalized using mkAndSimplifyMatch" + + | _ -> + // Create a join point + let stackAtTargets = cgbuf.GetCurrentStack() // the stack at the target of each clause + let (sequelOnBranches, afterJoin, stackAfterJoin, sequelAfterJoin) = GenJoinPoint cenv cgbuf "match" eenv ty m sequel + + // Stack: "stackAtTargets" is "stack prior to any match-testing" and also "stack at the start of each branch-RHS". + // match-testing (dtrees) should not contribute to the stack. + // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. + // Since code is branching and joining, the cgbuf stack is maintained manually. + let genTargetInfo, targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches + if genTargetInfo.contents.IsSome then + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value + + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget (* canProcessSequencePoint *) true (contf << (fun Fake -> + if targetQueue.Count > 0 then + targetQueue.Dequeue()() + + if genTargetInfo.contents.IsSome then + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value + + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget (* canProcessSequencePoint *) true (contf << (fun Fake -> + if targetQueue.Count > 0 then + targetQueue.Dequeue()() + + while genTargetInfo.contents.IsSome do + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value + GenExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget + if targetQueue.Count > 0 then + targetQueue.Dequeue()() + + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + Fake)) + else + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + Fake + )) + else + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + contf Fake | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> + if canProcessSequencePoint then + ProcessSequencePointForExpr cenv cgbuf sp expr + GenExprs cenv cgbuf eenv argsFront GenLinearExpr cenv cgbuf eenv SPSuppress argLast Continue (* canProcessSequencePoint *) true (contf << (fun Fake -> GenAllocUnionCaseCore cenv cgbuf eenv (c, tyargs, argsFront.Length + 1, m) @@ -4788,69 +4880,45 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = let afterJoin = CG.GenerateDelayMark cgbuf (pos + "_join") // go to the join point Br afterJoin, afterJoin, stackAfterJoin, sequel - -and GenMatch cenv cgbuf eenv (spBind, _exprm, tree, targets, m, ty) sequel = - - match spBind with - | SequencePointAtBinding m -> CG.EmitSeqPoint cgbuf m - | NoSequencePointAtDoBinding - | NoSequencePointAtLetBinding - | NoSequencePointAtInvisibleBinding - | NoSequencePointAtStickyBinding -> () - - // The target of branch needs a sequence point. - // If we don't give it one it will get entirely the wrong sequence point depending on earlier codegen - // Note we're not interested in having pattern matching and decision trees reveal their inner working. - // Hence at each branch target we 'reassert' the overall sequence point that was active as we came into the match. - // - // NOTE: sadly this causes multiple sequence points to appear for the "initial" location of an if/then/else or match. - let activeSP = cgbuf.GetLastSequencePoint() - let repeatSP() = - match activeSP with - | None -> () - | Some src -> - if activeSP <> cgbuf.GetLastSequencePoint() then - CG.EmitSeqPoint cgbuf src - - // First try the common cases where we don't need a join point. - match tree with - | TDSuccess _ -> - failwith "internal error: matches that immediately succeed should have been normalized using mkAndSimplifyMatch" - - | _ -> - // Create a join point - let stackAtTargets = cgbuf.GetCurrentStack() // the stack at the target of each clause - let (sequelOnBranches, afterJoin, stackAfterJoin, sequelAfterJoin) = GenJoinPoint cenv cgbuf "match" eenv ty m sequel - - // Stack: "stackAtTargets" is "stack prior to any match-testing" and also "stack at the start of each branch-RHS". - // match-testing (dtrees) should not contribute to the stack. - // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. - // Since code is branching and joining, the cgbuf stack is maintained manually. - GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches - CG.SetMarkToHere cgbuf afterJoin - - //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... - CG.SetStack cgbuf stackAfterJoin - // If any values are left on the stack after the join then we're certainly going to do something with them - // For example, we may be about to execute a 'stloc' for - // - // let y2 = if System.DateTime.Now.Year < 2000 then 1 else 2 - // - // or a 'stelem' for - // - // arr.[0] <- if System.DateTime.Now.Year > 2000 then 1 else 2 - // - // In both cases, any instructions that come after this point will be falsely associated with the last branch of the control - // prior to the join point. This is base, e.g. see FSharp 1.0 bug 5155 - if not (isNil stackAfterJoin) then - cgbuf.EmitStartOfHiddenCode() - - GenSequel cenv eenv.cloc cgbuf sequelAfterJoin // Accumulate the decision graph as we go -and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel = - let targetInfos = GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets repeatSP (IntMap.empty()) sequel - GenPostponedDecisionTreeTargets cenv cgbuf stackAtTargets targetInfos sequel +and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Ref<(IlxGenEnv * EmitSequencePointState * Expr * sequel) option> * Queue unit>) = + let rec genDecisions targetInfos decisions (genTargetInfo: ref<_>) (queue: Queue<_>) = + match decisions with + | [] -> + let remaining = + targetInfos + |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) + |> Seq.filter (fun (KeyValue(_, (_, isTargetPostponed))) -> isTargetPostponed) + |> List.ofSeq + + let rec genRemaining remaining (genTargetInfo: ref<_>) (queue: Queue<_>) = + match remaining with + | [] -> genTargetInfo := None + | (KeyValue(targetIdx, (targetInfo, _))) :: rest -> + genTargetInfo := Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) + queue.Enqueue(fun () -> genRemaining rest genTargetInfo queue) + + genRemaining remaining genTargetInfo queue + + | (inplabOpt, tree) :: rest -> + match tree with + | TDSuccess(es, targetIdx) -> + let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + match genTargetInfoOpt with + | Some _ -> + genTargetInfo := genTargetInfoOpt + queue.Enqueue(fun () -> genDecisions targetInfos rest genTargetInfo queue) + | _ -> + genDecisions targetInfos rest genTargetInfo queue + | _ -> + let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel + genDecisions targetInfos (newDecisions @ rest) genTargetInfo queue + + let res = ref None + let queue = Queue() + genDecisions (IntMap.empty()) [(None, tree)] res queue + res, queue and TryFindTargetInfo targetInfos n = match IntMap.tryFind n targetInfos with @@ -4861,7 +4929,7 @@ and TryFindTargetInfo targetInfos n = /// /// When inplabOpt is "Some inplab", we are assuming an existing branch to "inplab" and can optionally /// set inplab to point to another location if no codegen is required. -and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel = +and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel : (Mark option * DecisionTree) list = CG.SetStack cgbuf stackAtTargets // Set the expected initial stack. match tree with | TDBind(bind, rest) -> @@ -4876,8 +4944,9 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree CG.SetMarkToHere cgbuf endScope GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel - | TDSuccess (es, targetIdx) -> - GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + | TDSuccess (_es, _targetIdx) -> + [(inplabOpt, tree)] + //GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel | TDSwitch(e, cases, dflt, m) -> GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP targetInfos sequel @@ -4908,7 +4977,7 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx vs |> List.rev |> List.iter (fun v -> GenStoreVal cenv cgbuf eenvAtTarget v.Range v) CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel) - targetInfos + targetInfos, None | None -> @@ -4921,22 +4990,21 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx let targetInfo = (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) // In debug mode push all decision tree targets to after the switching - let isTargetPostponed = - if cenv.opts.localOptimizationsAreOn then - GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel - false + let isTargetPostponed, genTargetInfoOpt = + if cenv.opts.localOptimizationsAreOn then + false, Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) else CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkBeforeBinds.CodeLabel) - true + true, None let targetInfos = IntMap.add targetIdx (targetInfo, isTargetPostponed) targetInfos - targetInfos + targetInfos, genTargetInfoOpt -and GenPostponedDecisionTreeTargets cenv cgbuf stackAtTargets targetInfos sequel = - let targetInfos = targetInfos |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) - for (KeyValue(targetIdx, (targetInfo, isTargetPostponed))) in targetInfos do - if isTargetPostponed then - GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel +//and GenPostponedDecisionTreeTargets cenv cgbuf stackAtTargets targetInfos sequel : unit = +// let targetInfos = targetInfos |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) +// for (KeyValue(targetIdx, (targetInfo, isTargetPostponed))) in targetInfos do +// if isTargetPostponed then +// GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) sequel = CG.SetMarkToHere cgbuf targetMarkBeforeBinds @@ -4959,10 +5027,11 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBefore GenBindings cenv cgbuf eenvAtTarget binds CG.SetMarkToHere cgbuf targetMarkAfterBinds CG.SetStack cgbuf stackAtTargets - GenExpr cenv cgbuf eenvAtTarget spExpr successExpr (EndLocalScope(sequel, endScope)) + (eenvAtTarget, spExpr, successExpr, (EndLocalScope(sequel, endScope))) + //GenExpr cenv cgbuf eenvAtTarget spExpr successExpr (EndLocalScope(sequel, endScope)) -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel : (Mark option * DecisionTree) list = let g = cenv.g let m = e.Range match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab @@ -5082,23 +5151,22 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel | _ -> error(InternalError("these matches should never be needed", switchm)) -and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel = +and GenDecisionTreeCases _cenv cgbuf stackAtTargets _eenv _targets _repeatSP _targetInfos defaultTargetOpt caseLabels cases _sequel = assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. let targetInfos = match defaultTargetOpt with - | Some defaultTarget -> GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel - | None -> targetInfos + | Some defaultTarget -> [(None, defaultTarget)] //GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel + | None -> [] - let targetInfos = - (targetInfos, caseLabels, cases) |||> List.fold2 (fun targetInfos caseLabel (TCase(_, caseTree)) -> - GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel) - targetInfos + (targetInfos, caseLabels, cases) + |||> List.fold2 (fun targetInfos caseLabel (TCase(_, caseTree)) -> targetInfos @ [(Some caseLabel, caseTree)]) + //GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel) // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets repeatSP targetInfos sequel = +and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTree failureTree targets _repeatSP _targetInfos sequel : (Mark option * DecisionTree) list = let g = cenv.g match successTree, failureTree with @@ -5125,7 +5193,7 @@ and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree CG.EmitInstrs cgbuf (pop 0) (Push [g.ilg.typ_Bool]) [mkLdcInt32 0 ] CG.EmitInstrs cgbuf (pop 1) Push0 [AI_ceq] GenSequel cenv cloc cgbuf sequel - targetInfos + [] | _ -> failwith "internal error: GenDecisionTreeTest during bool elim" @@ -5147,9 +5215,13 @@ and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree | Choice2Of2 i -> CG.EmitInstr cgbuf pops pushes i CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) - let targetInfos = GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel + [ + (None, successTree) + (Some failure, failureTree) + ] + // let targetInfos = GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel - GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel + // GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel /// Generate fixups for letrec bindings and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFieldSpec, e2, _m) = diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index f4f5e008f0..50102ab21c 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -143,7 +143,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US";"--warn:5";"--optimize-"|] + OtherOptions = [|"--preferreduilang:en-US";"--warn:5"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) From f3ab72cc06d2494daa0330ac764edb6d4b259d9a Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 14:17:36 -0700 Subject: [PATCH 101/146] Fixed issue not capturing locals --- src/fsharp/IlxGen.fs | 91 ++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 54 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index a4e170fe6c..4eed15abc5 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2662,36 +2662,20 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // match-testing (dtrees) should not contribute to the stack. // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. - let genTargetInfo, targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches - if genTargetInfo.contents.IsSome then - let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value - - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget (* canProcessSequencePoint *) true (contf << (fun Fake -> - if targetQueue.Count > 0 then - targetQueue.Dequeue()() - - if genTargetInfo.contents.IsSome then - let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value - - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget (* canProcessSequencePoint *) true (contf << (fun Fake -> - if targetQueue.Count > 0 then - targetQueue.Dequeue()() - - while genTargetInfo.contents.IsSome do - let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = genTargetInfo.contents.Value - GenExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget - if targetQueue.Count > 0 then - targetQueue.Dequeue()() - - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - Fake)) - else - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - Fake - )) - else - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - contf Fake + let targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches + let rec processTarget (targetQueue: Queue<_>) = + if targetQueue.Count > 0 then + let f = targetQueue.Dequeue() + let genTargetInfoOpt = f () + match genTargetInfoOpt with + | Some(eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> + GenExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget + | _ -> + () + processTarget targetQueue + processTarget targetQueue + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + contf Fake | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> if canProcessSequencePoint then @@ -4882,8 +4866,8 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = Br afterJoin, afterJoin, stackAfterJoin, sequel // Accumulate the decision graph as we go -and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Ref<(IlxGenEnv * EmitSequencePointState * Expr * sequel) option> * Queue unit>) = - let rec genDecisions targetInfos decisions (genTargetInfo: ref<_>) (queue: Queue<_>) = +and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Queue (IlxGenEnv * EmitSequencePointState * Expr * sequel) option>) = + let rec genDecisions targetInfos decisions (queue: Queue<_>) = match decisions with | [] -> let remaining = @@ -4892,33 +4876,32 @@ and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeat |> Seq.filter (fun (KeyValue(_, (_, isTargetPostponed))) -> isTargetPostponed) |> List.ofSeq - let rec genRemaining remaining (genTargetInfo: ref<_>) (queue: Queue<_>) = + let rec genRemaining remaining (queue: Queue<_>) = match remaining with - | [] -> genTargetInfo := None + | [] -> None | (KeyValue(targetIdx, (targetInfo, _))) :: rest -> - genTargetInfo := Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) - queue.Enqueue(fun () -> genRemaining rest genTargetInfo queue) + queue.Enqueue(fun () -> genRemaining rest queue) + Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) - genRemaining remaining genTargetInfo queue + genRemaining remaining queue - | (inplabOpt, tree) :: rest -> + | (inplabOpt, eenv, tree) :: rest -> match tree with | TDSuccess(es, targetIdx) -> let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel match genTargetInfoOpt with | Some _ -> - genTargetInfo := genTargetInfoOpt - queue.Enqueue(fun () -> genDecisions targetInfos rest genTargetInfo queue) + queue.Enqueue(fun () -> genDecisions targetInfos rest queue) + genTargetInfoOpt | _ -> - genDecisions targetInfos rest genTargetInfo queue + genDecisions targetInfos rest queue | _ -> let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel - genDecisions targetInfos (newDecisions @ rest) genTargetInfo queue + genDecisions targetInfos (newDecisions @ rest) queue - let res = ref None let queue = Queue() - genDecisions (IntMap.empty()) [(None, tree)] res queue - res, queue + queue.Enqueue (fun () -> genDecisions (IntMap.empty()) [(None, eenv, tree)] queue) + queue and TryFindTargetInfo targetInfos n = match IntMap.tryFind n targetInfos with @@ -4929,7 +4912,7 @@ and TryFindTargetInfo targetInfos n = /// /// When inplabOpt is "Some inplab", we are assuming an existing branch to "inplab" and can optionally /// set inplab to point to another location if no codegen is required. -and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel : (Mark option * DecisionTree) list = +and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel = CG.SetStack cgbuf stackAtTargets // Set the expected initial stack. match tree with | TDBind(bind, rest) -> @@ -4945,7 +4928,7 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel | TDSuccess (_es, _targetIdx) -> - [(inplabOpt, tree)] + [(inplabOpt, eenv, tree)] //GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel | TDSwitch(e, cases, dflt, m) -> @@ -5031,7 +5014,7 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBefore //GenExpr cenv cgbuf eenvAtTarget spExpr successExpr (EndLocalScope(sequel, endScope)) -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel : (Mark option * DecisionTree) list = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel = let g = cenv.g let m = e.Range match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab @@ -5151,22 +5134,22 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel | _ -> error(InternalError("these matches should never be needed", switchm)) -and GenDecisionTreeCases _cenv cgbuf stackAtTargets _eenv _targets _repeatSP _targetInfos defaultTargetOpt caseLabels cases _sequel = +and GenDecisionTreeCases _cenv cgbuf stackAtTargets eenv _targets _repeatSP _targetInfos defaultTargetOpt caseLabels cases _sequel = assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. let targetInfos = match defaultTargetOpt with - | Some defaultTarget -> [(None, defaultTarget)] //GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel + | Some defaultTarget -> [(None, eenv, defaultTarget)] //GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel | None -> [] (targetInfos, caseLabels, cases) - |||> List.fold2 (fun targetInfos caseLabel (TCase(_, caseTree)) -> targetInfos @ [(Some caseLabel, caseTree)]) + |||> List.fold2 (fun targetInfos caseLabel (TCase(_, caseTree)) -> targetInfos @ [(Some caseLabel, eenv, caseTree)]) //GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel) // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTree failureTree targets _repeatSP _targetInfos sequel : (Mark option * DecisionTree) list = +and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTree failureTree targets _repeatSP _targetInfos sequel = let g = cenv.g match successTree, failureTree with @@ -5216,8 +5199,8 @@ and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTre CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) [ - (None, successTree) - (Some failure, failureTree) + (None, eenv, successTree) + (Some failure, eenv, failureTree) ] // let targetInfos = GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel From 95d8f1b6c11ec88273f6d3074059dd9727a6ae7b Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 17:25:34 -0700 Subject: [PATCH 102/146] Cleanup, tests pass --- src/fsharp/IlxGen.fs | 81 +- src/fsharp/Optimizer.fs | 9 - .../fsharp/Compiler/Stress/LargeExprTests.fs | 899 ++++++++++++++++++ 3 files changed, 934 insertions(+), 55 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 4eed15abc5..b6e0926233 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2663,19 +2663,23 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. let targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches - let rec processTarget (targetQueue: Queue<_>) = + + let rec popTargetQueue () = if targetQueue.Count > 0 then - let f = targetQueue.Dequeue() + let f = targetQueue.Dequeue () let genTargetInfoOpt = f () match genTargetInfoOpt with - | Some(eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> - GenExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget - | _ -> - () - processTarget targetQueue - processTarget targetQueue - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - contf Fake + | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + popTargetQueue () + ) + | _ -> + popTargetQueue () + else + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + contf Fake + + popTargetQueue () | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> if canProcessSequencePoint then @@ -4879,9 +4883,9 @@ and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeat let rec genRemaining remaining (queue: Queue<_>) = match remaining with | [] -> None - | (KeyValue(targetIdx, (targetInfo, _))) :: rest -> + | (KeyValue(_, (targetInfo, _))) :: rest -> queue.Enqueue(fun () -> genRemaining rest queue) - Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) + Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) genRemaining remaining queue @@ -4927,12 +4931,11 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree CG.SetMarkToHere cgbuf endScope GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel - | TDSuccess (_es, _targetIdx) -> - [(inplabOpt, eenv, tree)] - //GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + | TDSuccess _ -> + [(inplabOpt, eenv, tree)] | TDSwitch(e, cases, dflt, m) -> - GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP targetInfos sequel + GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP sequel and GetTarget (targets:_[]) n = if n >= targets.Length then failwith "GetTarget: target not found in decision tree" @@ -4975,7 +4978,7 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx // In debug mode push all decision tree targets to after the switching let isTargetPostponed, genTargetInfoOpt = if cenv.opts.localOptimizationsAreOn then - false, Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel) + false, Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) else CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkBeforeBinds.CodeLabel) true, None @@ -4983,13 +4986,7 @@ and GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx let targetInfos = IntMap.add targetIdx (targetInfo, isTargetPostponed) targetInfos targetInfos, genTargetInfoOpt -//and GenPostponedDecisionTreeTargets cenv cgbuf stackAtTargets targetInfos sequel : unit = -// let targetInfos = targetInfos |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) -// for (KeyValue(targetIdx, (targetInfo, isTargetPostponed))) in targetInfos do -// if isTargetPostponed then -// GenDecisionTreeTarget cenv cgbuf stackAtTargets targetIdx targetInfo sequel - -and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) sequel = +and GenDecisionTreeTarget cenv cgbuf stackAtTargets (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope) sequel = CG.SetMarkToHere cgbuf targetMarkBeforeBinds let spExpr = (match spTarget with SequencePointAtTarget -> SPAlways | SuppressSequencePointAtTarget _ -> SPSuppress) @@ -5011,10 +5008,8 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets _targetIdx (targetMarkBefore CG.SetMarkToHere cgbuf targetMarkAfterBinds CG.SetStack cgbuf stackAtTargets (eenvAtTarget, spExpr, successExpr, (EndLocalScope(sequel, endScope))) - //GenExpr cenv cgbuf eenvAtTarget spExpr successExpr (EndLocalScope(sequel, endScope)) - -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP sequel = let g = cenv.g let m = e.Range match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab @@ -5024,7 +5019,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau // optimize a test against a boolean value, i.e. the all-important if-then-else | TCase(DecisionTreeTest.Const(Const.Bool b), successTree) :: _ -> let failureTree = (match defaultTargetOpt with None -> cases.Tail.Head.CaseTree | Some d -> d) - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets repeatSP targetInfos sequel + GenDecisionTreeTest cenv eenv.cloc cgbuf e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets sequel // // Remove a single test for a union case . Union case tests are always exa //| [ TCase(DecisionTreeTest.UnionCase _, successTree) ] when (defaultTargetOpt.IsNone) -> @@ -5041,7 +5036,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly g.compilingFslib c.TyconRef - GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel + GenDecisionTreeTest cenv eenv.cloc cgbuf e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets sequel | _ -> let caseLabels = List.map (fun _ -> CG.GenerateDelayMark cgbuf "switch_case") cases @@ -5072,7 +5067,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau BI_brtrue | _ -> failwith "internal error: GenDecisionTreeSwitch" CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (bi, (List.head caseLabels).CodeLabel)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel + GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase", switchm)) | DecisionTreeTest.UnionCase (hdc, tyargs) -> @@ -5088,7 +5083,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let avoidHelpers = entityRefInThisAssembly g.compilingFslib hdc.TyconRef EraseUnions.emitDataSwitch g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec, dests) CG.EmitInstrs cgbuf (pop 1) Push0 [ ] // push/pop to match the line above - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel + GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases | DecisionTreeTest.Const c -> GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -5131,25 +5126,24 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau CG.EmitInstr cgbuf (pop 1) Push0 (I_switch destinationLabels) else error(InternalError("non-dense integer matches not implemented in codegen - these should have been removed by the pattern match compiler", switchm)) - GenDecisionTreeCases cenv cgbuf stackAtTargets eenv targets repeatSP targetInfos defaultTargetOpt caseLabels cases sequel + GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases | _ -> error(InternalError("these matches should never be needed", switchm)) -and GenDecisionTreeCases _cenv cgbuf stackAtTargets eenv _targets _repeatSP _targetInfos defaultTargetOpt caseLabels cases _sequel = +and GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases = assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. - let targetInfos = + let decisions = match defaultTargetOpt with - | Some defaultTarget -> [(None, eenv, defaultTarget)] //GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel + | Some defaultTarget -> [(None, eenv, defaultTarget)] | None -> [] - (targetInfos, caseLabels, cases) - |||> List.fold2 (fun targetInfos caseLabel (TCase(_, caseTree)) -> targetInfos @ [(Some caseLabel, eenv, caseTree)]) - //GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel) + (decisions, caseLabels, cases) + |||> List.fold2 (fun decisions caseLabel (TCase(_, caseTree)) -> decisions @ [(Some caseLabel, eenv, caseTree)]) // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTree failureTree targets _repeatSP _targetInfos sequel = +and GenDecisionTreeTest cenv cloc cgbuf e tester eenv successTree failureTree targets sequel = let g = cenv.g match successTree, failureTree with @@ -5198,13 +5192,8 @@ and GenDecisionTreeTest cenv cloc cgbuf _stackAtTargets e tester eenv successTre | Choice2Of2 i -> CG.EmitInstr cgbuf pops pushes i CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) - [ - (None, eenv, successTree) - (Some failure, eenv, failureTree) - ] - // let targetInfos = GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel - - // GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel + [ (None, eenv, successTree) + (Some failure, eenv, failureTree) ] /// Generate fixups for letrec bindings and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFieldSpec, e2, _m) = diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 1fbc5338f4..8f55424368 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -2921,15 +2921,6 @@ and OptimizeLambdas (vspec: Val option) cenv env topValInfo e ety = let env = Option.foldBack (BindInternalValToUnknown cenv) baseValOpt env let env = BindTypeVarsToUnknown tps env let env = List.foldBack (BindInternalValsToUnknown cenv) vsl env - - let cenv = - match env.functionVal with - // If the lambda is compiler generated and we are in the reporing phase, allow lambda to be split. - // As an example, allows generated GetHashCode/Equals/CompareTo/etc methods to be split even if optimizations were off. - // This helps prevent stack overflows in IlxGen.fs. - | Some (v, _) when v.IsCompilerGenerated && cenv.settings.reportingPhase -> SetAbstractBigTargetsOn cenv - | _ -> cenv - let env = BindInternalValsToUnknown cenv (Option.toList baseValOpt) env let bodyR, bodyinfo = OptimizeExpr cenv env body let exprR = mkMemberLambdas m tps ctorThisValOpt baseValOpt vsl (bodyR, bodyty) diff --git a/tests/fsharp/Compiler/Stress/LargeExprTests.fs b/tests/fsharp/Compiler/Stress/LargeExprTests.fs index 004f737cb9..1773d1994d 100644 --- a/tests/fsharp/Compiler/Stress/LargeExprTests.fs +++ b/tests/fsharp/Compiler/Stress/LargeExprTests.fs @@ -3038,6 +3038,905 @@ type TestRecord = test998: int test999: int test1000: int + test1101: int + test1102: int + test1103: int + test1104: int + test1105: int + test1106: int + test1107: int + test1108: int + test1109: int + test1110: int + test1111: int + test1112: int + test1113: int + test1114: int + test1115: int + test1116: int + test1117: int + test1118: int + test1119: int + test1120: int + test1121: int + test1122: int + test1123: int + test1124: int + test1125: int + test1126: int + test1127: int + test1128: int + test1129: int + test1130: int + test1131: int + test1132: int + test1133: int + test1134: int + test1135: int + test1136: int + test1137: int + test1138: int + test1139: int + test1140: int + test1141: int + test1142: int + test1143: int + test1144: int + test1145: int + test1146: int + test1147: int + test1148: int + test1149: int + test1150: int + test1151: int + test1152: int + test1153: int + test1154: int + test1155: int + test1156: int + test1157: int + test1158: int + test1159: int + test1160: int + test1161: int + test1162: int + test1163: int + test1164: int + test1165: int + test1166: int + test1167: int + test1168: int + test1169: int + test1170: int + test1171: int + test1172: int + test1173: int + test1174: int + test1175: int + test1176: int + test1177: int + test1178: int + test1179: int + test1180: int + test1181: int + test1182: int + test1183: int + test1184: int + test1185: int + test1186: int + test1187: int + test1188: int + test1189: int + test1190: int + test1191: int + test1192: int + test1193: int + test1194: int + test1195: int + test1196: int + test1197: int + test1198: int + test1199: int + test1200: int + test1201: int + test1202: int + test1203: int + test1204: int + test1205: int + test1206: int + test1207: int + test1208: int + test1209: int + test1210: int + test1211: int + test1212: int + test1213: int + test1214: int + test1215: int + test1216: int + test1217: int + test1218: int + test1219: int + test1220: int + test1221: int + test1222: int + test1223: int + test1224: int + test1225: int + test1226: int + test1227: int + test1228: int + test1229: int + test1230: int + test1231: int + test1232: int + test1233: int + test1234: int + test1235: int + test1236: int + test1237: int + test1238: int + test1239: int + test1240: int + test1241: int + test1242: int + test1243: int + test1244: int + test1245: int + test1246: int + test1247: int + test1248: int + test1249: int + test1250: int + test1251: int + test1252: int + test1253: int + test1254: int + test1255: int + test1256: int + test1257: int + test1258: int + test1259: int + test1260: int + test1261: int + test1262: int + test1263: int + test1264: int + test1265: int + test1266: int + test1267: int + test1268: int + test1269: int + test1270: int + test1271: int + test1272: int + test1273: int + test1274: int + test1275: int + test1276: int + test1277: int + test1278: int + test1279: int + test1280: int + test1281: int + test1282: int + test1283: int + test1284: int + test1285: int + test1286: int + test1287: int + test1288: int + test1289: int + test1290: int + test1291: int + test1292: int + test1293: int + test1294: int + test1295: int + test1296: int + test1297: int + test1298: int + test1299: int + test1300: int + test1301: int + test1302: int + test1303: int + test1304: int + test1305: int + test1306: int + test1307: int + test1308: int + test1309: int + test1310: int + test1311: int + test1312: int + test1313: int + test1314: int + test1315: int + test1316: int + test1317: int + test1318: int + test1319: int + test1320: int + test1321: int + test1322: int + test1323: int + test1324: int + test1325: int + test1326: int + test1327: int + test1328: int + test1329: int + test1330: int + test1331: int + test1332: int + test1333: int + test1334: int + test1335: int + test1336: int + test1337: int + test1338: int + test1339: int + test1340: int + test1341: int + test1342: int + test1343: int + test1344: int + test1345: int + test1346: int + test1347: int + test1348: int + test1349: int + test1350: int + test1351: int + test1352: int + test1353: int + test1354: int + test1355: int + test1356: int + test1357: int + test1358: int + test1359: int + test1360: int + test1361: int + test1362: int + test1363: int + test1364: int + test1365: int + test1366: int + test1367: int + test1368: int + test1369: int + test1370: int + test1371: int + test1372: int + test1373: int + test1374: int + test1375: int + test1376: int + test1377: int + test1378: int + test1379: int + test1380: int + test1381: int + test1382: int + test1383: int + test1384: int + test1385: int + test1386: int + test1387: int + test1388: int + test1389: int + test1390: int + test1391: int + test1392: int + test1393: int + test1394: int + test1395: int + test1396: int + test1397: int + test1398: int + test1399: int + test1400: int + test1401: int + test1402: int + test1403: int + test1404: int + test1405: int + test1406: int + test1407: int + test1408: int + test1409: int + test1410: int + test1411: int + test1412: int + test1413: int + test1414: int + test1415: int + test1416: int + test1417: int + test1418: int + test1419: int + test1420: int + test1421: int + test1422: int + test1423: int + test1424: int + test1425: int + test1426: int + test1427: int + test1428: int + test1429: int + test1430: int + test1431: int + test1432: int + test1433: int + test1434: int + test1435: int + test1436: int + test1437: int + test1438: int + test1439: int + test1440: int + test1441: int + test1442: int + test1443: int + test1444: int + test1445: int + test1446: int + test1447: int + test1448: int + test1449: int + test1450: int + test1451: int + test1452: int + test1453: int + test1454: int + test1455: int + test1456: int + test1457: int + test1458: int + test1459: int + test1460: int + test1461: int + test1462: int + test1463: int + test1464: int + test1465: int + test1466: int + test1467: int + test1468: int + test1469: int + test1470: int + test1471: int + test1472: int + test1473: int + test1474: int + test1475: int + test1476: int + test1477: int + test1478: int + test1479: int + test1480: int + test1481: int + test1482: int + test1483: int + test1484: int + test1485: int + test1486: int + test1487: int + test1488: int + test1489: int + test1490: int + test1491: int + test1492: int + test1493: int + test1494: int + test1495: int + test1496: int + test1497: int + test1498: int + test1499: int + test1500: int + test1501: int + test1502: int + test1503: int + test1504: int + test1505: int + test1506: int + test1507: int + test1508: int + test1509: int + test1510: int + test1511: int + test1512: int + test1513: int + test1514: int + test1515: int + test1516: int + test1517: int + test1518: int + test1519: int + test1520: int + test1521: int + test1522: int + test1523: int + test1524: int + test1525: int + test1526: int + test1527: int + test1528: int + test1529: int + test1530: int + test1531: int + test1532: int + test1533: int + test1534: int + test1535: int + test1536: int + test1537: int + test1538: int + test1539: int + test1540: int + test1541: int + test1542: int + test1543: int + test1544: int + test1545: int + test1546: int + test1547: int + test1548: int + test1549: int + test1550: int + test1551: int + test1552: int + test1553: int + test1554: int + test1555: int + test1556: int + test1557: int + test1558: int + test1559: int + test1560: int + test1561: int + test1562: int + test1563: int + test1564: int + test1565: int + test1566: int + test1567: int + test1568: int + test1569: int + test1570: int + test1571: int + test1572: int + test1573: int + test1574: int + test1575: int + test1576: int + test1577: int + test1578: int + test1579: int + test1580: int + test1581: int + test1582: int + test1583: int + test1584: int + test1585: int + test1586: int + test1587: int + test1588: int + test1589: int + test1590: int + test1591: int + test1592: int + test1593: int + test1594: int + test1595: int + test1596: int + test1597: int + test1598: int + test1599: int + test1600: int + test1601: int + test1602: int + test1603: int + test1604: int + test1605: int + test1606: int + test1607: int + test1608: int + test1609: int + test1610: int + test1611: int + test1612: int + test1613: int + test1614: int + test1615: int + test1616: int + test1617: int + test1618: int + test1619: int + test1620: int + test1621: int + test1622: int + test1623: int + test1624: int + test1625: int + test1626: int + test1627: int + test1628: int + test1629: int + test1630: int + test1631: int + test1632: int + test1633: int + test1634: int + test1635: int + test1636: int + test1637: int + test1638: int + test1639: int + test1640: int + test1641: int + test1642: int + test1643: int + test1644: int + test1645: int + test1646: int + test1647: int + test1648: int + test1649: int + test1650: int + test1651: int + test1652: int + test1653: int + test1654: int + test1655: int + test1656: int + test1657: int + test1658: int + test1659: int + test1660: int + test1661: int + test1662: int + test1663: int + test1664: int + test1665: int + test1666: int + test1667: int + test1668: int + test1669: int + test1670: int + test1671: int + test1672: int + test1673: int + test1674: int + test1675: int + test1676: int + test1677: int + test1678: int + test1679: int + test1680: int + test1681: int + test1682: int + test1683: int + test1684: int + test1685: int + test1686: int + test1687: int + test1688: int + test1689: int + test1690: int + test1691: int + test1692: int + test1693: int + test1694: int + test1695: int + test1696: int + test1697: int + test1698: int + test1699: int + test1700: int + test1701: int + test1702: int + test1703: int + test1704: int + test1705: int + test1706: int + test1707: int + test1708: int + test1709: int + test1710: int + test1711: int + test1712: int + test1713: int + test1714: int + test1715: int + test1716: int + test1717: int + test1718: int + test1719: int + test1720: int + test1721: int + test1722: int + test1723: int + test1724: int + test1725: int + test1726: int + test1727: int + test1728: int + test1729: int + test1730: int + test1731: int + test1732: int + test1733: int + test1734: int + test1735: int + test1736: int + test1737: int + test1738: int + test1739: int + test1740: int + test1741: int + test1742: int + test1743: int + test1744: int + test1745: int + test1746: int + test1747: int + test1748: int + test1749: int + test1750: int + test1751: int + test1752: int + test1753: int + test1754: int + test1755: int + test1756: int + test1757: int + test1758: int + test1759: int + test1760: int + test1761: int + test1762: int + test1763: int + test1764: int + test1765: int + test1766: int + test1767: int + test1768: int + test1769: int + test1770: int + test1771: int + test1772: int + test1773: int + test1774: int + test1775: int + test1776: int + test1777: int + test1778: int + test1779: int + test1780: int + test1781: int + test1782: int + test1783: int + test1784: int + test1785: int + test1786: int + test1787: int + test1788: int + test1789: int + test1790: int + test1791: int + test1792: int + test1793: int + test1794: int + test1795: int + test1796: int + test1797: int + test1798: int + test1799: int + test1800: int + test1801: int + test1802: int + test1803: int + test1804: int + test1805: int + test1806: int + test1807: int + test1808: int + test1809: int + test1810: int + test1811: int + test1812: int + test1813: int + test1814: int + test1815: int + test1816: int + test1817: int + test1818: int + test1819: int + test1820: int + test1821: int + test1822: int + test1823: int + test1824: int + test1825: int + test1826: int + test1827: int + test1828: int + test1829: int + test1830: int + test1831: int + test1832: int + test1833: int + test1834: int + test1835: int + test1836: int + test1837: int + test1838: int + test1839: int + test1840: int + test1841: int + test1842: int + test1843: int + test1844: int + test1845: int + test1846: int + test1847: int + test1848: int + test1849: int + test1850: int + test1851: int + test1852: int + test1853: int + test1854: int + test1855: int + test1856: int + test1857: int + test1858: int + test1859: int + test1860: int + test1861: int + test1862: int + test1863: int + test1864: int + test1865: int + test1866: int + test1867: int + test1868: int + test1869: int + test1870: int + test1871: int + test1872: int + test1873: int + test1874: int + test1875: int + test1876: int + test1877: int + test1878: int + test1879: int + test1880: int + test1881: int + test1882: int + test1883: int + test1884: int + test1885: int + test1886: int + test1887: int + test1888: int + test1889: int + test1890: int + test1891: int + test1892: int + test1893: int + test1894: int + test1895: int + test1896: int + test1897: int + test1898: int + test1899: int + test1900: int + test1901: int + test1902: int + test1903: int + test1904: int + test1905: int + test1906: int + test1907: int + test1908: int + test1909: int + test1910: int + test1911: int + test1912: int + test1913: int + test1914: int + test1915: int + test1916: int + test1917: int + test1918: int + test1919: int + test1920: int + test1921: int + test1922: int + test1923: int + test1924: int + test1925: int + test1926: int + test1927: int + test1928: int + test1929: int + test1930: int + test1931: int + test1932: int + test1933: int + test1934: int + test1935: int + test1936: int + test1937: int + test1938: int + test1939: int + test1940: int + test1941: int + test1942: int + test1943: int + test1944: int + test1945: int + test1946: int + test1947: int + test1948: int + test1949: int + test1950: int + test1951: int + test1952: int + test1953: int + test1954: int + test1955: int + test1956: int + test1957: int + test1958: int + test1959: int + test1960: int + test1961: int + test1962: int + test1963: int + test1964: int + test1965: int + test1966: int + test1967: int + test1968: int + test1969: int + test1970: int + test1971: int + test1972: int + test1973: int + test1974: int + test1975: int + test1976: int + test1977: int + test1978: int + test1979: int + test1980: int + test1981: int + test1982: int + test1983: int + test1984: int + test1985: int + test1986: int + test1987: int + test1988: int + test1989: int + test1990: int + test1991: int + test1992: int + test1993: int + test1994: int + test1995: int + test1996: int + test1997: int + test1998: int + test1999: int } [] From a1e04efd816d455dd113ff5110a147883328d160 Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 17:27:16 -0700 Subject: [PATCH 103/146] We do not need this anymore --- src/fsharp/Optimizer.fs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index 8f55424368..f4c1a4c95a 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -421,14 +421,6 @@ type IncrementalOptimizationEnv = override x.ToString() = "" -let SetAbstractBigTargetsOn cenv = - { cenv with - settings = - { cenv.settings with - abstractBigTargets = true - } - } - //------------------------------------------------------------------------- // IsPartialExprVal - is the expr fully known? //------------------------------------------------------------------------- From ee9a677f130ed78f5894c26c9c17eba1eec31e0f Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 17:29:02 -0700 Subject: [PATCH 104/146] Remove commented code --- src/fsharp/IlxGen.fs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index b6e0926233..6d9dedc737 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2222,8 +2222,6 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | Expr.Const (c, m, ty) -> GenConstant cenv cgbuf eenv (c, m, ty) sequel - //| Expr.Match (spBind, exprm, tree, targets, m, ty) -> - // GenMatch cenv cgbuf eenv (spBind, exprm, tree, targets, m, ty) sequel | Expr.LetRec (binds, body, m, _) -> GenLetRec cenv cgbuf eenv (binds, body, m) sequel | Expr.Lambda _ | Expr.TyLambda _ -> From f166d6e485f19e2de189164e72f18f2a956d5f40 Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 18:30:49 -0700 Subject: [PATCH 105/146] Changed test so coreclr can pass --- .../fsharp/Compiler/Stress/LargeExprTests.fs | 899 ------------------ 1 file changed, 899 deletions(-) diff --git a/tests/fsharp/Compiler/Stress/LargeExprTests.fs b/tests/fsharp/Compiler/Stress/LargeExprTests.fs index 1773d1994d..004f737cb9 100644 --- a/tests/fsharp/Compiler/Stress/LargeExprTests.fs +++ b/tests/fsharp/Compiler/Stress/LargeExprTests.fs @@ -3038,905 +3038,6 @@ type TestRecord = test998: int test999: int test1000: int - test1101: int - test1102: int - test1103: int - test1104: int - test1105: int - test1106: int - test1107: int - test1108: int - test1109: int - test1110: int - test1111: int - test1112: int - test1113: int - test1114: int - test1115: int - test1116: int - test1117: int - test1118: int - test1119: int - test1120: int - test1121: int - test1122: int - test1123: int - test1124: int - test1125: int - test1126: int - test1127: int - test1128: int - test1129: int - test1130: int - test1131: int - test1132: int - test1133: int - test1134: int - test1135: int - test1136: int - test1137: int - test1138: int - test1139: int - test1140: int - test1141: int - test1142: int - test1143: int - test1144: int - test1145: int - test1146: int - test1147: int - test1148: int - test1149: int - test1150: int - test1151: int - test1152: int - test1153: int - test1154: int - test1155: int - test1156: int - test1157: int - test1158: int - test1159: int - test1160: int - test1161: int - test1162: int - test1163: int - test1164: int - test1165: int - test1166: int - test1167: int - test1168: int - test1169: int - test1170: int - test1171: int - test1172: int - test1173: int - test1174: int - test1175: int - test1176: int - test1177: int - test1178: int - test1179: int - test1180: int - test1181: int - test1182: int - test1183: int - test1184: int - test1185: int - test1186: int - test1187: int - test1188: int - test1189: int - test1190: int - test1191: int - test1192: int - test1193: int - test1194: int - test1195: int - test1196: int - test1197: int - test1198: int - test1199: int - test1200: int - test1201: int - test1202: int - test1203: int - test1204: int - test1205: int - test1206: int - test1207: int - test1208: int - test1209: int - test1210: int - test1211: int - test1212: int - test1213: int - test1214: int - test1215: int - test1216: int - test1217: int - test1218: int - test1219: int - test1220: int - test1221: int - test1222: int - test1223: int - test1224: int - test1225: int - test1226: int - test1227: int - test1228: int - test1229: int - test1230: int - test1231: int - test1232: int - test1233: int - test1234: int - test1235: int - test1236: int - test1237: int - test1238: int - test1239: int - test1240: int - test1241: int - test1242: int - test1243: int - test1244: int - test1245: int - test1246: int - test1247: int - test1248: int - test1249: int - test1250: int - test1251: int - test1252: int - test1253: int - test1254: int - test1255: int - test1256: int - test1257: int - test1258: int - test1259: int - test1260: int - test1261: int - test1262: int - test1263: int - test1264: int - test1265: int - test1266: int - test1267: int - test1268: int - test1269: int - test1270: int - test1271: int - test1272: int - test1273: int - test1274: int - test1275: int - test1276: int - test1277: int - test1278: int - test1279: int - test1280: int - test1281: int - test1282: int - test1283: int - test1284: int - test1285: int - test1286: int - test1287: int - test1288: int - test1289: int - test1290: int - test1291: int - test1292: int - test1293: int - test1294: int - test1295: int - test1296: int - test1297: int - test1298: int - test1299: int - test1300: int - test1301: int - test1302: int - test1303: int - test1304: int - test1305: int - test1306: int - test1307: int - test1308: int - test1309: int - test1310: int - test1311: int - test1312: int - test1313: int - test1314: int - test1315: int - test1316: int - test1317: int - test1318: int - test1319: int - test1320: int - test1321: int - test1322: int - test1323: int - test1324: int - test1325: int - test1326: int - test1327: int - test1328: int - test1329: int - test1330: int - test1331: int - test1332: int - test1333: int - test1334: int - test1335: int - test1336: int - test1337: int - test1338: int - test1339: int - test1340: int - test1341: int - test1342: int - test1343: int - test1344: int - test1345: int - test1346: int - test1347: int - test1348: int - test1349: int - test1350: int - test1351: int - test1352: int - test1353: int - test1354: int - test1355: int - test1356: int - test1357: int - test1358: int - test1359: int - test1360: int - test1361: int - test1362: int - test1363: int - test1364: int - test1365: int - test1366: int - test1367: int - test1368: int - test1369: int - test1370: int - test1371: int - test1372: int - test1373: int - test1374: int - test1375: int - test1376: int - test1377: int - test1378: int - test1379: int - test1380: int - test1381: int - test1382: int - test1383: int - test1384: int - test1385: int - test1386: int - test1387: int - test1388: int - test1389: int - test1390: int - test1391: int - test1392: int - test1393: int - test1394: int - test1395: int - test1396: int - test1397: int - test1398: int - test1399: int - test1400: int - test1401: int - test1402: int - test1403: int - test1404: int - test1405: int - test1406: int - test1407: int - test1408: int - test1409: int - test1410: int - test1411: int - test1412: int - test1413: int - test1414: int - test1415: int - test1416: int - test1417: int - test1418: int - test1419: int - test1420: int - test1421: int - test1422: int - test1423: int - test1424: int - test1425: int - test1426: int - test1427: int - test1428: int - test1429: int - test1430: int - test1431: int - test1432: int - test1433: int - test1434: int - test1435: int - test1436: int - test1437: int - test1438: int - test1439: int - test1440: int - test1441: int - test1442: int - test1443: int - test1444: int - test1445: int - test1446: int - test1447: int - test1448: int - test1449: int - test1450: int - test1451: int - test1452: int - test1453: int - test1454: int - test1455: int - test1456: int - test1457: int - test1458: int - test1459: int - test1460: int - test1461: int - test1462: int - test1463: int - test1464: int - test1465: int - test1466: int - test1467: int - test1468: int - test1469: int - test1470: int - test1471: int - test1472: int - test1473: int - test1474: int - test1475: int - test1476: int - test1477: int - test1478: int - test1479: int - test1480: int - test1481: int - test1482: int - test1483: int - test1484: int - test1485: int - test1486: int - test1487: int - test1488: int - test1489: int - test1490: int - test1491: int - test1492: int - test1493: int - test1494: int - test1495: int - test1496: int - test1497: int - test1498: int - test1499: int - test1500: int - test1501: int - test1502: int - test1503: int - test1504: int - test1505: int - test1506: int - test1507: int - test1508: int - test1509: int - test1510: int - test1511: int - test1512: int - test1513: int - test1514: int - test1515: int - test1516: int - test1517: int - test1518: int - test1519: int - test1520: int - test1521: int - test1522: int - test1523: int - test1524: int - test1525: int - test1526: int - test1527: int - test1528: int - test1529: int - test1530: int - test1531: int - test1532: int - test1533: int - test1534: int - test1535: int - test1536: int - test1537: int - test1538: int - test1539: int - test1540: int - test1541: int - test1542: int - test1543: int - test1544: int - test1545: int - test1546: int - test1547: int - test1548: int - test1549: int - test1550: int - test1551: int - test1552: int - test1553: int - test1554: int - test1555: int - test1556: int - test1557: int - test1558: int - test1559: int - test1560: int - test1561: int - test1562: int - test1563: int - test1564: int - test1565: int - test1566: int - test1567: int - test1568: int - test1569: int - test1570: int - test1571: int - test1572: int - test1573: int - test1574: int - test1575: int - test1576: int - test1577: int - test1578: int - test1579: int - test1580: int - test1581: int - test1582: int - test1583: int - test1584: int - test1585: int - test1586: int - test1587: int - test1588: int - test1589: int - test1590: int - test1591: int - test1592: int - test1593: int - test1594: int - test1595: int - test1596: int - test1597: int - test1598: int - test1599: int - test1600: int - test1601: int - test1602: int - test1603: int - test1604: int - test1605: int - test1606: int - test1607: int - test1608: int - test1609: int - test1610: int - test1611: int - test1612: int - test1613: int - test1614: int - test1615: int - test1616: int - test1617: int - test1618: int - test1619: int - test1620: int - test1621: int - test1622: int - test1623: int - test1624: int - test1625: int - test1626: int - test1627: int - test1628: int - test1629: int - test1630: int - test1631: int - test1632: int - test1633: int - test1634: int - test1635: int - test1636: int - test1637: int - test1638: int - test1639: int - test1640: int - test1641: int - test1642: int - test1643: int - test1644: int - test1645: int - test1646: int - test1647: int - test1648: int - test1649: int - test1650: int - test1651: int - test1652: int - test1653: int - test1654: int - test1655: int - test1656: int - test1657: int - test1658: int - test1659: int - test1660: int - test1661: int - test1662: int - test1663: int - test1664: int - test1665: int - test1666: int - test1667: int - test1668: int - test1669: int - test1670: int - test1671: int - test1672: int - test1673: int - test1674: int - test1675: int - test1676: int - test1677: int - test1678: int - test1679: int - test1680: int - test1681: int - test1682: int - test1683: int - test1684: int - test1685: int - test1686: int - test1687: int - test1688: int - test1689: int - test1690: int - test1691: int - test1692: int - test1693: int - test1694: int - test1695: int - test1696: int - test1697: int - test1698: int - test1699: int - test1700: int - test1701: int - test1702: int - test1703: int - test1704: int - test1705: int - test1706: int - test1707: int - test1708: int - test1709: int - test1710: int - test1711: int - test1712: int - test1713: int - test1714: int - test1715: int - test1716: int - test1717: int - test1718: int - test1719: int - test1720: int - test1721: int - test1722: int - test1723: int - test1724: int - test1725: int - test1726: int - test1727: int - test1728: int - test1729: int - test1730: int - test1731: int - test1732: int - test1733: int - test1734: int - test1735: int - test1736: int - test1737: int - test1738: int - test1739: int - test1740: int - test1741: int - test1742: int - test1743: int - test1744: int - test1745: int - test1746: int - test1747: int - test1748: int - test1749: int - test1750: int - test1751: int - test1752: int - test1753: int - test1754: int - test1755: int - test1756: int - test1757: int - test1758: int - test1759: int - test1760: int - test1761: int - test1762: int - test1763: int - test1764: int - test1765: int - test1766: int - test1767: int - test1768: int - test1769: int - test1770: int - test1771: int - test1772: int - test1773: int - test1774: int - test1775: int - test1776: int - test1777: int - test1778: int - test1779: int - test1780: int - test1781: int - test1782: int - test1783: int - test1784: int - test1785: int - test1786: int - test1787: int - test1788: int - test1789: int - test1790: int - test1791: int - test1792: int - test1793: int - test1794: int - test1795: int - test1796: int - test1797: int - test1798: int - test1799: int - test1800: int - test1801: int - test1802: int - test1803: int - test1804: int - test1805: int - test1806: int - test1807: int - test1808: int - test1809: int - test1810: int - test1811: int - test1812: int - test1813: int - test1814: int - test1815: int - test1816: int - test1817: int - test1818: int - test1819: int - test1820: int - test1821: int - test1822: int - test1823: int - test1824: int - test1825: int - test1826: int - test1827: int - test1828: int - test1829: int - test1830: int - test1831: int - test1832: int - test1833: int - test1834: int - test1835: int - test1836: int - test1837: int - test1838: int - test1839: int - test1840: int - test1841: int - test1842: int - test1843: int - test1844: int - test1845: int - test1846: int - test1847: int - test1848: int - test1849: int - test1850: int - test1851: int - test1852: int - test1853: int - test1854: int - test1855: int - test1856: int - test1857: int - test1858: int - test1859: int - test1860: int - test1861: int - test1862: int - test1863: int - test1864: int - test1865: int - test1866: int - test1867: int - test1868: int - test1869: int - test1870: int - test1871: int - test1872: int - test1873: int - test1874: int - test1875: int - test1876: int - test1877: int - test1878: int - test1879: int - test1880: int - test1881: int - test1882: int - test1883: int - test1884: int - test1885: int - test1886: int - test1887: int - test1888: int - test1889: int - test1890: int - test1891: int - test1892: int - test1893: int - test1894: int - test1895: int - test1896: int - test1897: int - test1898: int - test1899: int - test1900: int - test1901: int - test1902: int - test1903: int - test1904: int - test1905: int - test1906: int - test1907: int - test1908: int - test1909: int - test1910: int - test1911: int - test1912: int - test1913: int - test1914: int - test1915: int - test1916: int - test1917: int - test1918: int - test1919: int - test1920: int - test1921: int - test1922: int - test1923: int - test1924: int - test1925: int - test1926: int - test1927: int - test1928: int - test1929: int - test1930: int - test1931: int - test1932: int - test1933: int - test1934: int - test1935: int - test1936: int - test1937: int - test1938: int - test1939: int - test1940: int - test1941: int - test1942: int - test1943: int - test1944: int - test1945: int - test1946: int - test1947: int - test1948: int - test1949: int - test1950: int - test1951: int - test1952: int - test1953: int - test1954: int - test1955: int - test1956: int - test1957: int - test1958: int - test1959: int - test1960: int - test1961: int - test1962: int - test1963: int - test1964: int - test1965: int - test1966: int - test1967: int - test1968: int - test1969: int - test1970: int - test1971: int - test1972: int - test1973: int - test1974: int - test1975: int - test1976: int - test1977: int - test1978: int - test1979: int - test1980: int - test1981: int - test1982: int - test1983: int - test1984: int - test1985: int - test1986: int - test1987: int - test1988: int - test1989: int - test1990: int - test1991: int - test1992: int - test1993: int - test1994: int - test1995: int - test1996: int - test1997: int - test1998: int - test1999: int } [] From d22a01844e93bd607cbe640451723d87f1514438 Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 18:48:39 -0700 Subject: [PATCH 106/146] Do not delay lambda generation for now --- src/fsharp/IlxGen.fs | 8 +------- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 6d9dedc737..cfaccfbe6c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4383,9 +4383,6 @@ and GenGenericParams cenv eenv tps = and GenGenericArgs m (tyenv: TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c, m])) -and DelayGenMethodForLambda cenv mgbuf eenv args = - cenv.delayedGenMethods.Enqueue(fun cenv -> GenMethodForLambda cenv mgbuf eenv args) - and GenMethodForLambda cenv mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) = let g = cenv.g let ilCloBody = CodeGenMethodForExpr cenv mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) @@ -4453,10 +4450,7 @@ and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Some v -> [(v, BranchCallClosure (cloinfo.cloArityInfo))] | _ -> [] - if cenv.exprRecursionDepth > 0 then - DelayGenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) - else - GenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) + GenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) cloinfo, m | _ -> failwith "GenLambda: not a lambda" diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index 50102ab21c..f4f5e008f0 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -143,7 +143,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US";"--warn:5"|] + OtherOptions = [|"--preferreduilang:en-US";"--warn:5";"--optimize-"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) From 1fe8051232b9e0617dba11587197b12c5b6dfb3c Mon Sep 17 00:00:00 2001 From: TIHan Date: Wed, 30 Oct 2019 18:53:09 -0700 Subject: [PATCH 107/146] Get rid of optimize flag in test --- tests/fsharp/Compiler/CompilerAssert.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/fsharp/Compiler/CompilerAssert.fs b/tests/fsharp/Compiler/CompilerAssert.fs index f4f5e008f0..50102ab21c 100644 --- a/tests/fsharp/Compiler/CompilerAssert.fs +++ b/tests/fsharp/Compiler/CompilerAssert.fs @@ -143,7 +143,7 @@ let main argv = 0""" ProjectId = None SourceFiles = [|"test.fs"|] #if !NETCOREAPP - OtherOptions = [|"--preferreduilang:en-US";"--warn:5";"--optimize-"|] + OtherOptions = [|"--preferreduilang:en-US";"--warn:5"|] #else OtherOptions = let assemblies = getNetCoreAppReferences |> Array.map (fun x -> sprintf "-r:%s" x) From eb333d994edd76d5595e63a565aa77a7994211b7 Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 18:08:15 -0700 Subject: [PATCH 108/146] Removed unrelated code changes to the fix --- src/fsharp/CompileOptions.fs | 2 +- src/fsharp/IlxGen.fs | 107 +++++++++++++++++------------------ src/fsharp/Optimizer.fs | 14 ++--- src/fsharp/Optimizer.fsi | 6 +- 4 files changed, 60 insertions(+), 69 deletions(-) diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c7ef18c94b..c4595d2dc2 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -395,7 +395,7 @@ let SetOptimizeOn(tcConfigB: TcConfigBuilder) = tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some true } tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some true } - tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = Optimizer.LambdaInlineThresholdDefault } + tcConfigB.optSettings <- { tcConfigB.optSettings with lambdaInlineThreshold = 6 } tcConfigB.doDetuple <- true tcConfigB.doTLR <- true tcConfigB.doFinalSimplify <- true diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index cfaccfbe6c..bb8468443b 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4383,62 +4383,9 @@ and GenGenericParams cenv eenv tps = and GenGenericArgs m (tyenv: TypeReprEnv) tps = tps |> DropErasedTypars |> List.map (fun c -> (mkILTyvarTy tyenv.[c, m])) -and GenMethodForLambda cenv mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) = - let g = cenv.g - let ilCloBody = CodeGenMethodForExpr cenv mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) - let ilCloTypeRef = cloinfo.cloSpec.TypeRef - let cloTypeDefs = - if isLocalTypeFunc then - - // Work out the contract type and generate a class with an abstract method for this type - let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo - let ilContractTypeRef = ilContractTySpec.TypeRef - let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams - let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object - - let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] - let ilContractTypeDef = - ILTypeDef(name = ilContractTypeRef.Name, - layout = ILTypeDefLayout.Auto, - attributes = enum 0, - genericParams = ilContractGenericParams, - customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], - fields = emptyILFields, - events= emptyILEvents, - properties = emptyILProperties, - methods= mkILMethods ilContractMeths, - methodImpls= emptyILMethodImpls, - nestedTypes=emptyILTypeDefs, - implements = [], - extends= Some g.ilg.typ_Object, - securityDecls= emptyILSecurityDecls) - - // the contract type is an abstract type and not sealed - let ilContractTypeDef = - ilContractTypeDef - .WithAbstract(true) - .WithAccess(ComputeTypeAccess ilContractTypeRef true) - .WithSerializable(true) - .WithSpecialName(true) - .WithLayout(ILTypeDefLayout.Auto) - .WithInitSemantics(ILTypeInit.BeforeField) - .WithEncoding(ILDefaultPInvokeEncoding.Auto) - - mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) - - let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) - let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.cloILFormalRetTy), MethodBody.IL ilCloBody) ] - let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, []) - cloTypeDefs - - else - GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, []) - CountClosure() - for cloTypeDef in cloTypeDefs do - mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) - /// Generate the closure class for a function and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr = + let g = cenv.g match expr with | Expr.Lambda (_, _, _, _, _, m, _) | Expr.TyLambda (_, _, _, m, _) -> @@ -4450,7 +4397,57 @@ and GenLambdaClosure cenv (cgbuf: CodeGenBuffer) eenv isLocalTypeFunc selfv expr | Some v -> [(v, BranchCallClosure (cloinfo.cloArityInfo))] | _ -> [] - GenMethodForLambda cenv cgbuf.mgbuf eenv (entryPointInfo, cloinfo, eenvinner, body, isLocalTypeFunc, m) + let ilCloBody = CodeGenMethodForExpr cenv cgbuf.mgbuf (SPAlways, entryPointInfo, cloinfo.cloName, eenvinner, 1, body, Return) + let ilCloTypeRef = cloinfo.cloSpec.TypeRef + let cloTypeDefs = + if isLocalTypeFunc then + + // Work out the contract type and generate a class with an abstract method for this type + let (ilContractGenericParams, ilContractMethTyargs, ilContractTySpec: ILTypeSpec, ilContractFormalRetTy) = GenNamedLocalTypeFuncContractInfo cenv eenv m cloinfo + let ilContractTypeRef = ilContractTySpec.TypeRef + let ilContractTy = mkILFormalBoxedTy ilContractTypeRef ilContractGenericParams + let ilContractCtor = mkILNonGenericEmptyCtor None g.ilg.typ_Object + + let ilContractMeths = [ilContractCtor; mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, ilContractMethTyargs, [], mkILReturn ilContractFormalRetTy, MethodBody.Abstract) ] + let ilContractTypeDef = + ILTypeDef(name = ilContractTypeRef.Name, + layout = ILTypeDefLayout.Auto, + attributes = enum 0, + genericParams = ilContractGenericParams, + customAttrs = mkILCustomAttrs [mkCompilationMappingAttr g (int SourceConstructFlags.Closure) ], + fields = emptyILFields, + events= emptyILEvents, + properties = emptyILProperties, + methods= mkILMethods ilContractMeths, + methodImpls= emptyILMethodImpls, + nestedTypes=emptyILTypeDefs, + implements = [], + extends= Some g.ilg.typ_Object, + securityDecls= emptyILSecurityDecls) + + // the contract type is an abstract type and not sealed + let ilContractTypeDef = + ilContractTypeDef + .WithAbstract(true) + .WithAccess(ComputeTypeAccess ilContractTypeRef true) + .WithSerializable(true) + .WithSpecialName(true) + .WithLayout(ILTypeDefLayout.Auto) + .WithInitSemantics(ILTypeInit.BeforeField) + .WithEncoding(ILDefaultPInvokeEncoding.Auto) + + cgbuf.mgbuf.AddTypeDef(ilContractTypeRef, ilContractTypeDef, false, false, None) + + let ilCtorBody = mkILMethodBody (true, [], 8, nonBranchingInstrsToCode (mkCallBaseConstructor(ilContractTy, [])), None ) + let cloMethods = [ mkILGenericVirtualMethod("DirectInvoke", ILMemberAccess.Assembly, cloinfo.localTypeFuncDirectILGenericParams, [], mkILReturn (cloinfo.cloILFormalRetTy), MethodBody.IL ilCloBody) ] + let cloTypeDefs = GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCtorBody, cloMethods, [], ilContractTy, []) + cloTypeDefs + + else + GenClosureTypeDefs cenv (ilCloTypeRef, cloinfo.cloILGenericParams, [], cloinfo.cloILFreeVars, cloinfo.ilCloLambdas, ilCloBody, [], [], g.ilg.typ_Object, []) + CountClosure() + for cloTypeDef in cloTypeDefs do + cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false, None) cloinfo, m | _ -> failwith "GenLambda: not a lambda" diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index f4c1a4c95a..e89f3e4284 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -278,8 +278,6 @@ let [] localOptDefault = true let [] crossModuleOptDefault = true -let [] LambdaInlineThresholdDefault = 6 - type OptimizationSettings = { abstractBigTargets : bool @@ -317,7 +315,7 @@ type OptimizationSettings = bigTargetSize = 100 veryBigExprSize = 3000 crossModuleOptUser = None - lambdaInlineThreshold = LambdaInlineThresholdDefault + lambdaInlineThreshold = 6 reportingPhase = false reportNoNeedToTailcall = false reportFunctionSizes = false @@ -1934,7 +1932,7 @@ let rec OptimizeExpr cenv (env: IncrementalOptimizationEnv) expr = /// Optimize/analyze an object expression and OptimizeObjectExpr cenv env (ty, baseValOpt, basecall, overrides, iimpls, m) = let basecallR, basecallinfo = OptimizeExpr cenv env basecall - let overridesR, overrideinfos = OptimizeObjectExprMethods cenv env baseValOpt overrides + let overridesR, overrideinfos = OptimizeMethods cenv env baseValOpt overrides let iimplsR, iimplsinfos = OptimizeInterfaceImpls cenv env baseValOpt iimpls let exprR=mkObjExpr(ty, baseValOpt, basecallR, overridesR, iimplsR, m) exprR, { TotalSize=closureTotalSize + basecallinfo.TotalSize + AddTotalSizes overrideinfos + AddTotalSizes iimplsinfos @@ -1944,10 +1942,10 @@ and OptimizeObjectExpr cenv env (ty, baseValOpt, basecall, overrides, iimpls, m) Info=UnknownValue} /// Optimize/analyze the methods that make up an object expression -and OptimizeObjectExprMethods cenv env baseValOpt methods = - OptimizeList (OptimizeObjectExprMethod cenv env baseValOpt) methods +and OptimizeMethods cenv env baseValOpt methods = + OptimizeList (OptimizeMethod cenv env baseValOpt) methods -and OptimizeObjectExprMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = +and OptimizeMethod cenv env baseValOpt (TObjExprMethod(slotsig, attribs, tps, vs, e, m) as tmethod) = let env = {env with latestBoundId=Some tmethod.Id; functionVal = None} let env = BindTypeVarsToUnknown tps env let env = BindInternalValsToUnknown cenv vs env @@ -1967,7 +1965,7 @@ and OptimizeInterfaceImpls cenv env baseValOpt iimpls = /// Optimize/analyze the interface implementations that form part of an object expression and OptimizeInterfaceImpl cenv env baseValOpt (ty, overrides) = - let overridesR, overridesinfos = OptimizeObjectExprMethods cenv env baseValOpt overrides + let overridesR, overridesinfos = OptimizeMethods cenv env baseValOpt overrides (ty, overridesR), { TotalSize = AddTotalSizes overridesinfos FunctionSize = 1 diff --git a/src/fsharp/Optimizer.fsi b/src/fsharp/Optimizer.fsi index d489878da1..bd656614bf 100644 --- a/src/fsharp/Optimizer.fsi +++ b/src/fsharp/Optimizer.fsi @@ -61,8 +61,4 @@ val UnionOptimizationInfos: seq -> CcuOptimizationInfo /// Check if an expression has an effect val ExprHasEffect: TcGlobals -> Expr -> bool -val internal u_CcuOptimizationInfo : TastPickle.ReaderState -> CcuOptimizationInfo - -// REVIEW: We need to put the literal at the end of a file due to a bug that causes a compiler error when a literal is put in the middle other signature constructs. -[] -val LambdaInlineThresholdDefault : int = 6 \ No newline at end of file +val internal u_CcuOptimizationInfo : TastPickle.ReaderState -> CcuOptimizationInfo \ No newline at end of file From 02b41ce378627288ccd167bf52bb8d3b0f059f2a Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 18:11:02 -0700 Subject: [PATCH 109/146] Removed rest of unrelated code changes to fix --- src/fsharp/IlxGen.fs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index bb8468443b..3e648efe09 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -847,14 +847,14 @@ and IlxGenEnv = withinSEH: bool /// Are we inside of a recursive let binding, while loop, or a for loop? - inLoop: bool + isInLoop: bool } override __.ToString() = "" -let SetInLoop inLoop eenv = - if eenv.inLoop = inLoop then eenv - else { eenv with inLoop = inLoop } +let SetIsInLoop isInLoop eenv = + if eenv.isInLoop = isInLoop then eenv + else { eenv with isInLoop = isInLoop } let ReplaceTyenv tyenv (eenv: IlxGenEnv) = {eenv with tyenv = tyenv } @@ -1911,9 +1911,9 @@ let CodeGenThen cenv mgbuf (entryPointInfo, methodName, eenv, alreadyUsedArgs, c let innerVals = entryPointInfo |> List.map (fun (v, kind) -> (v, (kind, start))) (* Call the given code generator *) - codeGenFunction cgbuf { eenv with withinSEH = false - liveLocals = IntMap.empty() - innerVals = innerVals } + codeGenFunction cgbuf {eenv with withinSEH=false + liveLocals=IntMap.empty() + innerVals = innerVals} let locals, maxStack, lab2pc, code, exnSpecs, hasSequencePoints = cgbuf.Close() @@ -3535,7 +3535,7 @@ and GenTryFinally cenv cgbuf eenv (bodyExpr, handlerExpr, m, resty, spTry, spFin //-------------------------------------------------------------------------- and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = - let eenv = SetInLoop true eenv + let eenv = SetIsInLoop true eenv let g = cenv.g // The JIT/NGen eliminate array-bounds checks for C# loops of form: @@ -3626,7 +3626,7 @@ and GenForLoop cenv cgbuf eenv (spFor, v, e1, dir, e2, loopBody, m) sequel = //-------------------------------------------------------------------------- and GenWhileLoop cenv cgbuf eenv (spWhile, e1, e2, m) sequel = - let eenv = SetInLoop true eenv + let eenv = SetIsInLoop true eenv let finish = CG.GenerateDelayMark cgbuf "while_finish" let startTest = CG.GenerateMark cgbuf "startTest" @@ -5193,7 +5193,7 @@ and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFi /// Generate letrec bindings and GenLetRecBindings cenv (cgbuf: CodeGenBuffer) eenv (allBinds: Bindings, m) = - let eenv = SetInLoop true eenv + let eenv = SetIsInLoop true eenv // Fix up recursion for non-toplevel recursive bindings let bindsPossiblyRequiringFixup = allBinds |> List.filter (fun b -> @@ -5443,7 +5443,7 @@ and GenBindingAfterSequencePoint cenv cgbuf eenv sp (TBind(vspec, rhsExpr, _)) s let storage = StorageForVal cenv.g m vspec eenv match storage, rhsExpr with // locals are zero-init, no need to initialize them, except if you are in a loop and the local is mutable. - | Local (_, realloc, _), Expr.Const (Const.Zero, _, _) when not realloc && not (eenv.inLoop && vspec.IsMutable) -> + | Local (_, realloc, _), Expr.Const (Const.Zero, _, _) when not realloc && not (eenv.isInLoop && vspec.IsMutable) -> CommitStartScope cgbuf startScopeMarkOpt | _ -> GenBindingRhs cenv cgbuf eenv SPSuppress vspec rhsExpr @@ -7578,7 +7578,7 @@ let GetEmptyIlxGenEnv (ilg: ILGlobals) ccu = innerVals = [] sigToImplRemapInfo = [] (* "module remap info" *) withinSEH = false - inLoop = false } + isInLoop = false } type IlxGenResults = { ilTypeDefs: ILTypeDef list From 8ddce9128e6277aaca107deb3057c36312e3e5c5 Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 18:18:08 -0700 Subject: [PATCH 110/146] Removed quadratic append --- src/fsharp/IlxGen.fs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 3e648efe09..d2a3c04cbb 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -5121,13 +5121,14 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau and GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases = assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. - let decisions = + let defaultDecisions = match defaultTargetOpt with | Some defaultTarget -> [(None, eenv, defaultTarget)] | None -> [] - (decisions, caseLabels, cases) - |||> List.fold2 (fun decisions caseLabel (TCase(_, caseTree)) -> decisions @ [(Some caseLabel, eenv, caseTree)]) + (caseLabels, cases) + ||> List.map2 (fun caseLabel (TCase(_, caseTree)) -> (Some caseLabel, eenv, caseTree)) + |> List.append defaultDecisions // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None From 74196aec0b46384be77d22f740631ef63adc923c Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 18:42:08 -0700 Subject: [PATCH 111/146] Moved local rec functions into top module --- src/fsharp/IlxGen.fs | 66 +++++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index d2a3c04cbb..786b60b2ab 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4858,42 +4858,44 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // go to the join point Br afterJoin, afterJoin, stackAfterJoin, sequel -// Accumulate the decision graph as we go -and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Queue (IlxGenEnv * EmitSequencePointState * Expr * sequel) option>) = - let rec genDecisions targetInfos decisions (queue: Queue<_>) = - match decisions with - | [] -> - let remaining = - targetInfos - |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) - |> Seq.filter (fun (KeyValue(_, (_, isTargetPostponed))) -> isTargetPostponed) - |> List.ofSeq - - let rec genRemaining remaining (queue: Queue<_>) = - match remaining with - | [] -> None - | (KeyValue(_, (targetInfo, _))) :: rest -> - queue.Enqueue(fun () -> genRemaining rest queue) - Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) - - genRemaining remaining queue +and GenPostponedAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos stackAtTargets sequel = + match targetInfos with + | [] -> None + | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest -> + if isTargetPostponed then + queue.Enqueue(fun () -> GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel) + Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) + else + GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel + +and GenDecisionTreesAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos decisions stackAtTargets targets repeatSP sequel = + match decisions with + | [] -> + let sortedTargetInfos = + targetInfos + |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) + |> List.ofSeq + + GenPostponedAndQueueTargets cenv cgbuf queue sortedTargetInfos stackAtTargets sequel - | (inplabOpt, eenv, tree) :: rest -> - match tree with - | TDSuccess(es, targetIdx) -> - let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel - match genTargetInfoOpt with - | Some _ -> - queue.Enqueue(fun () -> genDecisions targetInfos rest queue) - genTargetInfoOpt - | _ -> - genDecisions targetInfos rest queue + | (inplabOpt, eenv, tree) :: rest -> + match tree with + | TDSuccess(es, targetIdx) -> + let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + match genTargetInfoOpt with + | Some _ -> + queue.Enqueue(fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel) + genTargetInfoOpt | _ -> - let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel - genDecisions targetInfos (newDecisions @ rest) queue + GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel + | _ -> + let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel + GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos (newDecisions @ rest) stackAtTargets targets repeatSP sequel +// Accumulate the decision graph as we go +and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Queue (IlxGenEnv * EmitSequencePointState * Expr * sequel) option>) = let queue = Queue() - queue.Enqueue (fun () -> genDecisions (IntMap.empty()) [(None, eenv, tree)] queue) + queue.Enqueue (fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue (IntMap.empty()) [(None, eenv, tree)] stackAtTargets targets repeatSP sequel) queue and TryFindTargetInfo targetInfos n = From e6baf7f5aae88331ac2196f595a2ea4fb5e19ed7 Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 18:55:42 -0700 Subject: [PATCH 112/146] Added GenDecisionTreeTargetQueue --- src/fsharp/IlxGen.fs | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 786b60b2ab..8e10366af6 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2572,6 +2572,21 @@ and GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin = GenSequel cenv eenv.cloc cgbuf sequelAfterJoin +and GenDecisionTreeTargetQueue cenv cgbuf (targetQueue: Queue<_>) eenv afterJoin stackAfterJoin sequelAfterJoin contf = + if targetQueue.Count > 0 then + let f = targetQueue.Dequeue () + let genTargetInfoOpt = f () + match genTargetInfoOpt with + | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf + ) + | _ -> + GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf + else + GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin + contf Fake + and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) = let expr = stripExpr expr match expr with @@ -2661,23 +2676,7 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. let targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches - - let rec popTargetQueue () = - if targetQueue.Count > 0 then - let f = targetQueue.Dequeue () - let genTargetInfoOpt = f () - match genTargetInfoOpt with - | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> - popTargetQueue () - ) - | _ -> - popTargetQueue () - else - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - contf Fake - - popTargetQueue () + GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> if canProcessSequencePoint then From 8dfcc6a4eb1d34177767f5088867e90d8902e053 Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 19:54:10 -0700 Subject: [PATCH 113/146] Instead of using a queue, use CPS through other functions --- src/fsharp/IlxGen.fs | 92 ++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 54 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 8e10366af6..4b519e6f3c 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -2551,42 +2551,6 @@ and GenAllocUnionCase cenv cgbuf eenv (c,tyargs,args,m) sequel = GenAllocUnionCaseCore cenv cgbuf eenv (c,tyargs,args.Length,m) GenSequel cenv eenv.cloc cgbuf sequel -and GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin = - CG.SetMarkToHere cgbuf afterJoin - - //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... - CG.SetStack cgbuf stackAfterJoin - // If any values are left on the stack after the join then we're certainly going to do something with them - // For example, we may be about to execute a 'stloc' for - // - // let y2 = if System.DateTime.Now.Year < 2000 then 1 else 2 - // - // or a 'stelem' for - // - // arr.[0] <- if System.DateTime.Now.Year > 2000 then 1 else 2 - // - // In both cases, any instructions that come after this point will be falsely associated with the last branch of the control - // prior to the join point. This is base, e.g. see FSharp 1.0 bug 5155 - if not (isNil stackAfterJoin) then - cgbuf.EmitStartOfHiddenCode() - - GenSequel cenv eenv.cloc cgbuf sequelAfterJoin - -and GenDecisionTreeTargetQueue cenv cgbuf (targetQueue: Queue<_>) eenv afterJoin stackAfterJoin sequelAfterJoin contf = - if targetQueue.Count > 0 then - let f = targetQueue.Dequeue () - let genTargetInfoOpt = f () - match genTargetInfoOpt with - | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> - GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf - ) - | _ -> - GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf - else - GenAfterMatch cenv cgbuf eenv afterJoin stackAfterJoin sequelAfterJoin - contf Fake - and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: FakeUnit -> FakeUnit) = let expr = stripExpr expr match expr with @@ -2675,8 +2639,27 @@ and GenLinearExpr cenv cgbuf eenv sp expr sequel canProcessSequencePoint (contf: // match-testing (dtrees) should not contribute to the stack. // Each branch-RHS (targets) may contribute to the stack, leaving it in the "stackAfterJoin" state, for the join point. // Since code is branching and joining, the cgbuf stack is maintained manually. - let targetQueue = GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches - GenDecisionTreeTargetQueue cenv cgbuf targetQueue eenv afterJoin stackAfterJoin sequelAfterJoin contf + GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequelOnBranches (contf << (fun Fake -> + CG.SetMarkToHere cgbuf afterJoin + + //assert(cgbuf.GetCurrentStack() = stackAfterJoin) // REVIEW: Since gen_dtree* now sets stack, stack should be stackAfterJoin at this point... + CG.SetStack cgbuf stackAfterJoin + // If any values are left on the stack after the join then we're certainly going to do something with them + // For example, we may be about to execute a 'stloc' for + // + // let y2 = if System.DateTime.Now.Year < 2000 then 1 else 2 + // + // or a 'stelem' for + // + // arr.[0] <- if System.DateTime.Now.Year > 2000 then 1 else 2 + // + // In both cases, any instructions that come after this point will be falsely associated with the last branch of the control + // prior to the join point. This is base, e.g. see FSharp 1.0 bug 5155 + if not (isNil stackAfterJoin) then + cgbuf.EmitStartOfHiddenCode() + + GenSequel cenv eenv.cloc cgbuf sequelAfterJoin + Fake)) | LinearOpExpr (TOp.UnionCase c, tyargs, argsFront, argLast, m) -> if canProcessSequencePoint then @@ -4857,17 +4840,19 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // go to the join point Br afterJoin, afterJoin, stackAfterJoin, sequel -and GenPostponedAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos stackAtTargets sequel = +and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel (contf: FakeUnit -> FakeUnit) : FakeUnit = match targetInfos with - | [] -> None + | [] -> contf Fake | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest -> if isTargetPostponed then - queue.Enqueue(fun () -> GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel) - Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel) + let eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget = GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf + ) else - GenPostponedAndQueueTargets cenv cgbuf queue rest stackAtTargets sequel + GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf -and GenDecisionTreesAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos decisions stackAtTargets targets repeatSP sequel = +and GenDecisionTreesAndTargets cenv cgbuf targetInfos decisions stackAtTargets targets repeatSP sequel contf = match decisions with | [] -> let sortedTargetInfos = @@ -4875,27 +4860,26 @@ and GenDecisionTreesAndQueueTargets cenv cgbuf (queue: Queue<_>) targetInfos dec |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) |> List.ofSeq - GenPostponedAndQueueTargets cenv cgbuf queue sortedTargetInfos stackAtTargets sequel + GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf | (inplabOpt, eenv, tree) :: rest -> match tree with | TDSuccess(es, targetIdx) -> let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel match genTargetInfoOpt with - | Some _ -> - queue.Enqueue(fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel) - genTargetInfoOpt + | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> + GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf + ) | _ -> - GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos rest stackAtTargets targets repeatSP sequel + GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf | _ -> let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel - GenDecisionTreesAndQueueTargets cenv cgbuf queue targetInfos (newDecisions @ rest) stackAtTargets targets repeatSP sequel + GenDecisionTreesAndTargets cenv cgbuf targetInfos (newDecisions @ rest) stackAtTargets targets repeatSP sequel contf // Accumulate the decision graph as we go -and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel : (Queue (IlxGenEnv * EmitSequencePointState * Expr * sequel) option>) = - let queue = Queue() - queue.Enqueue (fun () -> GenDecisionTreesAndQueueTargets cenv cgbuf queue (IntMap.empty()) [(None, eenv, tree)] stackAtTargets targets repeatSP sequel) - queue +and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf = + GenDecisionTreesAndTargets cenv cgbuf (IntMap.empty()) [(None, eenv, tree)] stackAtTargets targets repeatSP sequel contf and TryFindTargetInfo targetInfos n = match IntMap.tryFind n targetInfos with From b663ffcec6566f053211309b3c5e4077f38dfa7f Mon Sep 17 00:00:00 2001 From: TIHan Date: Thu, 31 Oct 2019 20:09:02 -0700 Subject: [PATCH 114/146] Minor cleanup --- src/fsharp/IlxGen.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 4b519e6f3c..fdf4493502 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4840,7 +4840,7 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // go to the join point Br afterJoin, afterJoin, stackAfterJoin, sequel -and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel (contf: FakeUnit -> FakeUnit) : FakeUnit = +and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel contf = match targetInfos with | [] -> contf Fake | (KeyValue(_, (targetInfo, isTargetPostponed))) :: rest -> From b5a99960760edd57d03930554150d2465eb6111b Mon Sep 17 00:00:00 2001 From: Will Smith Date: Fri, 1 Nov 2019 01:38:12 -0700 Subject: [PATCH 115/146] Pure CPS --- src/fsharp/IlxGen.fs | 98 ++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 53 deletions(-) diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index fdf4493502..3ba2296e81 100644 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -4840,6 +4840,16 @@ and GenJoinPoint cenv cgbuf pos eenv ty m sequel = // go to the join point Br afterJoin, afterJoin, stackAfterJoin, sequel +// Accumulate the decision graph as we go +and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf = + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv tree targets repeatSP (IntMap.empty()) sequel (fun targetInfos -> + let sortedTargetInfos = + targetInfos + |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) + |> List.ofSeq + GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf + ) + and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel contf = match targetInfos with | [] -> contf Fake @@ -4852,35 +4862,6 @@ and GenPostponedDecisionTreeTargets cenv cgbuf targetInfos stackAtTargets sequel else GenPostponedDecisionTreeTargets cenv cgbuf rest stackAtTargets sequel contf -and GenDecisionTreesAndTargets cenv cgbuf targetInfos decisions stackAtTargets targets repeatSP sequel contf = - match decisions with - | [] -> - let sortedTargetInfos = - targetInfos - |> Seq.sortBy (fun (KeyValue(targetIdx, _)) -> targetIdx) - |> List.ofSeq - - GenPostponedDecisionTreeTargets cenv cgbuf sortedTargetInfos stackAtTargets sequel contf - - | (inplabOpt, eenv, tree) :: rest -> - match tree with - | TDSuccess(es, targetIdx) -> - let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel - match genTargetInfoOpt with - | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> - GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> - GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf - ) - | _ -> - GenDecisionTreesAndTargets cenv cgbuf targetInfos rest stackAtTargets targets repeatSP sequel contf - | _ -> - let newDecisions = GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel - GenDecisionTreesAndTargets cenv cgbuf targetInfos (newDecisions @ rest) stackAtTargets targets repeatSP sequel contf - -// Accumulate the decision graph as we go -and GenDecisionTreeAndTargets cenv cgbuf stackAtTargets eenv tree targets repeatSP sequel contf = - GenDecisionTreesAndTargets cenv cgbuf (IntMap.empty()) [(None, eenv, tree)] stackAtTargets targets repeatSP sequel contf - and TryFindTargetInfo targetInfos n = match IntMap.tryFind n targetInfos with | Some (targetInfo, _) -> Some targetInfo @@ -4890,7 +4871,7 @@ and TryFindTargetInfo targetInfos n = /// /// When inplabOpt is "Some inplab", we are assuming an existing branch to "inplab" and can optionally /// set inplab to point to another location if no codegen is required. -and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel = +and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree targets repeatSP targetInfos sequel (contf: Zmap<_,_> -> FakeUnit) = CG.SetStack cgbuf stackAtTargets // Set the expected initial stack. match tree with | TDBind(bind, rest) -> @@ -4903,13 +4884,18 @@ and GenDecisionTreeAndTargetsInner cenv cgbuf inplabOpt stackAtTargets eenv tree // we effectively lose an EndLocalScope for all dtrees that go to the same target // So we just pretend that the variable goes out of scope here. CG.SetMarkToHere cgbuf endScope - GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv rest targets repeatSP targetInfos sequel contf - | TDSuccess _ -> - [(inplabOpt, eenv, tree)] + | TDSuccess(es, targetIdx) -> + let targetInfos, genTargetInfoOpt = GenDecisionTreeSuccess cenv cgbuf inplabOpt stackAtTargets eenv es targetIdx targets repeatSP targetInfos sequel + match genTargetInfoOpt with + | Some (eenvAtTarget, spExprAtTarget, exprAtTarget, sequelAtTarget) -> + GenLinearExpr cenv cgbuf eenvAtTarget spExprAtTarget exprAtTarget sequelAtTarget true (fun Fake -> contf targetInfos) + | _ -> + contf targetInfos | TDSwitch(e, cases, dflt, m) -> - GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP sequel + GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases dflt m targets repeatSP targetInfos sequel contf and GetTarget (targets:_[]) n = if n >= targets.Length then failwith "GetTarget: target not found in decision tree" @@ -4983,7 +4969,7 @@ and GenDecisionTreeTarget cenv cgbuf stackAtTargets (targetMarkBeforeBinds, targ CG.SetStack cgbuf stackAtTargets (eenvAtTarget, spExpr, successExpr, (EndLocalScope(sequel, endScope))) -and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP sequel = +and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defaultTargetOpt switchm targets repeatSP targetInfos sequel contf = let g = cenv.g let m = e.Range match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab @@ -4993,7 +4979,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau // optimize a test against a boolean value, i.e. the all-important if-then-else | TCase(DecisionTreeTest.Const(Const.Bool b), successTree) :: _ -> let failureTree = (match defaultTargetOpt with None -> cases.Tail.Head.CaseTree | Some d -> d) - GenDecisionTreeTest cenv eenv.cloc cgbuf e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets sequel + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e None eenv (if b then successTree else failureTree) (if b then failureTree else successTree) targets repeatSP targetInfos sequel contf // // Remove a single test for a union case . Union case tests are always exa //| [ TCase(DecisionTreeTest.UnionCase _, successTree) ] when (defaultTargetOpt.IsNone) -> @@ -5010,7 +4996,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let cuspec = GenUnionSpec cenv.amap m eenv.tyenv c.TyconRef tyargs let idx = c.Index let avoidHelpers = entityRefInThisAssembly g.compilingFslib c.TyconRef - GenDecisionTreeTest cenv eenv.cloc cgbuf e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets sequel + GenDecisionTreeTest cenv eenv.cloc cgbuf stackAtTargets e (Some (pop 1, Push [g.ilg.typ_Bool], Choice1Of2 (avoidHelpers, cuspec, idx))) eenv successTree failureTree targets repeatSP targetInfos sequel contf | _ -> let caseLabels = List.map (fun _ -> CG.GenerateDelayMark cgbuf "switch_case") cases @@ -5041,7 +5027,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau BI_brtrue | _ -> failwith "internal error: GenDecisionTreeSwitch" CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (bi, (List.head caseLabels).CodeLabel)) - GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase", switchm)) | DecisionTreeTest.UnionCase (hdc, tyargs) -> @@ -5057,7 +5043,7 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau let avoidHelpers = entityRefInThisAssembly g.compilingFslib hdc.TyconRef EraseUnions.emitDataSwitch g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec, dests) CG.EmitInstrs cgbuf (pop 1) Push0 [ ] // push/pop to match the line above - GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf | DecisionTreeTest.Const c -> GenExpr cenv cgbuf eenv SPSuppress e Continue @@ -5100,25 +5086,30 @@ and GenDecisionTreeSwitch cenv cgbuf inplabOpt stackAtTargets eenv e cases defau CG.EmitInstr cgbuf (pop 1) Push0 (I_switch destinationLabels) else error(InternalError("non-dense integer matches not implemented in codegen - these should have been removed by the pattern match compiler", switchm)) - GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf | _ -> error(InternalError("these matches should never be needed", switchm)) -and GenDecisionTreeCases cgbuf stackAtTargets eenv defaultTargetOpt caseLabels cases = +and GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases (contf: Zmap<_,_> -> FakeUnit) = assert(cgbuf.GetCurrentStack() = stackAtTargets) // cgbuf stack should be unchanged over tests. [bug://1750]. - let defaultDecisions = - match defaultTargetOpt with - | Some defaultTarget -> [(None, eenv, defaultTarget)] - | None -> [] - - (caseLabels, cases) - ||> List.map2 (fun caseLabel (TCase(_, caseTree)) -> (Some caseLabel, eenv, caseTree)) - |> List.append defaultDecisions + match defaultTargetOpt with + | Some defaultTarget -> + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv defaultTarget targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabels cases contf + ) + | None -> + match caseLabels, cases with + | caseLabel :: caseLabelsTail, (TCase(_, caseTree)) :: casesTail -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some caseLabel) stackAtTargets eenv caseTree targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeCases cenv cgbuf stackAtTargets eenv None targets repeatSP targetInfos sequel caseLabelsTail casesTail contf + ) + | _ -> + contf targetInfos // Used for the peephole optimization below and (|BoolExpr|_|) = function Expr.Const (Const.Bool b1, _, _) -> Some b1 | _ -> None -and GenDecisionTreeTest cenv cloc cgbuf e tester eenv successTree failureTree targets sequel = +and GenDecisionTreeTest cenv cloc cgbuf stackAtTargets e tester eenv successTree failureTree targets repeatSP targetInfos sequel contf = let g = cenv.g match successTree, failureTree with @@ -5145,7 +5136,7 @@ and GenDecisionTreeTest cenv cloc cgbuf e tester eenv successTree failureTree ta CG.EmitInstrs cgbuf (pop 0) (Push [g.ilg.typ_Bool]) [mkLdcInt32 0 ] CG.EmitInstrs cgbuf (pop 1) Push0 [AI_ceq] GenSequel cenv cloc cgbuf sequel - [] + contf targetInfos | _ -> failwith "internal error: GenDecisionTreeTest during bool elim" @@ -5167,8 +5158,9 @@ and GenDecisionTreeTest cenv cloc cgbuf e tester eenv successTree failureTree ta | Choice2Of2 i -> CG.EmitInstr cgbuf pops pushes i CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (BI_brfalse, failure.CodeLabel)) - [ (None, eenv, successTree) - (Some failure, eenv, failureTree) ] + GenDecisionTreeAndTargetsInner cenv cgbuf None stackAtTargets eenv successTree targets repeatSP targetInfos sequel (fun targetInfos -> + GenDecisionTreeAndTargetsInner cenv cgbuf (Some failure) stackAtTargets eenv failureTree targets repeatSP targetInfos sequel contf + ) /// Generate fixups for letrec bindings and GenLetRecFixup cenv cgbuf eenv (ilxCloSpec: IlxClosureSpec, e, ilField: ILFieldSpec, e2, _m) = From 2d5f5f457fb50745be7809eded9b21ff60f4d4c8 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Mon, 30 Sep 2019 13:17:12 -0700 Subject: [PATCH 116/146] update tool requirement to VS 16.3 (#7671) --- global.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/global.json b/global.json index e8c93c341d..39f9ea968e 100644 --- a/global.json +++ b/global.json @@ -2,7 +2,7 @@ "tools": { "dotnet": "3.0.100", "vs": { - "version": "16.1", + "version": "16.3", "components": [ "Microsoft.Net.Core.Component.SDK.2.1", "Microsoft.VisualStudio.Component.FSharp" From c3406e7ae2f9a661ba86b2fa4023ad805193dc69 Mon Sep 17 00:00:00 2001 From: Gustavo Leon <1261319+gusty@users.noreply.github.com> Date: Tue, 1 Oct 2019 02:25:27 +0200 Subject: [PATCH 117/146] Consider '_' for members with access modifiers (#7631) * Consider '_' for members with access modifiers * Add tests * Revert * Add tests with modifiers --- src/fsharp/pars.fsy | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index cb2b0a7020..64011e2c40 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -1924,6 +1924,11 @@ atomicPatternLongIdent: } | GLOBAL DOT pathOp { let (LongIdentWithDots(lid,dotms)) = $3 in (None,LongIdentWithDots(ident(MangledGlobalName,rhs parseState 1) :: lid, rhs parseState 2 :: dotms)) } | pathOp { (None,$1) } + | access UNDERSCORE DOT pathOp { + if not (parseState.LexBuffer.SupportsFeature LanguageFeature.SingleUnderscorePattern) then + raiseParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedSymbolDot()) + let (LongIdentWithDots(lid,dotms)) = $4 in (Some($1),LongIdentWithDots(ident("_",rhs parseState 1)::lid, rhs parseState 2::dotms)) + } | access pathOp { (Some($1), $2) } From e2efa30b61e9f9c718134d552df59d199c83aa9d Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 10 Sep 2019 10:53:07 -0700 Subject: [PATCH 118/146] return the last-computed value when evaluating script code (#7524) * return the last-computed value when evaluating script code * manually track last produced value * set last value on all branches --- src/fsharp/fsi/fsi.fs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 99bffe0b73..c3d17c9270 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1139,6 +1139,7 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener + let mutable lastValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] @@ -1163,20 +1164,21 @@ type internal FsiDynamicCompiler let symbol = FSharpSymbol.Create(cenv, v.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + lastValue <- fsiValueOpt | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) + lastValue <- None | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - () + lastValue <- None | _ -> () with _ -> () - newState - - + newState, Completed lastValue + /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = let tcConfig = TcConfig.Create (tcConfigB, validate=false) @@ -1186,7 +1188,7 @@ type internal FsiDynamicCompiler let defs = fsiDynamicCompiler.BuildItBinding expr // Evaluate the overall definitions. - let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) + let istate = fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, false, true, defs) |> fst // Snarf the type for 'it' via the binding match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with | NameResolution.Item.Value vref -> @@ -1787,7 +1789,7 @@ type internal FsiInteractionProcessor | IDefns ([ SynModuleDecl.DoExpr(_,expr,_)],_) -> fsiDynamicCompiler.EvalParsedExpression(ctok, errorLogger, istate, expr) | IDefns (defs,_) -> - fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs),Completed None + fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, defs) | IHash (ParsedHashDirective("load",sourceFiles,m),_) -> fsiDynamicCompiler.EvalSourceFiles (ctok, istate, m, sourceFiles, lexResourceManager, errorLogger),Completed None @@ -2085,7 +2087,7 @@ type internal FsiInteractionProcessor /// Send a dummy interaction through F# Interactive, to ensure all the most common code generation paths are /// JIT'ed and ready for use. member __.LoadDummyInteraction(ctok, errorLogger) = - setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []), Completed None) |> fst) + setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) From 59c8dc8466d1870f509aa6a1ae9dc83c8c97ed61 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Fri, 4 Oct 2019 10:37:18 -0700 Subject: [PATCH 119/146] Return correct value with multi-line F# submissions (#7699) --- src/fsharp/fsi/fsi.fs | 50 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index c3d17c9270..cf9f02286c 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1139,45 +1139,49 @@ type internal FsiDynamicCompiler let newState = { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } // Find all new declarations the EvaluationListener - let mutable lastValue = None + let mutable itValue = None try let contents = FSharpAssemblyContents(tcGlobals, tcState.Ccu, Some tcState.CcuSig, tcImports, declaredImpls) let contentFile = contents.ImplementationFiles.[0] + // Skip the "FSI_NNNN" - match contentFile.Declarations with - | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> + match contentFile.Declarations with + | [FSharpImplementationFileDeclaration.Entity (_eFakeModule,modDecls) ] -> let cenv = SymbolEnv(newState.tcGlobals, newState.tcState.Ccu, Some newState.tcState.CcuSig, newState.tcImports) - for decl in modDecls do - match decl with + for decl in modDecls do + match decl with | FSharpImplementationFileDeclaration.MemberOrFunctionOrValue (v,_,_) -> // Report a top-level function or value definition - if v.IsModuleValueOrMember && not v.IsMember then - let fsiValueOpt = - match v.Item with - | Item.Value vref -> - let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) - match optValue with - | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) - | None -> None - | _ -> None - - let symbol = FSharpSymbol.Create(cenv, v.Item) - let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) - fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) - lastValue <- fsiValueOpt + if v.IsModuleValueOrMember && not v.IsMember then + let fsiValueOpt = + match v.Item with + | Item.Value vref -> + let optValue = newState.ilxGenerator.LookupGeneratedValue(valuePrinter.GetEvaluationContext(newState.emEnv), vref.Deref) + match optValue with + | Some (res, ty) -> Some(FsiValue(res, ty, FSharpType(cenv, vref.Type))) + | None -> None + | _ -> None + + if v.CompiledName = "it" then + itValue <- fsiValueOpt + + let symbol = FSharpSymbol.Create(cenv, v.Item) + let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, v.DeclarationLocation) + fsi.TriggerEvaluation (fsiValueOpt, symbolUse, decl) + | FSharpImplementationFileDeclaration.Entity (e,_) -> // Report a top-level module or namespace definition let symbol = FSharpSymbol.Create(cenv, e.Item) let symbolUse = FSharpSymbolUse(tcGlobals, newState.tcState.TcEnvFromImpls.DisplayEnv, symbol, ItemOccurence.Binding, e.DeclarationLocation) fsi.TriggerEvaluation (None, symbolUse, decl) - lastValue <- None + | FSharpImplementationFileDeclaration.InitAction _ -> // Top level 'do' bindings are not reported as incremental declarations - lastValue <- None + () | _ -> () with _ -> () - newState, Completed lastValue + newState, Completed itValue /// Evaluate the given expression and produce a new interactive state. member fsiDynamicCompiler.EvalParsedExpression (ctok, errorLogger: ErrorLogger, istate, expr: SynExpr) = @@ -1194,7 +1198,7 @@ type internal FsiDynamicCompiler | NameResolution.Item.Value vref -> if not tcConfig.noFeedback then valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, istate.emEnv, istate.ilxGenerator, vref.Deref) - + /// Clear the value held in the previous "it" binding, if any, as long as it has never been referenced. match prevIt with | Some prevVal when not prevVal.Deref.HasBeenReferenced -> From f900cbffc7e28a656d6e7a69ad96746a817fcae0 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Sat, 28 Sep 2019 12:18:57 +0000 Subject: [PATCH 120/146] Update dependencies from https://github.com/dotnet/arcade build 20190927.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19477.2 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index aef250643d..a52eaa2a46 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - b449f372df1a3374ebdc85f42ff137dcda08776b + 14abaee3dba41fbe608431fb6a4f4b2435dcac33 diff --git a/global.json b/global.json index e8c93c341d..761120bf4a 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19476.6", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19477.2", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 15cc012463af0b138808c6cedfdc112973c4ade8 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Tue, 1 Oct 2019 12:20:31 +0000 Subject: [PATCH 121/146] Update dependencies from https://github.com/dotnet/arcade build 20190930.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19480.3 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a52eaa2a46..dcc02cf458 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 14abaee3dba41fbe608431fb6a4f4b2435dcac33 + 238f1bbb23ba67616818d0b242c5b55a18edec55 diff --git a/global.json b/global.json index 761120bf4a..03abf24d3b 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19477.2", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19480.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From dfb94a278fbdd5e8961ffbf975730de043ee14cb Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 2 Oct 2019 12:21:12 +0000 Subject: [PATCH 122/146] Update dependencies from https://github.com/dotnet/arcade build 20191001.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19501.4 --- eng/Version.Details.xml | 4 ++-- eng/common/tools.sh | 2 +- global.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index dcc02cf458..11764cfb7e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 238f1bbb23ba67616818d0b242c5b55a18edec55 + c21a409f11386d22c6083198176868d3974de832 diff --git a/eng/common/tools.sh b/eng/common/tools.sh index 93ee4d67e3..895ad2442b 100755 --- a/eng/common/tools.sh +++ b/eng/common/tools.sh @@ -332,7 +332,7 @@ function MSBuild { # Work around issues with Azure Artifacts credential provider # https://github.com/dotnet/arcade/issues/3932 if [[ "$ci" == true ]]; then - dotnet nuget locals http-cache -c + "$_InitializeBuildTool" nuget locals http-cache -c export NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS=20 export NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS=20 diff --git a/global.json b/global.json index 03abf24d3b..e01fc8710f 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19480.3", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19501.4", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From cd461282c25a59ac0849da2ab9e4093ea032bc1f Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 3 Oct 2019 12:20:28 +0000 Subject: [PATCH 123/146] Update dependencies from https://github.com/dotnet/arcade build 20191002.11 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19502.11 --- eng/Version.Details.xml | 4 ++-- eng/common/darc-init.ps1 | 2 +- eng/common/darc-init.sh | 2 +- global.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 11764cfb7e..f10ba74c20 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - c21a409f11386d22c6083198176868d3974de832 + da75c6547c64a91eb8a9cecf8c503331c2cc394a diff --git a/eng/common/darc-init.ps1 b/eng/common/darc-init.ps1 index 46d175fdfd..1bf15f435d 100644 --- a/eng/common/darc-init.ps1 +++ b/eng/common/darc-init.ps1 @@ -23,7 +23,7 @@ function InstallDarcCli ($darcVersion) { $darcVersion = $(Invoke-WebRequest -Uri $versionEndpoint -UseBasicParsing).Content } - $arcadeServicesSource = 'https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json' + $arcadeServicesSource = 'https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' Write-Host "Installing Darc CLI version $darcVersion..." Write-Host "You may need to restart your command window if this is the first dotnet tool you have installed." diff --git a/eng/common/darc-init.sh b/eng/common/darc-init.sh index 242429bca6..6c37281b83 100755 --- a/eng/common/darc-init.sh +++ b/eng/common/darc-init.sh @@ -58,7 +58,7 @@ function InstallDarcCli { echo $($dotnet_root/dotnet tool uninstall $darc_cli_package_name -g) fi - local arcadeServicesSource="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" + local arcadeServicesSource="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" echo "Installing Darc CLI version $darcVersion..." echo "You may need to restart your command shell if this is the first dotnet tool you have installed." diff --git a/global.json b/global.json index e01fc8710f..4b22f60d75 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19501.4", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19502.11", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From ff1d3f3d67b08fde745e7ab54ab6d226129b211c Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 4 Oct 2019 15:09:24 -0700 Subject: [PATCH 124/146] only install 2.1 SDK in non source build scenarios (#7703) --- eng/build.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/eng/build.sh b/eng/build.sh index 81363af5db..e4f3b056ea 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -60,6 +60,7 @@ force_bootstrap=false ci=false skip_analyzers=false prepare_machine=false +source_build=false properties="" docker=false @@ -131,6 +132,9 @@ while [[ $# > 0 ]]; do ;; /p:*) properties="$properties $1" + if [[ "$1" == "/p:dotnetbuildfromsource=true" ]]; then + source_build=true + fi ;; *) echo "Invalid argument: $1" @@ -277,7 +281,9 @@ function BuildSolution { InitializeDotNetCli $restore # enable us to build netcoreapp2.1 binaries -InstallDotNetSdk $_InitializeDotNetCli 2.1.503 +if [[ "$source_build" != true ]]; then + InstallDotNetSdk $_InitializeDotNetCli 2.1.503 +fi BuildSolution From 70deae214ef48f8be104297969d0b3a3d8de0fd0 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Tue, 8 Oct 2019 12:46:23 -0700 Subject: [PATCH 125/146] create a specific exception type to represent FSI compilation errors (#7713) --- src/fsharp/fsi/FSIstrings.txt | 2 ++ src/fsharp/fsi/fsi.fs | 20 +++++++++++++------- src/fsharp/fsi/fsi.fsi | 8 +++++++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/fsharp/fsi/FSIstrings.txt b/src/fsharp/fsi/FSIstrings.txt index d02cfeb79c..c151f7b30e 100644 --- a/src/fsharp/fsi/FSIstrings.txt +++ b/src/fsharp/fsi/FSIstrings.txt @@ -52,3 +52,5 @@ fsiBindingSessionTo,"Binding session to '%s'..." fsiProductName,"Microsoft (R) F# Interactive version %s" fsiProductNameCommunity,"F# Interactive for F# %s" shadowCopyReferences,"Prevents references from being locked by the F# Interactive process" +fsiOperationCouldNotBeCompleted,"Operation could not be completed due to earlier error" +fsiOperationFailed,"Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index cf9f02286c..6a90958b6a 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -2280,6 +2280,11 @@ let internal DriveFsiEventLoop (fsi: FsiEvaluationSessionHostConfig, fsiConsoleO runLoop(); +/// Thrown when there was an error compiling the given code in FSI. +type FsiCompilationException(message: string, errorInfos: FSharpErrorInfo[] option) = + inherit System.Exception(message) + member __.ErrorInfos = errorInfos + /// The primary type, representing a full F# Interactive session, reading from the given /// text input, writing to the given text output and error writers. type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], inReader:TextReader, outWriter:TextWriter, errorWriter: TextWriter, fsiCollectible: bool, legacyReferenceResolver: ReferenceResolver.Resolver option) = @@ -2443,21 +2448,22 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i let fsiInteractionProcessor = FsiInteractionProcessor(fsi, tcConfigB, fsiOptions, fsiDynamicCompiler, fsiConsolePrompt, fsiConsoleOutput, fsiInterruptController, fsiStdinLexerProvider, lexResourceManager, initialInteractiveState) let commitResult res = - match res with + match res with | Choice1Of2 r -> r - | Choice2Of2 None -> failwith "Operation failed. The error text has been printed in the error stream. To return the corresponding FSharpErrorInfo use the EvalInteractionNonThrowing, EvalScriptNonThrowing or EvalExpressionNonThrowing" + | Choice2Of2 None -> raise (FsiCompilationException(FSIstrings.SR.fsiOperationFailed(), None)) | Choice2Of2 (Some userExn) -> raise userExn - let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = + let commitResultNonThrowing errorOptions scriptFile (errorLogger: CompilationErrorLogger) res = let errs = errorLogger.GetErrors() - let userRes = - match res with + let errorInfos = ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) + let userRes = + match res with | Choice1Of2 r -> Choice1Of2 r - | Choice2Of2 None -> Choice2Of2 (System.Exception "Operation could not be completed due to earlier error") + | Choice2Of2 None -> Choice2Of2 (FsiCompilationException(FSIstrings.SR.fsiOperationCouldNotBeCompleted(), Some errorInfos) :> exn) | Choice2Of2 (Some userExn) -> Choice2Of2 userExn // 'true' is passed for "suggestNames" because we want the FSI session to suggest names for misspellings and it won't affect IDE perf much - userRes, ErrorHelpers.CreateErrorInfos (errorOptions, true, scriptFile, errs, true) + userRes, errorInfos let dummyScriptFileName = "input.fsx" diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 2897e36484..8809c213a3 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -106,6 +106,12 @@ type public FsiEvaluationSessionHostConfig = /// Implicitly reference FSharp.Compiler.Interactive.Settings.dll abstract UseFsiAuxLib : bool +/// Thrown when there was an error compiling the given code in FSI. +[] +type FsiCompilationException = + inherit System.Exception + new : string * FSharpErrorInfo[] option -> FsiCompilationException + member ErrorInfos : FSharpErrorInfo[] option /// Represents an F# Interactive evaluation session. [] @@ -184,7 +190,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalExpressionNonThrowing : code: string -> Choice * FSharpErrorInfo[] /// Format a value to a string using the current PrintDepth, PrintLength etc settings provided by the active fsi configuration object member FormatValue : reflectionValue: obj * reflectionType: System.Type -> string From cf9ec3eb3c3c5c1f64bb61ff17cbaf178e951337 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Sat, 12 Oct 2019 00:54:40 +0300 Subject: [PATCH 126/146] Fix parsing default language version (#7721) --- src/fsharp/LanguageFeatures.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 4f55325311..2f4e44940c 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -61,7 +61,7 @@ type LanguageVersion (specifiedVersion) = match specifiedVersion with | "?" -> 0m | "preview" -> previewVersion - | "default" -> latestVersion + | "default" -> defaultVersion | "latest" -> latestVersion | "latestmajor" -> latestMajorVersion | _ -> From c666329905b564a07f6454764248d1645f56fdc6 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 14 Oct 2019 14:18:01 -0700 Subject: [PATCH 127/146] Ref assemblies for non sdk apps (#7725) * Ref assemblies for non sdk apps * Use NumberStyles.AllowDecimalPoint with Parse * Correctly this time * Improved Assembly search --- src/fsharp/CompileOps.fs | 2 +- src/fsharp/DotNetFrameworkDependencies.fs | 166 +++++++++------------- 2 files changed, 67 insertions(+), 101 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 239015820a..5ab8928598 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2784,7 +2784,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = if Directory.Exists runtimeRootWPF then yield runtimeRootWPF // PresentationCore.dll is in C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF - match getFrameworkRefsPackDirectory with + match frameworkRefsPackDirectory with | Some path when Directory.Exists(path) -> yield path | _ -> () diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 2e96dcd367..faae31ba35 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -7,6 +7,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic open System.Diagnostics + open System.Globalization open System.IO open System.Reflection @@ -14,7 +15,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let getFSharpCoreLibraryName = "FSharp.Core" let getFsiLibraryName = "FSharp.Compiler.Interactive.Settings" - let frameworkDir = Path.GetDirectoryName(typeof.Assembly.Location) + let implementationAssemblyDir = Path.GetDirectoryName(typeof.Assembly.Location) let getDefaultFSharpCoreReference = typeof.Assembly.Location let getFSharpCompilerLocation = Path.GetDirectoryName(typeof.Assembly.Location) @@ -34,120 +35,85 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies None with _ -> None - // Compare nuget version strings + + // Algorithm: + // use implementation location of obj type, on shared frameworks it will always be in: // - // Format: - // ======= - // $(Major).$(Minor).$(Build) [-SomeSuffix] - // Major, Minor, Build collates normally - // Strings without -SomeSuffix collate higher than SomeSuffix, - // SomeSuffix collates using normal alphanumeric rules + // dotnet\shared\Microsoft.NETCore.App\sdk-version\System.Private.CoreLib.dll // - let deconstructVersion (version:string) = - let version, suffix = - let pos = version.IndexOf("-") - if pos >= 0 then - version.Substring(0, pos), version.Substring(pos + 1) - else version, "" - - let elements = version.Split('.') - if elements.Length < 3 then - struct (0, 0, 0, suffix) - else - struct (Int32.Parse(elements.[0]), Int32.Parse(elements.[1]), Int32.Parse(elements.[2]), suffix) - - let versionCompare c1 c2 = - if c1 = c2 then 0 - else - try - let struct (major1, minor1, build1, suffix1 ) = deconstructVersion c1 - let struct (major2, minor2, build2, suffix2 ) = deconstructVersion c2 - let v = major1 - major2 - if v <> 0 then v - else - let v = minor1 - minor2 - if v <> 0 then v - else - let v = build1 - build2 - if v <> 0 then v - else - match String.IsNullOrEmpty(suffix1), String.IsNullOrEmpty(suffix2) with - | true, true -> 0 - | true, false -> 1 - | false, true -> -1 - | false, false -> String.Compare(suffix1, suffix2, StringComparison.InvariantCultureIgnoreCase) - with _ -> 0 - - let executionTfm = - let file = - try - let depsJsonPath = Path.ChangeExtension(Assembly.GetEntryAssembly().Location, "deps.json") - if File.Exists(depsJsonPath) then - File.ReadAllText(depsJsonPath) - else - "" - with _ -> "" - - let tfmPrefix=".NETCoreApp,Version=v" - let pattern = "\"name\": \"" + tfmPrefix - let startPos = - let startPos = file.IndexOf(pattern, StringComparison.OrdinalIgnoreCase) - if startPos >= 0 then startPos + (pattern.Length) else startPos - - let length = - if startPos >= 0 then - let ep = file.IndexOf("\"", startPos) - if ep >= 0 then ep - startPos else ep - else -1 - match startPos, length with - | -1, _ - | _, -1 -> None - | pos, length -> Some ("netcoreapp" + file.Substring(pos, length)) - - - let getFrameworkRefsPackDirectoryPath = - match executionTfm with - | Some _ -> - let appRefDir = Path.Combine(getFSharpCompilerLocation, "../../../packs/Microsoft.NETCore.App.Ref") - if Directory.Exists(appRefDir) then - Some appRefDir + // if that changes we will need to find another way to do this. Hopefully the sdk will eventually provide an API + // use the well know location for obj to traverse the file system towards the + // + // packs\Microsoft.NETCore.App.Ref\sdk-version\netcoreappn.n + // we will rely on the sdk-version match on the two paths to ensure that we get the product that ships with the + // version of the runtime we are executing on + // Use the reference assemblies for the highest netcoreapp tfm that we find in that location. + let version, frameworkRefsPackDirectoryRoot = + try + let version = DirectoryInfo(implementationAssemblyDir).Name + let microsoftNETCoreAppRef = Path.Combine(implementationAssemblyDir, "../../../packs/Microsoft.NETCore.App.Ref") + if Directory.Exists(microsoftNETCoreAppRef) then + Some version, Some microsoftNETCoreAppRef else - None - | _ -> None + Some version, None + with | _ -> None, None let isInReferenceAssemblyPackDirectory filename = - match getFrameworkRefsPackDirectoryPath with - | Some appRefDir -> + match frameworkRefsPackDirectoryRoot with + | Some root -> let path = Path.GetDirectoryName(filename) - path.StartsWith(appRefDir, StringComparison.OrdinalIgnoreCase) + path.StartsWith(root, StringComparison.OrdinalIgnoreCase) | _ -> false - let getFrameworkRefsPackDirectory = - match executionTfm, getFrameworkRefsPackDirectoryPath with - | Some tfm, Some appRefDir -> + let frameworkRefsPackDirectory = + let tfmPrefix = "netcoreapp" + let tfmCompare c1 c2 = + let deconstructTfmApp (netcoreApp: DirectoryInfo) = + let name = netcoreApp.Name + try + if name.StartsWith(tfmPrefix, StringComparison.InvariantCultureIgnoreCase) then + Some (Double.Parse(name.Substring(tfmPrefix.Length), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture)) + else + None + with _ -> None + + if c1 = c2 then 0 + else + match (deconstructTfmApp c1), (deconstructTfmApp c2) with + | Some c1, Some c2 -> int(c1 - c2) + | None, Some _ -> -1 + | Some _, None -> 1 + | _ -> 0 + + match version, frameworkRefsPackDirectoryRoot with + | Some version, Some root -> try - let refDirs = Directory.GetDirectories(appRefDir) - let versionPath = refDirs |> Array.sortWith (versionCompare) |> Array.last - Some(Path.Combine(versionPath, "ref", tfm)) + let ref = Path.Combine(root, version, "ref") + let highestTfm = DirectoryInfo(ref).GetDirectories() + |> Array.sortWith tfmCompare + |> Array.tryLast + + match highestTfm with + | Some tfm -> Some (Path.Combine(ref, tfm.Name)) + | None -> None with | _ -> None | _ -> None - - let getDependenciesOf assemblyReferences = let assemblies = new Dictionary() // Identify path to a dll in the framework directory from a simple name let frameworkPathFromSimpleName simpleName = - let pathDll = Path.Combine(frameworkDir, simpleName + ".dll") - if not (File.Exists(pathDll)) then - let pathExe = Path.Combine(frameworkDir, simpleName + ".exe") - if not (File.Exists(pathExe)) then - pathDll - else - pathExe - else - pathDll + let root = Path.Combine(implementationAssemblyDir, simpleName) + let pathOpt = + [| ""; ".dll"; ".exe" |] + |> Seq.tryPick(fun ext -> + let path = root + ext + if File.Exists(path) then Some path + else None) + match pathOpt with + | Some path -> path + | None -> root // Collect all assembly dependencies into assemblies dictionary let rec traverseDependencies reference = @@ -228,14 +194,14 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies let getImplementationReferences () = // Coreclr supports netstandard assemblies only for now (getDependenciesOf [ - yield Path.Combine(frameworkDir, "netstandard.dll") + yield Path.Combine(implementationAssemblyDir, "netstandard.dll") yield getDefaultFSharpCoreReference if useFsiAuxLib then yield getFsiLibraryName ]).Values |> Seq.toList if useSdkRefs then // Go fetch references - match getFrameworkRefsPackDirectory with + match frameworkRefsPackDirectory with | Some path -> try [ yield! Directory.GetFiles(path, "*.dll") yield getDefaultFSharpCoreReference From c20ef80b1463bb4a5aee1ee68ee1f2b2036f28fc Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Tue, 15 Oct 2019 03:08:03 +0300 Subject: [PATCH 128/146] Ignore Mac trash (#7729) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ef4d829be1..d967558477 100644 --- a/.gitignore +++ b/.gitignore @@ -237,3 +237,4 @@ msbuild.binlog .ionide .vscode +**/.DS_Store From b0a839741a266e1363a4f2719efb976c2c83dcc6 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Fri, 18 Oct 2019 13:19:10 -0700 Subject: [PATCH 129/146] allow fsi evaluations to be cancelled (#7736) --- src/fsharp/fsi/fsi.fs | 31 +++++++++++++++++-------------- src/fsharp/fsi/fsi.fsi | 5 +++-- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 6a90958b6a..bfecea2a16 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -1888,7 +1888,8 @@ type internal FsiInteractionProcessor /// /// #directive comes through with other definitions as a SynModuleDecl.HashDirective. /// We split these out for individual processing. - let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option) = + let rec execParsedInteractions (ctok, tcConfig, istate, action, errorLogger: ErrorLogger, lastResult:option, cancellationToken: CancellationToken) = + cancellationToken.ThrowIfCancellationRequested() let action,nextAction,istate = match action with | None -> None,None,istate @@ -1935,7 +1936,7 @@ type internal FsiInteractionProcessor | Some action, _ -> let istate,cont = ExecInteraction (ctok, tcConfig, istate, action, errorLogger) match cont with - | Completed _ -> execParsedInteractions (ctok, tcConfig, istate, nextAction, errorLogger, Some cont) + | Completed _ -> execParsedInteractions (ctok, tcConfig, istate, nextAction, errorLogger, Some cont, cancellationToken) | CompletedWithReportedError e -> istate,CompletedWithReportedError e (* drop nextAction on error *) | EndOfFile -> istate,defaultArg lastResult (Completed None) (* drop nextAction on EOF *) | CtrlC -> istate,CtrlC (* drop nextAction on CtrlC *) @@ -1962,9 +1963,9 @@ type internal FsiInteractionProcessor stopProcessingRecovery e range0; istate, CompletedWithReportedError e - let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) = + let mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken = istate |> mainThreadProcessAction ctok (fun ctok tcConfig istate -> - execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None)) + execParsedInteractions (ctok, tcConfig, istate, action, errorLogger, None, cancellationToken)) let parseExpression (tokenizer:LexFilter.LexFilter) = reusingLexbufForParsing tokenizer.LexBuffer (fun () -> @@ -1997,8 +1998,8 @@ type internal FsiInteractionProcessor /// During processing of startup scripts, this runs on the main thread. /// /// This is blocking: it reads until one chunk of input have been received, unless IsPastEndOfStream is true - member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger) = - + member __.ParseAndExecOneSetOfInteractionsFromLexbuf (runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter, errorLogger, ?cancellationToken: CancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None if tokenizer.LexBuffer.IsPastEndOfStream then let stepStatus = if fsiInterruptController.FsiInterruptStdinState = StdinEOFPermittedBecauseCtrlCRecentlyPressed then @@ -2022,7 +2023,7 @@ type internal FsiInteractionProcessor // After we've unblocked and got something to run we switch // over to the run-thread (e.g. the GUI thread) - let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate)) + let res = istate |> runCodeOnMainThread (fun ctok istate -> mainThreadProcessParsedInteractions ctok errorLogger (action, istate) cancellationToken) if !progress then fprintfn fsiConsoleOutput.Out "Just called runCodeOnMainThread, res = %O..." res; res) @@ -2093,7 +2094,8 @@ type internal FsiInteractionProcessor member __.LoadDummyInteraction(ctok, errorLogger) = setCurrState (currState |> InteractiveCatch errorLogger (fun istate -> fsiDynamicCompiler.EvalParsedDefinitions (ctok, errorLogger, istate, true, false, []) |> fst, Completed None) |> fst) - member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger) = + member __.EvalInteraction(ctok, sourceText, scriptFileName, errorLogger, ?cancellationToken) = + let cancellationToken = defaultArg cancellationToken CancellationToken.None use _unwind1 = ErrorLogger.PushThreadBuildPhaseUntilUnwind(ErrorLogger.BuildPhase.Interactive) use _unwind2 = ErrorLogger.PushErrorLoggerPhaseUntilUnwind(fun _ -> errorLogger) use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID @@ -2102,7 +2104,7 @@ type internal FsiInteractionProcessor currState |> InteractiveCatch errorLogger (fun istate -> let expr = ParseInteraction tokenizer - mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) ) + mainThreadProcessParsedInteractions ctok errorLogger (expr, istate) cancellationToken) |> commitResult member this.EvalScript (ctok, scriptPath, errorLogger) = @@ -2592,25 +2594,26 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i fsiInteractionProcessor.EvalExpression(ctok, sourceText, dummyScriptFileName, errorLogger) |> commitResultNonThrowing errorOptions dummyScriptFileName errorLogger - member x.EvalInteraction(sourceText) : unit = + member x.EvalInteraction(sourceText, ?cancellationToken) : unit = // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() - - fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) + let cancellationToken = defaultArg cancellationToken CancellationToken.None + fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger, cancellationToken) |> commitResult |> ignore - member x.EvalInteractionNonThrowing(sourceText) = + member x.EvalInteractionNonThrowing(sourceText, ?cancellationToken) = // Explanation: When the user of the FsiInteractiveSession object calls this method, the // code is parsed, checked and evaluated on the calling thread. This means EvalExpression // is not safe to call concurrently. let ctok = AssumeCompilationThreadWithoutEvidence() + let cancellationToken = defaultArg cancellationToken CancellationToken.None let errorOptions = TcConfig.Create(tcConfigB,validate = false).errorSeverityOptions let errorLogger = CompilationErrorLogger("EvalInteraction", errorOptions) - fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger) + fsiInteractionProcessor.EvalInteraction(ctok, sourceText, dummyScriptFileName, errorLogger, cancellationToken) |> commitResultNonThrowing errorOptions "input.fsx" errorLogger member x.EvalScript(scriptPath) : unit = diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 8809c213a3..8cc0b23fed 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -4,6 +4,7 @@ module public FSharp.Compiler.Interactive.Shell open System.IO +open System.Threading open FSharp.Compiler open FSharp.Compiler.SourceCodeServices @@ -146,7 +147,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteraction : code: string -> unit + member EvalInteraction : code: string * ?cancellationToken: CancellationToken -> unit /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest @@ -155,7 +156,7 @@ type FsiEvaluationSession = /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. - member EvalInteractionNonThrowing : code: string -> Choice * FSharpErrorInfo[] + member EvalInteractionNonThrowing : code: string * ?cancellationToken: CancellationToken -> Choice * FSharpErrorInfo[] /// Execute the given script. Stop on first error, discarding the rest /// of the script. Errors are sent to the output writer, a 'true' return value indicates there From 2b850b674f6f2bdc778f67db87d6f8f307443a41 Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Mon, 21 Oct 2019 21:50:30 -0700 Subject: [PATCH 130/146] Remove dead code (#7755) --- src/fsharp/CompileOps.fs | 3 --- src/fsharp/CompileOps.fsi | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5ab8928598..5979861c1f 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2009,7 +2009,6 @@ type CcuLoadFailureAction = [] type TcConfigBuilder = { mutable primaryAssembly: PrimaryAssembly - mutable autoResolveOpenDirectivesToDlls: bool mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string (* normally "." *) @@ -2176,7 +2175,6 @@ type TcConfigBuilder = stackReserveSize = None conditionalCompilationDefines = [] implicitIncludeDir = String.Empty - autoResolveOpenDirectivesToDlls = false openDebugInformationForLaterStaticLinking = false defaultFSharpBinariesDir = String.Empty compilingFslib = false @@ -2619,7 +2617,6 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = let systemAssemblies = systemAssemblies member x.primaryAssembly = data.primaryAssembly - member x.autoResolveOpenDirectivesToDlls = data.autoResolveOpenDirectivesToDlls member x.noFeedback = data.noFeedback member x.stackReserveSize = data.stackReserveSize member x.implicitIncludeDir = data.implicitIncludeDir diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 34e25a21f1..364336f32d 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -250,7 +250,6 @@ type VersionFlag = [] type TcConfigBuilder = { mutable primaryAssembly: PrimaryAssembly - mutable autoResolveOpenDirectivesToDlls: bool mutable noFeedback: bool mutable stackReserveSize: int32 option mutable implicitIncludeDir: string @@ -417,7 +416,6 @@ type TcConfigBuilder = // Immutable TcConfig type TcConfig = member primaryAssembly: PrimaryAssembly - member autoResolveOpenDirectivesToDlls: bool member noFeedback: bool member stackReserveSize: int32 option member implicitIncludeDir: string From cb65c31ff4a7ef8b33eb612c17796391c6122269 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Wed, 30 Oct 2019 15:26:33 -0700 Subject: [PATCH 131/146] update perl test runner (#7779) --- eng/Build.ps1 | 4 +++- eng/Versions.props | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/eng/Build.ps1 b/eng/Build.ps1 index 4d503dbeda..f9d7e1b5ac 100644 --- a/eng/Build.ps1 +++ b/eng/Build.ps1 @@ -359,7 +359,8 @@ try { $resultsLog = "test-net40-fsharpqa-results.log" $errorLog = "test-net40-fsharpqa-errors.log" $failLog = "test-net40-fsharpqa-errors" - $perlExe = "$env:USERPROFILE\.nuget\packages\StrawberryPerl64\5.22.2.1\Tools\perl\bin\perl.exe" + $perlPackageRoot = "$env:USERPROFILE\.nuget\packages\StrawberryPerl\5.28.0.1"; + $perlExe = "$perlPackageRoot\bin\perl.exe" Create-Directory $resultsRoot UpdatePath $env:HOSTED_COMPILER = 1 @@ -367,6 +368,7 @@ try { $env:FSCOREDLLPATH = "$ArtifactsDir\bin\fsc\$configuration\net472\FSharp.Core.dll" $env:LINK_EXE = "$RepoRoot\tests\fsharpqa\testenv\bin\link\link.exe" $env:OSARCH = $env:PROCESSOR_ARCHITECTURE + $env:PERL5LIB = "$perlPackageRoot\vendor\lib" Exec-Console $perlExe """$RepoRoot\tests\fsharpqa\testenv\bin\runall.pl"" -resultsroot ""$resultsRoot"" -results $resultsLog -log $errorLog -fail $failLog -cleanup:no -procs:$env:NUMBER_OF_PROCESSORS" Pop-Location } diff --git a/eng/Versions.props b/eng/Versions.props index 8efcedaa53..caa59fe65e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -182,7 +182,7 @@ 3.11.0 2.1.36 1.0.0-beta2-dev3 - 5.22.2.1 + 5.28.0.1 2.0.187 From 96fc7b06ae8728e4339266857a2b98da2d96aa84 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Wed, 30 Oct 2019 15:29:02 -0700 Subject: [PATCH 132/146] Voption tostring and other stuff (#7712) * Fix some issues in ValueNone implementation * More debug display * Some for options in debug display * Apply suggestions from code review Co-Authored-By: Eugene Auduchinok * Probably better stringing * Add them baselines * Add sprintfn tests * Update OptionModule.fs --- src/fsharp/FSharp.Core/prim-types.fs | 25 ++++++++++++++++++------- src/fsharp/FSharp.Core/prim-types.fsi | 5 +++++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 542852e5da..664e1d4c02 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -2883,7 +2883,7 @@ namespace Microsoft.FSharp.Core //------------------------------------------------------------------------- [] - [] + [] [] [] [] @@ -2907,6 +2907,11 @@ namespace Microsoft.FSharp.Core static member Some (value) : 'T option = Some(value) static member op_Implicit (value) : 'T option = Some(value) + + member private x.DebugDisplay = + match x with + | None -> "None" + | Some _ -> String.Format("Some({0})", anyToStringShowingNull x.Value) override x.ToString() = // x is non-null, hence Some @@ -2924,7 +2929,7 @@ namespace Microsoft.FSharp.Core [] [] [] - [] + [] type ValueOption<'T> = | ValueNone : 'T voption | ValueSome : 'T -> 'T voption @@ -2942,11 +2947,17 @@ namespace Microsoft.FSharp.Core [] member x.IsSome = match x with ValueSome _ -> true | _ -> false - static member op_Implicit (value) : 'T option = Some(value) - - override x.ToString() = - // x is non-null, hence ValueSome - "ValueSome("^anyToStringShowingNull x.Value^")" + static member op_Implicit (value) : 'T voption = ValueSome(value) + + member private x.DebugDisplay = + match x with + | ValueNone -> "ValueNone" + | ValueSome _ -> String.Format("ValueSome({0})", anyToStringShowingNull x.Value) + + override x.ToString() = + match x with + | ValueNone -> "ValueNone" + | ValueSome _ -> anyToStringShowingNull x.Value and 'T voption = ValueOption<'T> diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 7ba3b3ae4d..cd28701e67 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -1860,6 +1860,11 @@ namespace Microsoft.FSharp.Core /// Return 'true' if the value option is a 'ValueNone' value. member IsNone : bool + + /// Implicitly converts a value into an optional that is a 'ValueSome' value. + /// The input value + /// A voption representing the value. + static member op_Implicit: value: 'T -> 'T voption /// The type of optional values, represented as structs. /// From b7bc2ca3c02d04e4e967927a4a96ea857ed09289 Mon Sep 17 00:00:00 2001 From: Goswin Date: Wed, 30 Oct 2019 23:30:21 +0100 Subject: [PATCH 133/146] Optimize Seq.Last to behave like Seq.Length (incl. tests) (#7765) * Optimize Seq.Last like Seq.Length Add type check to Seq.Last and Seq.TryLast to avoid full iteration if not necessary. Like Seq.Length does it at https://github.com/dotnet/fsharp/blob/c18e1780b3f3f345364cb1ad8e510ea9f4590d3a/src/fsharp/FSharp.Core/seq.fs#L709 * Add test for Optimized Seq.Last and Seq.TryLast * style update * style update 2 * update comments and fix build error Github Build error was: Check failure on line 132 in tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs @azure-pipelines azure-pipelines / fsharp-ci (Build Windows vs_release) tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs#L132 tests\FSharp.Core.UnitTests\FSharp.Core\Microsoft.FSharp.Collections\SeqModule2.fs(132,58): error FS0064: This construct causes code to be less generic than indicated by the type annotations. The type variable 'a has been constrained to be type 'unit'. * include List.last case * include list in tests * ensure same exception is raised on empty list * typo * Added implementation of List.last since it is not available at this point due to compilation error The recursive function could also be defined inside but i guess then it would be reallocated on every call to Seq.Last (in case of list match). An alternative would be to add .Last member on list type (like .Length member) * inline List.last reverting my previous attempt https://github.com/dotnet/fsharp/pull/7765/commits/b329e23c543b41b36143fafc77187acc58585471 tail rec functions should be inlined * typo in tests(build failed) * typo2 in test (Build failed) * move implemnetation to internal module as suggested by dsyme * renamed internal tryLast to tryLastV --- src/fsharp/FSharp.Core/list.fs | 17 ++++++++--------- src/fsharp/FSharp.Core/local.fs | 29 +++++++++++++++++++++++++++++ src/fsharp/FSharp.Core/local.fsi | 4 ++++ src/fsharp/FSharp.Core/seq.fs | 26 +++++++++----------------- 4 files changed, 50 insertions(+), 26 deletions(-) diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index e7fd17ee52..87035fb3c6 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -9,6 +9,7 @@ namespace Microsoft.FSharp.Collections open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.CompilerServices open System.Collections.Generic + [] [] @@ -24,18 +25,16 @@ namespace Microsoft.FSharp.Collections let length (list: 'T list) = list.Length [] - let rec last (list: 'T list) = - match list with - | [x] -> x - | _ :: tail -> last tail - | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + let last (list: 'T list) = + match Microsoft.FSharp.Primitives.Basics.List.tryLastV list with + | ValueSome x -> x + | ValueNone -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) [] let rec tryLast (list: 'T list) = - match list with - | [x] -> Some x - | _ :: tail -> tryLast tail - | [] -> None + match Microsoft.FSharp.Primitives.Basics.List.tryLastV list with + | ValueSome x -> Some x + | ValueNone -> None [] let rev list = Microsoft.FSharp.Primitives.Basics.List.rev list diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 75dc2bb090..0e97166352 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -988,6 +988,12 @@ module internal List = takeWhileFreshConsTail cons p xs cons + let rec tryLastV (list: 'T list) = + match list with + | [] -> ValueNone + | [x] -> ValueSome x + | _ :: tail -> tryLastV tail + module internal Array = open System @@ -1187,3 +1193,26 @@ module internal Array = res.[i] <- subUnchecked !startIndex minChunkSize array startIndex := !startIndex + minChunkSize res + +module internal Seq = + let tryLastV (source : seq<_>) = + //checkNonNull "source" source //done in main Seq.tryLast + match source with + | :? ('T[]) as a -> + if a.Length = 0 then ValueNone + else ValueSome(a.[a.Length - 1]) + + | :? ('T IList) as a -> //ResizeArray and other collections + if a.Count = 0 then ValueNone + else ValueSome(a.[a.Count - 1]) + + | :? ('T list) as a -> List.tryLastV a + + | _ -> + use e = source.GetEnumerator() + if e.MoveNext() then + let mutable res = e.Current + while (e.MoveNext()) do res <- e.Current + ValueSome(res) + else + ValueNone \ No newline at end of file diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index 3181dcbc6e..b5bcec9e95 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -65,6 +65,7 @@ module internal List = val splitAt : int -> 'T list -> ('T list * 'T list) val transpose : 'T list list -> 'T list list val truncate : int -> 'T list -> 'T list + val tryLastV : 'T list -> 'T ValueOption module internal Array = // The input parameter should be checked by callers if necessary @@ -101,3 +102,6 @@ module internal Array = val stableSortInPlaceWith: comparer:('T -> 'T -> int) -> array:'T[] -> unit val stableSortInPlace: array:'T[] -> unit when 'T : comparison + +module internal Seq = + val tryLastV : 'T seq -> 'T ValueOption diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index 97326e7315..0b6e7ed2e5 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -1377,29 +1377,21 @@ namespace Microsoft.FSharp.Collections invalidArg "source" (SR.GetString(SR.notEnoughElements)) while e.MoveNext() do yield e.Current } - + [] let last (source : seq<_>) = checkNonNull "source" source - use e = source.GetEnumerator() - if e.MoveNext() then - let mutable res = e.Current - while (e.MoveNext()) do res <- e.Current - res - else - invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString - + match Microsoft.FSharp.Primitives.Basics.Seq.tryLastV source with + | ValueSome x -> x + | ValueNone -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + [] let tryLast (source : seq<_>) = checkNonNull "source" source - use e = source.GetEnumerator() - if e.MoveNext() then - let mutable res = e.Current - while (e.MoveNext()) do res <- e.Current - Some res - else - None - + match Microsoft.FSharp.Primitives.Basics.Seq.tryLastV source with + | ValueSome x -> Some x + | ValueNone -> None + [] let exactlyOne (source : seq<_>) = checkNonNull "source" source From 2bc8fed71671dcfddc0b4453e8ecf97721bd16e0 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 02:29:02 +0300 Subject: [PATCH 134/146] Fix some typos (#7665) --- fcs/FSharp.Compiler.Service.sln.DotSettings | 780 ++++++++++++++++++ src/absil/bytes.fs | 6 +- src/absil/il.fs | 6 +- src/absil/ilascii.fs | 2 +- src/absil/illib.fs | 10 +- src/absil/ilmorph.fs | 2 +- src/absil/ilreflect.fs | 8 +- src/absil/ilsupp.fs | 22 +- src/absil/ilwrite.fs | 42 +- src/fsharp/CompileOps.fs | 68 +- src/fsharp/CompileOps.fsi | 2 +- src/fsharp/CompileOptions.fs | 4 +- src/fsharp/CompileOptions.fsi | 2 +- src/fsharp/ConstraintSolver.fs | 12 +- src/fsharp/DetupleArgs.fs | 2 +- src/fsharp/DotNetFrameworkDependencies.fs | 2 +- src/fsharp/ErrorLogger.fs | 16 +- src/fsharp/ExtensionTyping.fs | 2 +- src/fsharp/IlxGen.fs | 46 +- src/fsharp/InfoReader.fs | 12 +- src/fsharp/InnerLambdasToTopLevelFuncs.fs | 4 +- src/fsharp/InternalCollections.fs | 30 +- src/fsharp/LanguageFeatures.fs | 2 +- src/fsharp/LanguageFeatures.fsi | 2 +- src/fsharp/LexFilter.fs | 28 +- src/fsharp/LowerCallsAndSeqs.fs | 14 +- src/fsharp/MethodCalls.fs | 12 +- src/fsharp/NameResolution.fs | 22 +- src/fsharp/NameResolution.fsi | 2 +- src/fsharp/NicePrint.fs | 24 +- src/fsharp/Optimizer.fs | 26 +- src/fsharp/PatternMatchCompilation.fs | 4 +- src/fsharp/PostInferenceChecks.fs | 10 +- src/fsharp/PrettyNaming.fs | 2 +- .../SimulatedMSBuildReferenceResolver.fs | 24 +- src/fsharp/TastOps.fs | 22 +- src/fsharp/TastOps.fsi | 18 +- src/fsharp/TastPickle.fs | 4 +- src/fsharp/TypeChecker.fs | 68 +- src/fsharp/ast.fs | 50 +- src/fsharp/fsi/fsi.fs | 14 +- src/fsharp/fsi/fsi.fsi | 12 +- src/fsharp/infos.fs | 4 +- src/fsharp/layout.fs | 2 +- src/fsharp/lib.fs | 32 +- src/fsharp/range.fs | 6 +- src/fsharp/service/FSharpCheckerResults.fs | 6 +- src/fsharp/service/FSharpCheckerResults.fsi | 2 +- src/fsharp/service/IncrementalBuild.fs | 130 +-- src/fsharp/service/IncrementalBuild.fsi | 6 +- src/fsharp/service/QuickParse.fs | 8 +- src/fsharp/service/QuickParse.fsi | 6 +- src/fsharp/service/Reactor.fs | 2 +- src/fsharp/service/ServiceAnalysis.fs | 2 +- src/fsharp/service/ServiceAssemblyContent.fs | 14 +- src/fsharp/service/ServiceAssemblyContent.fsi | 8 +- src/fsharp/service/ServiceLexing.fs | 18 +- src/fsharp/service/ServiceLexing.fsi | 4 +- src/fsharp/service/ServiceNavigation.fs | 8 +- src/fsharp/service/ServiceStructure.fs | 12 +- src/fsharp/service/ServiceStructure.fsi | 2 +- src/fsharp/service/ServiceUntypedParse.fs | 4 +- src/fsharp/service/service.fs | 14 +- src/fsharp/symbols/Exprs.fs | 56 +- src/fsharp/symbols/Exprs.fsi | 2 +- src/fsharp/symbols/SymbolHelpers.fs | 8 +- src/fsharp/symbols/SymbolHelpers.fsi | 2 +- src/fsharp/symbols/Symbols.fs | 10 +- src/fsharp/symbols/Symbols.fsi | 2 +- src/fsharp/tast.fs | 28 +- src/utils/CompilerLocationUtils.fs | 18 +- src/utils/HashMultiMap.fs | 12 +- src/utils/prim-lexing.fsi | 2 +- src/utils/prim-parsing.fs | 2 +- 74 files changed, 1326 insertions(+), 546 deletions(-) create mode 100644 fcs/FSharp.Compiler.Service.sln.DotSettings diff --git a/fcs/FSharp.Compiler.Service.sln.DotSettings b/fcs/FSharp.Compiler.Service.sln.DotSettings new file mode 100644 index 0000000000..59e0b85499 --- /dev/null +++ b/fcs/FSharp.Compiler.Service.sln.DotSettings @@ -0,0 +1,780 @@ + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True~ \ No newline at end of file diff --git a/src/absil/bytes.fs b/src/absil/bytes.fs index a272b99a45..e3996fe3bf 100755 --- a/src/absil/bytes.fs +++ b/src/absil/bytes.fs @@ -87,10 +87,10 @@ type internal ByteBuffer = let n = arr.Length let newSize = buf.bbCurrent + n buf.Ensure newSize - let bbarr = buf.bbArray - let bbbase = buf.bbCurrent + let bbArr = buf.bbArray + let bbBase = buf.bbCurrent for i = 0 to n - 1 do - bbarr.[bbbase + i] <- byte arr.[i] + bbArr.[bbBase + i] <- byte arr.[i] buf.bbCurrent <- newSize member bb.FixupInt32 pos n = diff --git a/src/absil/il.fs b/src/absil/il.fs index 75d30e6b79..e9740ee0f4 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -2962,7 +2962,7 @@ let mkILNonGenericEmptyCtor tag superTy = mkILCtor (ILMemberAccess.Public, [], mkMethodBody (false, [], 8, nonBranchingInstrsToCode ctor, tag)) // -------------------------------------------------------------------- -// Make a static, top level monomophic method - very useful for +// Make a static, top level monomorphic method - very useful for // creating helper ILMethodDefs for internal use. // -------------------------------------------------------------------- @@ -3323,8 +3323,8 @@ let mkILSimpleModule assemblyName modname dll subsystemVersion useHighEntropyVA //----------------------------------------------------------------------- // [instructions_to_code] makes the basic block structure of code from // a primitive array of instructions. We -// do this by iterating over the instructions, pushing new basic blocks -// everytime we encounter an address that has been recorded +// do this be iterating over the instructions, pushing new basic blocks +// every time we encounter an address that has been recorded // [bbstartToCodeLabelMap]. //----------------------------------------------------------------------- diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index cf8cef0a63..6c89ca69b5 100755 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -8,7 +8,7 @@ open FSharp.Compiler.AbstractIL.Internal.Library open FSharp.Compiler.AbstractIL.IL // set to the proper value at CompileOps.fs (BuildFrameworkTcImports) -// Only reelvant when compiling FSharp.Core.dll +// Only relevant when compiling FSharp.Core.dll let parseILGlobals = ref EcmaMscorlibILGlobals /// Table of parsing and pretty printing data for instructions. diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 68b7c8d40a..70e67a0815 100755 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -164,12 +164,12 @@ module Array = /// pass an array byref to reverse it in place let revInPlace (array: 'T []) = if Array.isEmpty array then () else - let arrlen, revlen = array.Length-1, array.Length/2 - 1 - for idx in 0 .. revlen do + let arrLen, revLen = array.Length-1, array.Length/2 - 1 + for idx in 0 .. revLen do let t1 = array.[idx] - let t2 = array.[arrlen-idx] + let t2 = array.[arrLen-idx] array.[idx] <- t2 - array.[arrlen-idx] <- t1 + array.[arrLen-idx] <- t1 /// Async implementation of Array.map. let mapAsync (mapping : 'T -> Async<'U>) (array : 'T[]) : Async<'U[]> = @@ -624,7 +624,7 @@ type CompilationThreadToken() = interface ExecutionToken let RequireCompilationThread (_ctok: CompilationThreadToken) = () /// Represents a place in the compiler codebase where we are passed a CompilationThreadToken unnecessarily. -/// This reprents code that may potentially not need to be executed on the compilation thread. +/// This represents code that may potentially not need to be executed on the compilation thread. let DoesNotRequireCompilerThreadTokenAndCouldPossiblyBeMadeConcurrent (_ctok: CompilationThreadToken) = () /// Represents a place in the compiler codebase where we assume we are executing on a compilation thread diff --git a/src/absil/ilmorph.fs b/src/absil/ilmorph.fs index ffd86aa504..997f6f4a0a 100755 --- a/src/absil/ilmorph.fs +++ b/src/absil/ilmorph.fs @@ -50,7 +50,7 @@ let code_instr2instr_ty2ty (finstr,fty) (c:ILCode) = Exceptions = c.Exceptions |> List.map (fun e -> { e with Clause = e.Clause |> (function ILExceptionClause.TypeCatch (ilty, b) -> ILExceptionClause.TypeCatch (fty ilty, b) | cl -> cl) }) } // -------------------------------------------------------------------- -// Standard morphisms - mapping tyes etc. +// Standard morphisms - mapping types etc. // -------------------------------------------------------------------- let rec ty_tref2tref f x = diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index 4bb5c9832d..c99740767b 100755 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -1724,7 +1724,7 @@ let buildMethodImplsPass3 cenv _tref (typB: TypeBuilder) emEnv (mimpl: IL.ILMeth // typeAttributesOf* //---------------------------------------------------------------------------- -let typeAttrbutesOfTypeDefKind x = +let typeAttributesOfTypeDefKind x = match x with // required for a TypeBuilder | ILTypeDefKind.Class -> TypeAttributes.Class @@ -1733,14 +1733,14 @@ let typeAttrbutesOfTypeDefKind x = | ILTypeDefKind.Enum -> TypeAttributes.Class | ILTypeDefKind.Delegate -> TypeAttributes.Class -let typeAttrbutesOfTypeAccess x = +let typeAttributesOfTypeAccess x = match x with | ILTypeDefAccess.Public -> TypeAttributes.Public | ILTypeDefAccess.Private -> TypeAttributes.NotPublic | ILTypeDefAccess.Nested macc -> match macc with | ILMemberAccess.Assembly -> TypeAttributes.NestedAssembly - | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controled." + | ILMemberAccess.CompilerControlled -> failwith "Nested compiler controlled." | ILMemberAccess.FamilyAndAssembly -> TypeAttributes.NestedFamANDAssem | ILMemberAccess.FamilyOrAssembly -> TypeAttributes.NestedFamORAssem | ILMemberAccess.Family -> TypeAttributes.NestedFamily @@ -1929,7 +1929,7 @@ let rec getTypeRefsInType (allTypes: CollectTypes) ty acc = | CollectTypes.ValueTypesOnly -> acc | CollectTypes.All -> getTypeRefsInType allTypes eltType acc | ILType.Value tspec -> - // We usee CollectTypes.All because the .NET type loader appears to always eagerly require all types + // We use CollectTypes.All because the .NET type loader appears to always eagerly require all types // referred to in an instantiation of a generic value type tspec.TypeRef :: List.foldBack (getTypeRefsInType CollectTypes.All) tspec.GenericArgs acc | ILType.Boxed tspec -> diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index a3eca5b110..a1e317f764 100755 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -744,7 +744,7 @@ type ISymUnmanagedWriter2 = abstract OpenScope: startOffset: int * pRetVal: int byref -> unit abstract CloseScope: endOffset: int -> unit abstract SetScopeRange: scopeID: int * startOffset: int * endOffset: int -> unit - abstract DefineLocalVariable: [] varname: string * + abstract DefineLocalVariable: [] varName: string * attributes: int * cSig: int * []signature: byte[] * @@ -754,7 +754,7 @@ type ISymUnmanagedWriter2 = addr3: int * startOffset: int * endOffset: int -> unit - abstract DefineParameter: [] paramname: string * + abstract DefineParameter: [] paramName: string * attributes: int * sequence: int * addressKind: int * @@ -762,7 +762,7 @@ type ISymUnmanagedWriter2 = addr2: int * addr3: int -> unit abstract DefineField: parent: int * - [] fieldname: string * + [] fieldName: string * attributes: int * cSig: int * []signature: byte[] * @@ -770,7 +770,7 @@ type ISymUnmanagedWriter2 = addr1: int * addr2: int * addr3: int -> unit - abstract DefineGlobalVariable: [] globalvarname: string * + abstract DefineGlobalVariable: [] globalVarName: string * attributes: int * cSig: int * []signature: byte[] * @@ -780,7 +780,7 @@ type ISymUnmanagedWriter2 = addr3: int -> unit abstract Close: unit -> unit abstract SetSymAttribute: parent: int * - [] attname: string * + [] attName: string * cData: int * []data: byte[] -> unit abstract OpenNamespace: [] nsname: string -> unit @@ -809,16 +809,16 @@ type ISymUnmanagedWriter2 = []endColumns: int [] -> unit abstract RemapToken: oldToken: int * newToken: int -> unit abstract Initialize2: emitter: nativeint * - [] tempfilename: string * + [] tempFileName: string * stream: IStream * fullBuild: bool * - [] finalfilename: string -> unit - abstract DefineConstant: [] constname: string * + [] finalFileName: string -> unit + abstract DefineConstant: [] constName: string * value: Object * cSig: int * []signature: byte[] -> unit abstract Abort: unit -> unit - abstract DefineLocalVariable2: [] localvarname2: string * + abstract DefineLocalVariable2: [] localVarName2: string * attributes: int * sigToken: int * addressKind: int * @@ -827,14 +827,14 @@ type ISymUnmanagedWriter2 = addr3: int * startOffset: int * endOffset: int -> unit - abstract DefineGlobalVariable2: [] globalvarname2: string * + abstract DefineGlobalVariable2: [] globalVarName2: string * attributes: int * sigToken: int * addressKind: int * addr1: int * addr2: int * addr3: int -> unit - abstract DefineConstant2: [] constantname2: string * + abstract DefineConstant2: [] constantName2: string * value: Object * sigToken: int -> unit abstract OpenMethod2: method2: int * diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 2a8b4343f9..e16e4933f7 100755 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -476,8 +476,8 @@ type MetadataTable<'T> = h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) - member tbl.AddUniqueEntry nm geterr x = - if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+geterr x+"' in "+nm+" table") + member tbl.AddUniqueEntry nm getter x = + if tbl.dict.ContainsKey x then failwith ("duplicate entry '"+getter x+"' in "+nm+" table") else tbl.AddSharedEntry x member tbl.GetTableEntry x = tbl.dict.[x] @@ -806,7 +806,7 @@ let getTypeDefOrRefAsUncodedToken (tag, idx) = else failwith "getTypeDefOrRefAsUncodedToken" getUncodedToken tab idx -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer let EmitArrayShape (bb: ByteBuffer) (ILArrayShape shape) = let sized = List.filter (function (_, Some _) -> true | _ -> false) shape let lobounded = List.filter (function (Some _, _) -> true | _ -> false) shape @@ -834,7 +834,7 @@ let callconvToByte ntypars (Callconv (hasthis, bcc)) = | ILArgConvention.VarArg -> e_IMAGE_CEE_CS_CALLCONV_VARARG) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et, tspec: ILTypeSpec) = if isNil tspec.GenericArgs then bb.EmitByte et @@ -944,7 +944,7 @@ and EmitCallsig cenv env bb (callconv, args: ILTypes, ret, varargs: ILVarArgs, g and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitTypes cenv env bb (inst: ILTypes) = inst |> List.iter (EmitType cenv env bb) @@ -976,7 +976,7 @@ let rec GetNativeTypeAsBlobIdx cenv (ty: ILNativeType) = and GetNativeTypeAsBytes ty = emitBytesViaBuffer (fun bb -> EmitNativeType bb ty) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitNativeType bb ty = if List.memAssoc ty (Lazy.force ILNativeTypeRevMap) then bb.EmitByte (List.assoc ty (Lazy.force ILNativeTypeRevMap)) @@ -1035,7 +1035,7 @@ and EmitNativeType bb ty = let rec GetFieldInitAsBlobIdx cenv (x: ILFieldInit) = GetBytesAsBlobIdx cenv (emitBytesViaBuffer (fun bb -> GetFieldInit bb x)) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and GetFieldInit (bb: ByteBuffer) x = match x with | ILFieldInit.String b -> bb.EmitBytes (System.Text.Encoding.Unicode.GetBytes b) @@ -1093,7 +1093,7 @@ let GetTypeAccessFlags access = | ILTypeDefAccess.Nested ILMemberAccess.Public -> 0x00000002 | ILTypeDefAccess.Nested ILMemberAccess.Private -> 0x00000003 | ILTypeDefAccess.Nested ILMemberAccess.Family -> 0x00000004 - | ILTypeDefAccess.Nested ILMemberAccess.CompilerControlled -> failwith "bad type acccess" + | ILTypeDefAccess.Nested ILMemberAccess.CompilerControlled -> failwith "bad type access" | ILTypeDefAccess.Nested ILMemberAccess.FamilyAndAssembly -> 0x00000006 | ILTypeDefAccess.Nested ILMemberAccess.FamilyOrAssembly -> 0x00000007 | ILTypeDefAccess.Nested ILMemberAccess.Assembly -> 0x00000005 @@ -1258,7 +1258,7 @@ and GetFieldDefAsFieldDefIdx cenv tidx fd = // -------------------------------------------------------------------- // ILMethodRef --> ILMethodDef. // -// Only successfuly converts ILMethodRef's referring to +// Only successfully converts ILMethodRef's referring to // methods in the module being emitted. // -------------------------------------------------------------------- @@ -1439,7 +1439,7 @@ and GetFieldSpecAsMemberRefIdx cenv env fspec = let fenv = envForFieldSpec fspec FindOrAddSharedRow cenv TableNames.MemberRef (GetFieldSpecAsMemberRefRow cenv env fenv fspec) -// REVIEW: write into an accumuating buffer +// REVIEW: write into an accumulating buffer and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec: ILFieldSpec) = bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType @@ -1555,8 +1555,8 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u - member codebuf.RecordReqdStringFixup stringidx = - codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod + member codebuf.RecordReqdStringFixup stringIdx = + codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringIdx) :: codebuf.reqdStringFixupsInMethod // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef @@ -1592,7 +1592,7 @@ module Codebuf = go 0 (Array.length arr) let applyBrFixups (origCode : byte[]) origExnClauses origReqdStringFixups (origAvailBrFixups: Dictionary) origReqdBrFixups origSeqPoints origScopes = - let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixuploc, _) -> fixuploc) + let orderedOrigReqdBrFixups = origReqdBrFixups |> List.sortBy (fun (_, fixupLoc, _) -> fixupLoc) let newCode = ByteBuffer.Create origCode.Length @@ -1732,7 +1732,7 @@ module Codebuf = | true, n -> let relOffset = n - endOfInstr if small then - if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed" + if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixup sanity check failed" newCode.[newFixupLoc] <- b0 relOffset else checkFixup32 newCode newFixupLoc 0xf00dd00fl @@ -2820,7 +2820,7 @@ and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = // manifest --> generate Assembly row // -------------------------------------------------------------------- -and GetManifsetAsAssemblyRow cenv m = +and GetManifestAsAssemblyRow cenv m = UnsharedRow [|ULong m.AuxModuleHashAlgorithm UShort (match m.Version with None -> 0us | Some version -> version.Major) @@ -2836,7 +2836,7 @@ and GetManifsetAsAssemblyRow cenv m = | ILAssemblyLongevity.PlatformSystem -> 0x0008) ||| (if m.Retargetable then 0x100 else 0x0) ||| // Setting these causes peverify errors. Hence both ilread and ilwrite ignore them and refuse to set them. - // Any debugging customattributes will automatically propagate + // Any debugging customAttributes will automatically propagate // REVIEW: No longer appears to be the case (if m.JitTracking then 0x8000 else 0x0) ||| (match m.PublicKey with None -> 0x0000 | Some _ -> 0x0001) ||| 0x0000) @@ -2845,7 +2845,7 @@ and GetManifsetAsAssemblyRow cenv m = (match m.Locale with None -> StringE 0 | Some x -> StringE (GetStringHeapIdx cenv x)) |] and GenManifestPass3 cenv m = - let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifsetAsAssemblyRow cenv m) + let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifestAsAssemblyRow cenv m) GenSecurityDeclsPass3 cenv (hds_Assembly, aidx) m.SecurityDecls.AsList GenCustomAttrsPass3Or4 cenv (hca_Assembly, aidx) m.CustomAttrs GenExportedTypesPass3 cenv m.ExportedTypes @@ -3033,7 +3033,7 @@ let nochunk next = ({addr= 0x0;size= 0x0; }, next) let count f arr = Array.fold (fun x y -> x + f y) 0x0 arr -module FileSystemUtilites = +module FileSystemUtilities = open System open System.Reflection open System.Globalization @@ -3630,7 +3630,7 @@ let writeBinaryAndReportMappings (outfile, match aref.Version with | Some version when version.Major = 2us -> parseILVersion "2.0.50727.0" | Some v -> v - | None -> failwith "Expected msorlib to have a version number" + | None -> failwith "Expected mscorlib to have a version number" let entryPointToken, code, codePadding, metadata, data, resources, requiredDataFixups, pdbData, mappings, guidStart = writeILMetadataAndCode ((pdbfile <> None), desiredMetadataVersion, ilg, emitTailcalls, deterministic, showTimes) modul next normalizeAssemblyRefs @@ -3859,7 +3859,7 @@ let writeBinaryAndReportMappings (outfile, writeInt32 os timestamp // Update pdbData with new guid and timestamp. Portable and embedded PDBs don't need the ModuleID - // Full and PdbOnly aren't supported under deterministic builds currently, they rely on non-determinsitic Windows native code + // Full and PdbOnly aren't supported under deterministic builds currently, they rely on non-deterministic Windows native code { pdbData with ModuleID = final.[0..15] ; Timestamp = timestamp } else writeInt32 os timestamp // date since 1970 @@ -4191,7 +4191,7 @@ let writeBinaryAndReportMappings (outfile, os.Dispose() try - FileSystemUtilites.setExecutablePermission outfile + FileSystemUtilities.setExecutablePermission outfile with _ -> () pdbData, pdbOpt, debugDirectoryChunk, debugDataChunk, debugChecksumPdbChunk, debugEmbeddedPdbChunk, debugDeterministicPdbChunk, textV2P, mappings diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 5979861c1f..1cc0837d91 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -435,7 +435,7 @@ let SplitRelatedDiagnostics(err: PhasedDiagnostic) = SplitRelatedException err.Exception -let DeclareMesssage = FSharp.Compiler.DiagnosticMessage.DeclareResourceString +let DeclareMessage = FSharp.Compiler.DiagnosticMessage.DeclareResourceString do FSComp.SR.RunStartupValidation() let SeeAlsoE() = DeclareResourceString("SeeAlso", "%s") @@ -1493,15 +1493,15 @@ let OutputPhasedErrorR (os: StringBuilder) (err: PhasedDiagnostic) (canSuggestNa | IntfImplInExtrinsicAugmentation(_) -> os.Append(IntfImplInExtrinsicAugmentationE().Format) |> ignore - | UnresolvedReferenceError(assemblyname, _) + | UnresolvedReferenceError(assemblyName, _) - | UnresolvedReferenceNoRange assemblyname -> - os.Append(UnresolvedReferenceNoRangeE().Format assemblyname) |> ignore + | UnresolvedReferenceNoRange assemblyName -> + os.Append(UnresolvedReferenceNoRangeE().Format assemblyName) |> ignore - | UnresolvedPathReference(assemblyname, pathname, _) + | UnresolvedPathReference(assemblyName, pathname, _) - | UnresolvedPathReferenceNoRange(assemblyname, pathname) -> - os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyname) |> ignore + | UnresolvedPathReferenceNoRange(assemblyName, pathname) -> + os.Append(UnresolvedPathReferenceNoRangeE().Format pathname assemblyName) |> ignore | DeprecatedCommandLineOptionFull(fullText, _) -> os.Append fullText |> ignore @@ -2169,7 +2169,7 @@ type TcConfigBuilder = static member Initial = { - primaryAssembly = PrimaryAssembly.Mscorlib // defaut value, can be overridden using the command line switch + primaryAssembly = PrimaryAssembly.Mscorlib // default value, can be overridden using the command line switch light = None noFeedback = false stackReserveSize = None @@ -2581,7 +2581,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = // Look for an explicit reference to mscorlib/netstandard.dll or System.Runtime.dll and use that to compute clrRoot and targetFrameworkVersion let primaryAssemblyReference, primaryAssemblyExplicitFilenameOpt = computeKnownDllReference(data.primaryAssembly.Name) let fslibReference = - // Look for explict FSharp.Core reference otherwise use version that was referenced by compiler + // Look for explicit FSharp.Core reference otherwise use version that was referenced by compiler let dllReference, fileNameOpt = computeKnownDllReference getFSharpCoreLibraryName match fileNameOpt with | Some _ -> dllReference @@ -2926,7 +2926,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = | None -> None else None - member tcConfig.ResolveLibWithDirectories (ccuLoadFaulureAction, r: AssemblyReference) = + member tcConfig.ResolveLibWithDirectories (ccuLoadFailureAction, r: AssemblyReference) = let m, nm = r.Range, r.Text use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parameter // test for both libraries and executables @@ -2944,7 +2944,7 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) = match rs |> List.tryPick (fun r -> tcConfig.TryResolveLibWithDirectories r) with | Some res -> Some res | None -> - match ccuLoadFaulureAction with + match ccuLoadFailureAction with | CcuLoadFailureAction.RaiseError -> let searchMessage = String.concat "\n " (tcConfig.GetSearchPathsForLibraryFiles()) raise (FileNameNotResolved(nm, searchMessage, m)) @@ -3189,14 +3189,14 @@ let QualFileNameOfImpls filename specs = | [SynModuleOrNamespace(_, _, kind, _, _, _, _, m)] when not kind.IsModule -> QualFileNameOfFilename m filename | _ -> QualFileNameOfFilename (mkRange filename pos0 pos0) filename -let PrepandPathToQualFileName x (QualifiedNameOfFile q) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange, pathOfLid x@[q.idText]) -let PrepandPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = SynModuleOrNamespace(x@p, b, c, d, e, f, g, h) -let PrepandPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) +let PrependPathToQualFileName x (QualifiedNameOfFile q) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange, pathOfLid x@[q.idText]) +let PrependPathToImpl x (SynModuleOrNamespace(p, b, c, d, e, f, g, h)) = SynModuleOrNamespace(x@p, b, c, d, e, f, g, h) +let PrependPathToSpec x (SynModuleOrNamespaceSig(p, b, c, d, e, f, g, h)) = SynModuleOrNamespaceSig(x@p, b, c, d, e, f, g, h) let PrependPathToInput x inp = match inp with - | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrepandPathToQualFileName x q, d, hd, List.map (PrepandPathToImpl x) impls, e)) - | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrepandPathToQualFileName x q, d, hd, List.map (PrepandPathToSpec x) specs)) + | ParsedInput.ImplFile (ParsedImplFileInput (b, c, q, d, hd, impls, e)) -> ParsedInput.ImplFile (ParsedImplFileInput (b, c, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToImpl x) impls, e)) + | ParsedInput.SigFile (ParsedSigFileInput (b, q, d, hd, specs)) -> ParsedInput.SigFile (ParsedSigFileInput (b, PrependPathToQualFileName x q, d, hd, List.map (PrependPathToSpec x) specs)) let ComputeAnonModuleName check defaultNamespace filename (m: range) = let modname = CanonicalizeFilename filename @@ -3583,17 +3583,17 @@ let GetOptimizationDataResourceName (r: ILResource) = let IsReflectedDefinitionsResource (r: ILResource) = r.Name.StartsWithOrdinal(QuotationPickler.SerializedReflectedDefinitionsResourceNameBase) -let MakeILResource rname bytes = - { Name = rname +let MakeILResource rName bytes = + { Name = rName Location = ILResourceLocation.LocalOut bytes Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs MetadataIndex = NoMetadataIdx } -let PickleToResource inMem file (g: TcGlobals) scope rname p x = +let PickleToResource inMem file (g: TcGlobals) scope rName p x = let file = PathMap.apply g.pathMap file - { Name = rname + { Name = rName Location = (let bytes = pickleObjWithDanglingCcus inMem file g scope p x in ILResourceLocation.LocalOut bytes) Access = ILResourceAccess.Public CustomAttrsStored = storeILCustomAttrs emptyILCustomAttrs @@ -3607,7 +3607,7 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rname = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpSignatureDataResourceName2 else FSharpSignatureDataResourceName let includeDir = if String.IsNullOrEmpty tcConfig.implicitIncludeDir then "" @@ -3616,7 +3616,7 @@ let WriteSignatureData (tcConfig: TcConfig, tcGlobals, exportRemapping, ccu: Ccu |> System.IO.Path.GetFullPath |> PathMap.applyDir tcGlobals.pathMap - PickleToResource inMem file tcGlobals ccu (rname+ccu.AssemblyName) pickleCcuInfo + PickleToResource inMem file tcGlobals ccu (rName+ccu.AssemblyName) pickleCcuInfo { mspec=mspec compileTimeWorkingDir=includeDir usesQuotations = ccu.UsesFSharp20PlusQuotations } @@ -3627,8 +3627,8 @@ let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = let WriteOptimizationData (tcGlobals, file, inMem, ccu: CcuThunk, modulInfo) = // For historical reasons, we use a different resource name for FSharp.Core, so older F# compilers // don't complain when they see the resource. - let rname = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName - PickleToResource inMem file tcGlobals ccu (rname+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo + let rName = if ccu.AssemblyName = getFSharpCoreLibraryName then FSharpOptimizationDataResourceName2 else FSharpOptimizationDataResourceName + PickleToResource inMem file tcGlobals ccu (rName+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo //---------------------------------------------------------------------------- // Abstraction for project reference @@ -4118,7 +4118,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse (typeProviderEnvironment, tcConfig: TcConfig, m, entity: Entity, - injectedNamspace, remainingNamespace, + injectedNamespace, remainingNamespace, provider, st: Tainted option) = match remainingNamespace with @@ -4126,13 +4126,13 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse // Inject the namespace entity match entity.ModuleOrNamespaceType.ModulesAndNamespacesByDemangledName.TryFind next with | Some childEntity -> - tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamspace, rest, provider, st) + tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, childEntity, next :: injectedNamespace, rest, provider, st) | None -> // Build up the artificial namespace if there is not a real one. - let cpath = CompPath(ILScopeRef.Local, injectedNamspace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) + let cpath = CompPath(ILScopeRef.Local, injectedNamespace |> List.rev |> List.map (fun n -> (n, ModuleOrNamespaceKind.Namespace)) ) let newNamespace = NewModuleOrNamespace (Some cpath) taccessPublic (ident(next, rangeStartup)) XmlDoc.Empty [] (MaybeLazy.Strict (NewEmptyModuleOrNamespaceType Namespace)) entity.ModuleOrNamespaceType.AddModuleOrNamespaceByMutation newNamespace - tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamspace, rest, provider, st) + tcImports.InjectProvidedNamespaceOrTypeIntoEntity (typeProviderEnvironment, tcConfig, m, newNamespace, next :: injectedNamespace, rest, provider, st) | [] -> match st with | Some st -> @@ -4584,7 +4584,7 @@ and [] TcImports(tcConfigP: TcConfigProvider, initialResolutions: TcAsse | None -> ErrorD(AssemblyNotResolved(assemblyReference.Text, assemblyReference.Range)) else - // This is a previously unencounterd assembly. Resolve it and add it to the list. + // This is a previously unencountered assembly. Resolve it and add it to the list. // But don't cache resolution failures because the assembly may appear on the disk later. let resolved, unresolved = TcConfig.TryResolveLibsUsingMSBuildRules(tcConfig, [ assemblyReference ], assemblyReference.Range, mode) match resolved, unresolved with @@ -5187,7 +5187,7 @@ module private ScriptPreprocessClosure = filename, sourceText, codeContext, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = // Resolve the basic references such as FSharp.Core.dll first, before processing any #I directives in the script @@ -5198,7 +5198,7 @@ module private ScriptPreprocessClosure = let tcConfig = CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, codeContext, useSimpleResolution, - useFsiAuxLib, None, applyCommmandLineArgs, assumeDotNetFramework, + useFsiAuxLib, None, applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) let resolutions0, _unresolvedReferences = GetAssemblyResolutionInformation(ctok, tcConfig) @@ -5208,7 +5208,7 @@ module private ScriptPreprocessClosure = let tcConfig = CreateScriptTextTcConfig(legacyReferenceResolver, defaultFSharpBinariesDir, filename, codeContext, useSimpleResolution, useFsiAuxLib, Some references0, - applyCommmandLineArgs, assumeDotNetFramework, useSdkRefs, + applyCommandLineArgs, assumeDotNetFramework, useSdkRefs, tryGetMetadataSnapshot, reduceMemoryUsage) let closureSources = [ClosureSource(filename, range0, sourceText, true)] @@ -5238,13 +5238,13 @@ type LoadClosure with (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename: string, sourceText: ISourceText, codeContext, useSimpleResolution: bool, useFsiAuxLib, useSdkRefs, lexResourceManager: Lexhelp.LexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse ScriptPreprocessClosure.GetFullClosureOfScriptText (ctok, legacyReferenceResolver, defaultFSharpBinariesDir, filename, sourceText, codeContext, useSimpleResolution, useFsiAuxLib, useSdkRefs, lexResourceManager, - applyCommmandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) + applyCommandLineArgs, assumeDotNetFramework, tryGetMetadataSnapshot, reduceMemoryUsage) /// Analyze a set of script files and find the closure of their references. static member ComputeClosureOfScriptFiles diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 364336f32d..51b10bc028 100644 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -63,7 +63,7 @@ val ComputeQualifiedNameOfFileFromUniquePath: range * string list -> Ast.Qualifi val PrependPathToInput: Ast.Ident list -> Ast.ParsedInput -> Ast.ParsedInput -/// State used to de-deuplicate module names along a list of file names +/// State used to de-deduplicate module names along a list of file names type ModuleNamesDict = Map> /// Checks if a ParsedInput is using a module name that was already given and deduplicates the name if needed. diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c4595d2dc2..29e854a83f 100755 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -1670,7 +1670,7 @@ let ReportTime (tcConfig:TcConfig) descr = // OPTIMIZATION - support - addDllToOptEnv //---------------------------------------------------------------------------- -let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = +let AddExternalCcuToOptimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv | Some data -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals @@ -1682,7 +1682,7 @@ let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() let optEnv = Optimizer.IncrementalOptimizationEnv.Empty - let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) optEnv ccuinfos optEnv let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) = diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi index e6e010bff2..f1ea7d44cd 100644 --- a/src/fsharp/CompileOptions.fsi +++ b/src/fsharp/CompileOptions.fsi @@ -76,7 +76,7 @@ val SetTargetProfile : TcConfigBuilder -> string -> unit val GetGeneratedILModuleName : CompilerTarget -> string -> string val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv -val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv +val AddExternalCcuToOptimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedImplFile list -> TypedAssemblyAfterOptimization * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator diff --git a/src/fsharp/ConstraintSolver.fs b/src/fsharp/ConstraintSolver.fs index 6fd557981f..f5aade8400 100755 --- a/src/fsharp/ConstraintSolver.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -257,7 +257,7 @@ let MakeConstraintSolverEnv contextInfo css m denv = { SolverState = css m = m eContextInfo = contextInfo - // Indicates that when unifiying ty1 = ty2, only type variables in ty1 may be solved + // Indicates that when unifying ty1 = ty2, only type variables in ty1 may be solved MatchingOnly = false EquivEnv = TypeEquivEnv.Empty DisplayEnv = denv } @@ -2110,7 +2110,7 @@ and CanMemberSigsMatchUpToCheck | Some calledArg -> if isArray1DTy g calledArg.CalledArgumentType then let paramArrayElemTy = destArrayTy g calledArg.CalledArgumentType - let reflArgInfo = calledArg.ReflArgInfo // propgate the reflected-arg info to each param array argument + let reflArgInfo = calledArg.ReflArgInfo // propagate the reflected-arg info to each param array argument match calledMeth.ParamArrayCallerArgs with | Some args -> for callerArg in args do @@ -2493,9 +2493,9 @@ and ResolveOverloading if c <> 0 then c else 0 - let better (candidate: CalledMeth<_>, candidateWarnings, _) (other: CalledMeth<_>, otherwarnings, _) = + let better (candidate: CalledMeth<_>, candidateWarnings, _) (other: CalledMeth<_>, otherWarnings, _) = let candidateWarnCount = List.length candidateWarnings - let otherWarnCount = List.length otherwarnings + let otherWarnCount = List.length otherWarnings // Prefer methods that don't give "this code is less generic" warnings // Note: Relies on 'compare' respecting true > false let c = compare (candidateWarnCount = 0) (otherWarnCount = 0) @@ -2862,10 +2862,10 @@ let CodegenWitnessThatTypeSupportsTraitConstraint tcVal g amap m (traitInfo: Tra | Choice1Of5(minfo, methArgTys) -> let argExprs = // FIX for #421894 - typechecker assumes that coercion can be applied for the trait calls arguments but codegen doesn't emit coercion operations - // result - generation of non-verifyable code + // result - generation of non-verifiable code // fix - apply coercion for the arguments (excluding 'receiver' argument in instance calls) - // flatten list of argument types (looks like trait calls with curried arguments are not supported so we can just convert argument list in straighforward way) + // flatten list of argument types (looks like trait calls with curried arguments are not supported so we can just convert argument list in straightforward way) let argTypes = minfo.GetParamTypes(amap, m, methArgTys) |> List.concat diff --git a/src/fsharp/DetupleArgs.fs b/src/fsharp/DetupleArgs.fs index b15bae8f24..309e358ff9 100755 --- a/src/fsharp/DetupleArgs.fs +++ b/src/fsharp/DetupleArgs.fs @@ -199,7 +199,7 @@ module GlobalUsageAnalysis = TopLevelBindings = Zset.empty valOrder IterationIsAtTopLevel = true } - /// Log the use of a value with a particular tuple chape at a callsite + /// Log the use of a value with a particular tuple shape at a callsite /// Note: this routine is called very frequently let logUse (f: Val) tup z = {z with Uses = diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index faae31ba35..2032063334 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -166,7 +166,7 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies | Some v -> yield v // These are the Portable-profile and .NET Standard 1.6 dependencies of FSharp.Core.dll. These are needed - // when an F# sript references an F# profile 7, 78, 259 or .NET Standard 1.6 component which in turn refers + // when an F# script references an F# profile 7, 78, 259 or .NET Standard 1.6 component which in turn refers // to FSharp.Core for profile 7, 78, 259 or .NET Standard. yield "netstandard" yield "System.Runtime" // lots of types diff --git a/src/fsharp/ErrorLogger.fs b/src/fsharp/ErrorLogger.fs index 5760aef8a2..c37a339512 100755 --- a/src/fsharp/ErrorLogger.fs +++ b/src/fsharp/ErrorLogger.fs @@ -88,10 +88,10 @@ exception Deprecated of string * range exception Experimental of string * range exception PossibleUnverifiableCode of range -exception UnresolvedReferenceNoRange of (*assemblyname*) string -exception UnresolvedReferenceError of (*assemblyname*) string * range -exception UnresolvedPathReferenceNoRange of (*assemblyname*) string * (*path*) string -exception UnresolvedPathReference of (*assemblyname*) string * (*path*) string * range +exception UnresolvedReferenceNoRange of (*assemblyName*) string +exception UnresolvedReferenceError of (*assemblyName*) string * range +exception UnresolvedPathReferenceNoRange of (*assemblyName*) string * (*path*) string +exception UnresolvedPathReference of (*assemblyName*) string * (*path*) string * range @@ -197,7 +197,7 @@ type PhasedDiagnostic = /// Construct a phased error static member Create(exn:exn, phase:BuildPhase) : PhasedDiagnostic = - // FUTURE: renable this assert, which has historically triggered in some compiler service scenarios + // FUTURE: reenable this assert, which has historically triggered in some compiler service scenarios // System.Diagnostics.Debug.Assert(phase<>BuildPhase.DefaultPhase, sprintf "Compile error seen with no phase to attribute it to.%A %s %s" phase exn.Message exn.StackTrace ) {Exception = exn; Phase=phase} @@ -281,7 +281,7 @@ let DiscardErrorsLogger = let AssertFalseErrorLogger = { new ErrorLogger("AssertFalseErrorLogger") with - // TODO: renable these asserts in the compiler service + // TODO: reenable these asserts in the compiler service member x.DiagnosticSink(phasedError, isError) = (* assert false; *) () member x.ErrorCount = (* assert false; *) 0 } @@ -313,7 +313,7 @@ type internal CompileThreadStatic = static member BuildPhase with get() = match box CompileThreadStatic.buildPhase with - // FUTURE: renable these asserts, which have historically fired in some compiler service scernaios + // FUTURE: reenable these asserts, which have historically fired in some compiler service scenarios | null -> (* assert false; *) BuildPhase.DefaultPhase | _ -> CompileThreadStatic.buildPhase and set v = CompileThreadStatic.buildPhase <- v @@ -606,7 +606,7 @@ let TryD f g = } | res -> res -let rec RepeatWhileD ndeep body = body ndeep ++ (fun x -> if x then RepeatWhileD (ndeep+1) body else CompleteD) +let rec RepeatWhileD nDeep body = body nDeep ++ (fun x -> if x then RepeatWhileD (nDeep+1) body else CompleteD) let AtLeastOneD f l = MapD f l ++ (fun res -> ResultD (List.exists id res)) diff --git a/src/fsharp/ExtensionTyping.fs b/src/fsharp/ExtensionTyping.fs index c075e0dbe9..077efaa939 100755 --- a/src/fsharp/ExtensionTyping.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -904,7 +904,7 @@ module internal ExtensionTyping = let namespaceName = TryTypeMember(st, name, "Namespace", m, FSComp.SR.invalidNamespaceForProvidedType(), fun st -> st.Namespace) |> unmarshal let fullName = TryTypeMemberNonNull(st, name, "FullName", m, FSComp.SR.invalidFullNameForProvidedType(), fun st -> st.FullName) |> unmarshal ValidateExpectedName m expectedPath expectedName st - // Must be able to call (GetMethods|GetEvents|GetPropeties|GetNestedTypes|GetConstructors)(bindingFlags). + // Must be able to call (GetMethods|GetEvents|GetProperties|GetNestedTypes|GetConstructors)(bindingFlags). let usedMembers : Tainted[] = // These are the members the compiler will actually use [| for x in TryTypeMemberArray(st, fullName, "GetMethods", m, fun st -> st.GetMethods()) -> x.Coerce m diff --git a/src/fsharp/IlxGen.fs b/src/fsharp/IlxGen.fs index 62300df676..bdf333314e 100755 --- a/src/fsharp/IlxGen.fs +++ b/src/fsharp/IlxGen.fs @@ -143,9 +143,9 @@ let NewCounter nm = let CountClosure = NewCounter "closures" -let CountMethodDef = NewCounter "IL method defintitions corresponding to values" +let CountMethodDef = NewCounter "IL method definitions corresponding to values" -let CountStaticFieldDef = NewCounter "IL field defintitions corresponding to values" +let CountStaticFieldDef = NewCounter "IL field definitions corresponding to values" let CountCallFuncInstructions = NewCounter "callfunc instructions (indirect calls)" @@ -225,7 +225,7 @@ type cenv = amap: ImportMap /// A callback for TcVal in the typechecker. Used to generalize values when finding witnesses. - /// It is unfortunate this is needed but it is until we supply witnesses through the compiation. + /// It is unfortunate this is needed but it is until we supply witnesses through the compilation. TcVal: ConstraintSolver.TcValF /// The TAST for the assembly being emitted @@ -397,7 +397,7 @@ type TypeReprEnv(reprs: Map, count: int) = uint16 666 /// Add an additional type parameter to the environment. If the parameter is a units-of-measure parameter - /// then it is ignored, since it doesn't corespond to a .NET type parameter. + /// then it is ignored, since it doesn't correspond to a .NET type parameter. member tyenv.AddOne (tp: Typar) = if IsNonErasedTypar tp then TypeReprEnv(reprs.Add (tp.Stamp, uint16 count), count + 1) @@ -1023,7 +1023,7 @@ let ComputeStorageForFSharpMember amap g topValInfo memberInfo (vref: ValRef) m let mspec, _, _, paramInfos, retInfo, methodArgTys = GetMethodSpecForMemberVal amap g memberInfo vref Method (topValInfo, vref, mspec, m, paramInfos, methodArgTys, retInfo) -/// Compute the representation information for an F#-declared function in a module or an F#-decalared extension member. +/// Compute the representation information for an F#-declared function in a module or an F#-declared extension member. /// Note, there is considerable overlap with ComputeStorageForFSharpMember/GetMethodSpecForMemberVal and these could be /// rationalized. let ComputeStorageForFSharpFunctionOrFSharpExtensionMember amap (g:TcGlobals) cloc topValInfo (vref: ValRef) m = @@ -1050,7 +1050,7 @@ let IsFSharpValCompiledAsMethod g (v: Val) = | _ -> true /// Determine how a top level value is represented, when it is being represented -/// as a method. This depends on its type and other representation inforrmation. +/// as a method. This depends on its type and other representation information. /// If it's a function or is polymorphic, then it gets represented as a /// method (possibly and instance method). Otherwise it gets represented as a /// static field and property. @@ -1102,7 +1102,7 @@ let ComputeStorageForNonLocalTopVal amap g cloc modref (v: Val) = | None -> error(InternalError("ComputeStorageForNonLocalTopVal, expected an arity for " + v.LogicalName, v.Range)) | Some _ -> ComputeStorageForTopVal (amap, g, None, false, NoShadowLocal, mkNestedValRef modref v, cloc) -/// Determine how all the F#-decalred top level values, functions and members are represented, for an external module or namespace. +/// Determine how all the F#-declared top level values, functions and members are represented, for an external module or namespace. let rec AddStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref: ModuleOrNamespaceRef) (modul: ModuleOrNamespace) = let acc = (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> @@ -1206,7 +1206,7 @@ let AddIncrementalLocalAssemblyFragmentToIlxGenEnv (amap: ImportMap, isIncrement // Generate debugging marks //-------------------------------------------------------------------------- -/// Generate IL debuging information. +/// Generate IL debugging information. let GenILSourceMarker (g: TcGlobals) (m: range) = ILSourceMarker.Create(document=g.memoize_file m.FileIndex, line=m.StartLine, @@ -1215,7 +1215,7 @@ let GenILSourceMarker (g: TcGlobals) (m: range) = endLine= m.EndLine, endColumn=m.EndColumn+1) -/// Optionally generate IL debuging information. +/// Optionally generate IL debugging information. let GenPossibleILSourceMarker cenv m = if cenv.opts.generateDebugSymbols then Some (GenILSourceMarker cenv.g m ) @@ -1520,14 +1520,14 @@ type AssemblyBuilder(cenv: cenv, anonTypeTable: AnonTypeGenerationTable) as mgbu scriptInitFspecs <- (fieldSpec, range) :: scriptInitFspecs /// This initializes the script in #load and fsc command-line order causing their - /// sideeffects to be executed. + /// side effects to be executed. member mgbuf.AddInitializeScriptsInOrderToEntryPoint () = // Get the entry point and initialized any scripts in order. match explicitEntryPointInfo with | Some tref -> - let IntializeCompiledScript(fspec, m) = + let InitializeCompiledScript(fspec, m) = mgbuf.AddExplicitInitToSpecificMethodDef((fun (md: ILMethodDef) -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, [], []) - scriptInitFspecs |> List.iter IntializeCompiledScript + scriptInitFspecs |> List.iter InitializeCompiledScript | None -> () member __.GenerateRawDataValueType (cloc, size) = @@ -2227,7 +2227,7 @@ and GenExprAux (cenv: cenv) (cgbuf: CodeGenBuffer) eenv sp expr sequel = | ValStorage.Local _ -> true | _ -> false ) -> - // application of local type functions with type parameters = measure types and body = local value - inine the body + // application of local type functions with type parameters = measure types and body = local value - inline the body GenExpr cenv cgbuf eenv sp v sequel | Expr.App (f,fty, tyargs, args, m) -> GenApp cenv cgbuf eenv (f, fty, tyargs, args, m) sequel @@ -2736,7 +2736,7 @@ and GenCoerce cenv cgbuf eenv (e, tgty, m, srcty) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue let ilToTy = GenType cenv.amap m eenv.tyenv tgty // Section "III.1.8.1.3 Merging stack states" of ECMA-335 implies that no unboxing - // is required, but we still push the coerce'd type on to the code gen buffer. + // is required, but we still push the coerced type on to the code gen buffer. CG.EmitInstrs cgbuf (pop 1) (Push [ilToTy]) [] GenSequel cenv eenv.cloc cgbuf sequel ) else ( @@ -4636,7 +4636,7 @@ and GetIlxClosureInfo cenv m isLocalTypeFunc selfv eenvouter expr = and IsNamedLocalTypeFuncVal g (v: Val) expr = not v.IsCompiledAsTopLevel && - IsGenericValWithGenericContraints g v && + IsGenericValWithGenericConstraints g v && (match stripExpr expr with Expr.TyLambda _ -> true | _ -> false) /// Generate the information relevant to the contract portion of a named local type function @@ -6582,14 +6582,14 @@ and GenTopImpl cenv (mgbuf: AssemblyBuilder) mainInfoOpt eenv (TImplFile (qname, | Some mainInfo -> // Generate an explicit main method. If necessary, make a class constructor as - // well for the bindings earlier in the file containing the entrypoint. + // well for the bindings earlier in the file containing the entry point. match mgbuf.GetExplicitEntryPointInfo() with // Final file, explicit entry point: place the code in a .cctor, and add code to main that forces the .cctor (if topCode has initialization effect). | Some tref -> if doesSomething then lazyInitInfo.Add (fun fspec feefee seqpt -> - // This adds the explicit init of the .cctor to the explicit entrypoint main method + // This adds the explicit init of the .cctor to the explicit entry point main method mgbuf.AddExplicitInitToSpecificMethodDef((fun md -> md.IsEntryPoint), tref, fspec, GenPossibleILSourceMarker cenv m, feefee, seqpt)) let cctorMethDef = mkILClassCtor (MethodBody.IL topCode) @@ -7119,7 +7119,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon: Tycon) = //printfn "sprintf not found" () | _, None -> - //printfn "new formatnot found" + //printfn "new format not found" () | _ -> //printfn "neither found, or non-method" @@ -7433,7 +7433,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = // do not emit serialization related members if target framework lacks SerializationInfo or StreamingContext match g.iltyp_SerializationInfo, g.iltyp_StreamingContext with | Some serializationInfoType, Some streamingContextType -> - let ilCtorDefForSerialziation = + let ilCtorDefForSerialization = mkILCtor(ILMemberAccess.Family, [mkILParamNamed("info", serializationInfoType);mkILParamNamed("context", streamingContextType)], mkMethodBody @@ -7445,7 +7445,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = mkNormalCall (mkILCtorMethSpecForTy (g.iltyp_Exception, [serializationInfoType; streamingContextType])) ], None)) - [ilCtorDefForSerialziation] + [ilCtorDefForSerialization] (* let getObjectDataMethodForSerialization = let ilMethodDef = @@ -7469,7 +7469,7 @@ and GenExnDef cenv mgbuf eenv m (exnc: Tycon) = { ilMethodDef with SecurityDecls=mkILSecurityDecls [ IL.mkPermissionSet g.ilg (ILSecurityAction.Demand, [(securityPermissionAttributeType, [("SerializationFormatter", g.ilg.typ_Bool, ILAttribElem.Bool true)])])] HasSecurity=true } - [ilCtorDefForSerialziation; getObjectDataMethodForSerialization] + [ilCtorDefForSerialization; getObjectDataMethodForSerialization] *) //#endif | _ -> [] @@ -7644,8 +7644,8 @@ let defaultOf = /// Top-level val bindings are stored (for example) in static fields. /// In the FSI case, these fields are be created and initialised, so we can recover the object. /// IlxGen knows how v was stored, and then ilreflect knows how this storage was generated. -/// IlxGen converts (v: Tast.Val) to AbsIL datastructures. -/// Ilreflect converts from AbsIL datastructures to emitted Type, FieldInfo, MethodInfo etc. +/// IlxGen converts (v: Tast.Val) to AbsIL data structures. +/// Ilreflect converts from AbsIL data structures to emitted Type, FieldInfo, MethodInfo etc. let LookupGeneratedValue (amap: ImportMap) (ctxt: ExecutionContext) eenv (v: Val) = try // Convert the v.Type into a System.Type according to ilxgen and ilreflect. diff --git a/src/fsharp/InfoReader.fs b/src/fsharp/InfoReader.fs index 7e9dffdd52..c36847d9e3 100644 --- a/src/fsharp/InfoReader.fs +++ b/src/fsharp/InfoReader.fs @@ -299,10 +299,10 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = let GetIntrinsicRecdOrClassFieldInfosUncached ((optFilter, ad), m, ty) = FoldPrimaryHierarchyOfType (fun ty acc -> GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter, ad) m ty @ acc) g amap m AllowMultiIntfInstantiations.Yes ty [] - let GetEntireTypeHierachyUncached (allowMultiIntfInst, m, ty) = + let GetEntireTypeHierarchyUncached (allowMultiIntfInst, m, ty) = FoldEntireHierarchyOfType (fun ty acc -> ty :: acc) g amap m allowMultiIntfInst ty [] - let GetPrimaryTypeHierachyUncached (allowMultiIntfInst, m, ty) = + let GetPrimaryTypeHierarchyUncached (allowMultiIntfInst, m, ty) = FoldPrimaryHierarchyOfType (fun ty acc -> ty :: acc) g amap m allowMultiIntfInst ty [] /// The primitive reader for the named items up a hierarchy @@ -385,8 +385,8 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = let eventInfoCache = MakeInfoCache GetIntrinsicEventInfosUncached hashFlags1 let namedItemsCache = MakeInfoCache GetIntrinsicNamedItemsUncached hashFlags2 - let entireTypeHierarchyCache = MakeInfoCache GetEntireTypeHierachyUncached HashIdentity.Structural - let primaryTypeHierarchyCache = MakeInfoCache GetPrimaryTypeHierachyUncached HashIdentity.Structural + let entireTypeHierarchyCache = MakeInfoCache GetEntireTypeHierarchyUncached HashIdentity.Structural + let primaryTypeHierarchyCache = MakeInfoCache GetPrimaryTypeHierarchyUncached HashIdentity.Structural member x.g = g member x.amap = amap @@ -434,11 +434,11 @@ type InfoReader(g: TcGlobals, amap: Import.ImportMap) = namedItemsCache.Apply(((nm, ad), m, ty)) /// Get the super-types of a type, including interface types. - member x.GetEntireTypeHierachy (allowMultiIntfInst, m, ty) = + member x.GetEntireTypeHierarchy (allowMultiIntfInst, m, ty) = entireTypeHierarchyCache.Apply((allowMultiIntfInst, m, ty)) /// Get the super-types of a type, excluding interface types. - member x.GetPrimaryTypeHierachy (allowMultiIntfInst, m, ty) = + member x.GetPrimaryTypeHierarchy (allowMultiIntfInst, m, ty) = primaryTypeHierarchyCache.Apply((allowMultiIntfInst, m, ty)) diff --git a/src/fsharp/InnerLambdasToTopLevelFuncs.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs index fabd5583c2..5ced353f39 100755 --- a/src/fsharp/InnerLambdasToTopLevelFuncs.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -743,7 +743,7 @@ let FlatEnvPacks g fclassM topValS declist (reqdItemsMap: Zmap List.tryFind (IsGenericValWithGenericContraints g) with + match vals |> List.tryFind (IsGenericValWithGenericConstraints g) with | None -> () | Some v -> raise (AbortTLR v.Range) @@ -813,7 +813,7 @@ let DumpEnvPackM g envPackM = /// e.g. deciding whether to tuple up the environment or not. /// e.g. deciding whether to use known values for required sub environments. /// -/// Scope for optimisating env packing here. +/// Scope for optimization env packing here. /// For now, pass all environments via arguments since aiming to eliminate allocations. /// Later, package as tuples if arg lists get too long. let ChooseReqdItemPackings g fclassM topValS declist reqdItemsMap = diff --git a/src/fsharp/InternalCollections.fs b/src/fsharp/InternalCollections.fs index eda256e715..d2a15bd841 100755 --- a/src/fsharp/InternalCollections.fs +++ b/src/fsharp/InternalCollections.fs @@ -84,18 +84,18 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro | true, value -> yield key, value ] #endif - let AssignWithStrength(tok,newdata,discard1) = - let actualLength = List.length newdata + let AssignWithStrength(tok,newData,discard1) = + let actualLength = List.length newData let tossThreshold = max 0 (actualLength - keepMax) // Delete everything less than this threshold - let weakThreshhold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshold + let weakThreshold = max 0 (actualLength - keepStrongly) // Weaken everything less than this threshold - let newdata = newdata|> List.mapi( fun n kv -> n,kv ) // Place the index. - let newdata,discard2 = newdata |> List.partition (fun (n:int,v) -> n >= tossThreshold || requiredToKeep (snd v)) - let newdata = - newdata + let newData = newData|> List.mapi( fun n kv -> n,kv ) // Place the index. + let newData,discard2 = newData |> List.partition (fun (n:int,v) -> n >= tossThreshold || requiredToKeep (snd v)) + let newData = + newData |> List.map( fun (n:int,(k,v)) -> let handle = - if n(keepStro Strong(v) k,handle ) ignore tok // Updating refs requires tok - refs <- newdata + refs <- newData discard1 |> List.iter (snd >> strongDiscard) discard2 |> List.iter (snd >> snd >> strongDiscard) @@ -117,14 +117,14 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro member al.TryGetKeyValue(tok, key) = let data = FilterAndHold(tok) - let result,newdata = TryGetKeyValueImpl(data,key) - AssignWithStrength(tok,newdata,[]) + let result,newData = TryGetKeyValueImpl(data,key) + AssignWithStrength(tok,newData,[]) result member al.TryGet(tok, key) = let data = FilterAndHold(tok) - let result,newdata = TryGetKeyValueImpl(data,key) - AssignWithStrength(tok,newdata,[]) + let result,newData = TryGetKeyValueImpl(data,key) + AssignWithStrength(tok,newData,[]) match result with | Some(_,value) -> Some(value) | None -> None @@ -137,8 +137,8 @@ type internal AgedLookup<'Token, 'Key, 'Value when 'Value : not struct>(keepStro member al.Remove(tok, key) = let data = FilterAndHold(tok) - let newdata,discard = RemoveImpl (data,key) - AssignWithStrength(tok,newdata,discard) + let newData,discard = RemoveImpl (data,key) + AssignWithStrength(tok,newData,discard) member al.Clear(tok) = let discards = FilterAndHold(tok) diff --git a/src/fsharp/LanguageFeatures.fs b/src/fsharp/LanguageFeatures.fs index 2f4e44940c..8f6a873e20 100644 --- a/src/fsharp/LanguageFeatures.fs +++ b/src/fsharp/LanguageFeatures.fs @@ -95,4 +95,4 @@ type LanguageVersion (specifiedVersion) = |] /// Get the specified LanguageVersion - member __.SpecifiedVerson = specified + member __.SpecifiedVersion = specified diff --git a/src/fsharp/LanguageFeatures.fsi b/src/fsharp/LanguageFeatures.fsi index d1d190d3f9..2b42698dd0 100644 --- a/src/fsharp/LanguageFeatures.fsi +++ b/src/fsharp/LanguageFeatures.fsi @@ -36,4 +36,4 @@ type LanguageVersion = member ValidOptions: string array /// Get the specified LanguageVersion - member SpecifiedVerson: decimal + member SpecifiedVersion: decimal diff --git a/src/fsharp/LexFilter.fs b/src/fsharp/LexFilter.fs index e37b0c35b1..22dd4c4936 100755 --- a/src/fsharp/LexFilter.fs +++ b/src/fsharp/LexFilter.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. /// LexFilter - process the token stream prior to parsing. -/// Implements the offside rule and a copule of other lexical transformations. +/// Implements the offside rule and a couple of other lexical transformations. module internal FSharp.Compiler.LexFilter open Internal.Utilities.Text.Lexing @@ -630,15 +630,15 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, //-------------------------------------------------------------------------- let pushCtxt tokenTup (newCtxt: Context) = - let rec unindentationLimit strict stack = + let rec undentationLimit strict stack = match newCtxt, stack with | _, [] -> PositionWithColumn(newCtxt.StartPos, -1) // ignore Vanilla because a SeqBlock is always coming - | _, (CtxtVanilla _ :: rest) -> unindentationLimit strict rest + | _, (CtxtVanilla _ :: rest) -> undentationLimit strict rest - | _, (CtxtSeqBlock _ :: rest) when not strict -> unindentationLimit strict rest - | _, (CtxtParen _ :: rest) when not strict -> unindentationLimit strict rest + | _, (CtxtSeqBlock _ :: rest) when not strict -> undentationLimit strict rest + | _, (CtxtParen _ :: rest) when not strict -> undentationLimit strict rest // 'begin match' limited by minimum of two // '(match' limited by minimum of two @@ -658,7 +658,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // Otherwise 'function ...' places no limit until we hit a CtxtLetDecl etc... (Recursive) | (CtxtMatchClauses _), (CtxtFunction _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'try ... with' limited by 'try' | _, (CtxtMatchClauses _ :: (CtxtTry _ as limitCtxt) :: _rest) @@ -666,7 +666,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // 'fun ->' places no limit until we hit a CtxtLetDecl etc... (Recursive) | _, (CtxtFun _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'f ...{' places no limit until we hit a CtxtLetDecl etc... // 'f ...[' places no limit until we hit a CtxtLetDecl etc... @@ -674,7 +674,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | _, (CtxtParen ((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtSeqBlock _ :: rest) | _, (CtxtParen ((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtVanilla _ :: CtxtSeqBlock _ :: rest) | _, (CtxtSeqBlock _ :: CtxtParen((LBRACE | LBRACK | LBRACK_BAR), _) :: CtxtVanilla _ :: CtxtSeqBlock _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // MAJOR PERMITTED UNDENTATION This is allowing: // if x then y else @@ -696,7 +696,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, | CtxtWithAsAugment _, ((CtxtInterfaceHead _ | CtxtMemberHead _ | CtxtException _ | CtxtTypeDefns _) as limitCtxt :: _rest) -> PositionWithColumn(limitCtxt.StartPos, limitCtxt.StartCol) - // Permit unindentation via parentheses (or begin/end) following a 'then', 'else' or 'do': + // Permit undentation via parentheses (or begin/end) following a 'then', 'else' or 'do': // if nr > 0 then ( // nr <- nr - 1 // acc <- d @@ -719,7 +719,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // end | _, ((CtxtWithAsAugment _ | CtxtThen _ | CtxtElse _ | CtxtDo _ ) :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // '... (function ->' places no limit until we hit a CtxtLetDecl etc.... (Recursive) @@ -737,7 +737,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // 0 // | 2 -> ... <---- not allowed | _, (CtxtFunction _ :: rest) - -> unindentationLimit false rest + -> undentationLimit false rest // 'module ... : sig' limited by 'module' // 'module ... : struct' limited by 'module' @@ -811,7 +811,7 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // always already pushed a SeqBlock at this position. | CtxtVanilla _ -> () | _ -> - let p1 = unindentationLimit true offsideStack + let p1 = undentationLimit true offsideStack let c2 = newCtxt.StartCol if c2 < p1.Column then warn tokenTup @@ -2161,8 +2161,8 @@ type LexFilterImpl (lightSyntaxStatus: LightSyntaxStatus, compilingFsLib, lexer, // Split this token to allow "1..2" for range specification | INT32_DOT_DOT (i, v) -> - let dotdotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-2), tokenTup.EndPos, false) - delayToken(new TokenTup(DOT_DOT, dotdotPos, tokenTup.LastTokenPos)) + let dotDotPos = new LexbufState(tokenTup.EndPos.ShiftColumnBy(-2), tokenTup.EndPos, false) + delayToken(new TokenTup(DOT_DOT, dotDotPos, tokenTup.LastTokenPos)) delayToken(tokenTup.UseShiftedLocation(INT32(i, v), 0, -2)) true // Split @>. and @@>. into two diff --git a/src/fsharp/LowerCallsAndSeqs.fs b/src/fsharp/LowerCallsAndSeqs.fs index 6bc583faae..f40fcf8dec 100755 --- a/src/fsharp/LowerCallsAndSeqs.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -89,7 +89,7 @@ type LoweredSeqFirstPhaseResult = /// that holds the "goto" destination for a tailcalling sequence expression /// 'pcMap' is the mapping from code labels to values for 'pc' /// - /// The phase2 function returns the core of the generate, dipsose and checkDispose implementations. + /// The phase2 function returns the core of the generate, dispose and checkDispose implementations. phase2 : ((* pc: *) ValRef * (* current: *) ValRef * (* nextVar: *) ValRef * Map -> Expr * Expr * Expr) /// The labels allocated for one portion of the sequence expression @@ -434,7 +434,7 @@ let LowerSeqExpr g amap overallExpr = | Expr.Let (bind, bodyExpr, m, _) // Restriction: compilation of sequence expressions containing non-toplevel constrained generic functions is not supported - when bind.Var.IsCompiledAsTopLevel || not (IsGenericValWithGenericContraints g bind.Var) -> + when bind.Var.IsCompiledAsTopLevel || not (IsGenericValWithGenericConstraints g bind.Var) -> let resBody = Lower false isTailCall noDisposeContinuationLabel currentDisposeContinuationLabel bodyExpr match resBody with @@ -671,7 +671,7 @@ let LowerSeqExpr g amap overallExpr = // ``disposalExpr`` // with e -> exn <- e // if exn <> null then raise exn - let handleExeceptionsInDispose disposalExpr = + let handleExceptionsInDispose disposalExpr = let exnV, exnE = mkMutableCompGenLocal m "exn" g.exn_ty let exnVref = mkLocalValRef exnV let startLabel = IL.generateCodeLabel() @@ -738,11 +738,11 @@ let LowerSeqExpr g amap overallExpr = NoSequencePointAtLetBinding m exnV (Expr.Const (Const.Zero, m, g.exn_ty)) (mkCompGenSequential m whileLoop doRaise) - // Add the jumptable to the GenerateNext method + // Add the jump table to the GenerateNext method let generateExprWithJumpTable = addJumpTable false generateExprWithCleanup - // Add the jumptable to the Dispose method + // Add the jump table to the Dispose method let disposalExprWithJumpTable = if res.significantClose then let disposalExpr = @@ -757,11 +757,11 @@ let LowerSeqExpr g amap overallExpr = (mkValSet m currVarRef (mkDefault (m, currVarRef.Type))))) disposalExpr |> addJumpTable true - |> handleExeceptionsInDispose + |> handleExceptionsInDispose else mkValSet m pcVarRef (mkInt32 g m pcDone) - // Add the jumptable to the CheckDispose method + // Add the jump table to the CheckDispose method let checkDisposeExprWithJumpTable = addJumpTable true checkDisposeExprWithCleanup diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index cf590b69ee..fdae67c6ad 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -1139,7 +1139,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA if minfo.IsClassConstructor then error (InternalError (minfo.LogicalName + ": cannot call a class constructor", m)) let useCallvirt = not valu && not direct && minfo.IsVirtual - let isProtected = minfo.IsProtectedAccessiblity + let isProtected = minfo.IsProtectedAccessibility let exprTy = if isCtor then enclTy else minfo.GetFSharpReturnTy(amap, m, minst) match TryImportProvidedMethodBaseAsLibraryIntrinsic (amap, m, providedMeth) with | Some fsValRef -> @@ -1339,7 +1339,7 @@ module ProvidedMethodCalls = | None -> match ea.PApplyOption((function ProvidedNewTupleExpr x -> Some x | _ -> None), m) with | Some info -> - let elems = info.PApplyArray(id, "GetInvokerExpresson", m) + let elems = info.PApplyArray(id, "GetInvokerExpression", m) let elemsT = elems |> Array.map exprToExpr |> Array.toList let exprT = mkRefTupledNoTypes g m elemsT None, (exprT, tyOfExpr g exprT) @@ -1348,7 +1348,7 @@ module ProvidedMethodCalls = | Some info -> let ty, elems = info.PApply2(id, m) let tyT = Import.ImportProvidedType amap m ty - let elems = elems.PApplyArray(id, "GetInvokerExpresson", m) + let elems = elems.PApplyArray(id, "GetInvokerExpression", m) let elemsT = elems |> Array.map exprToExpr |> Array.toList let exprT = Expr.Op (TOp.Array, [tyT], elemsT, m) None, (exprT, tyOfExpr g exprT) @@ -1419,7 +1419,7 @@ module ProvidedMethodCalls = | Some info -> let delegateTy, boundVars, delegateBodyExpr = info.PApply3(id, m) let delegateTyT = Import.ImportProvidedType amap m delegateTy - let vs = boundVars.PApplyArray(id, "GetInvokerExpresson", m) |> Array.toList + let vs = boundVars.PApplyArray(id, "GetInvokerExpression", m) |> Array.toList let vsT = List.map addVar vs let delegateBodyExprT = exprToExpr delegateBodyExpr List.iter removeVar vs @@ -1489,7 +1489,7 @@ module ProvidedMethodCalls = let (ctor, args) = ne.PApply2(id, m) let targetMethInfo = ProvidedMeth(amap, ctor.PApply((fun ne -> upcast ne), m), None, m) let objArgs = [] - let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpresson", m) -> exprToExpr ea ] + let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpression", m) -> exprToExpr ea ] let callExpr = BuildMethodCall tcVal g amap Mutates.PossiblyMutates m false targetMethInfo isSuperInit [] objArgs arguments callExpr @@ -1514,7 +1514,7 @@ module ProvidedMethodCalls = | None -> [] | Some objExpr -> [exprToExpr objExpr] - let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpresson", m) -> exprToExpr ea ] + let arguments = [ for ea in args.PApplyArray(id, "GetInvokerExpression", m) -> exprToExpr ea ] let genericArguments = if meth.PUntaint((fun m -> m.IsGenericMethod), m) then meth.PApplyArray((fun m -> m.GetGenericArguments()), "GetGenericArguments", m) diff --git a/src/fsharp/NameResolution.fs b/src/fsharp/NameResolution.fs index 9715905d3c..389c6e16b0 100644 --- a/src/fsharp/NameResolution.fs +++ b/src/fsharp/NameResolution.fs @@ -534,7 +534,7 @@ let ExtensionPropInfosOfTypeInScope collectionSettings (infoReader:InfoReader) ( extMemsDangling else let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) + infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> if isAppTy g ty then let tcref = tcrefOfAppTy g ty @@ -598,7 +598,7 @@ let ExtensionMethInfosOfTypeInScope (collectionSettings:ResultCollectionSettings extMemsDangling else let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) + infoReader.GetEntireTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> let g = infoReader.g if isAppTy g ty then @@ -654,11 +654,11 @@ let AddValRefToExtensionMembers pri (eIndexedExtensionMembers: TyconRefMultiMap< eIndexedExtensionMembers -/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. static members +/// This entry point is used to add some extra items to the environment for Visual Studio, e.g. static members let AddFakeNamedValRefToNameEnv nm nenv vref = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, Item.Value vref) } -/// This entrypoint is used to add some extra items to the environment for Visual Studio, e.g. record members +/// This entry point is used to add some extra items to the environment for Visual Studio, e.g. record members let AddFakeNameToNameEnv nm nenv item = {nenv with eUnqualifiedItems = nenv.eUnqualifiedItems.Add (nm, item) } @@ -1351,7 +1351,7 @@ let MakeNestedType (ncenv: NameResolver) (tinst: TType list) m (tcrefNested: Tyc /// Get all the accessible nested types of an existing type. let GetNestedTypesOfType (ad, ncenv: NameResolver, optFilter, staticResInfo, checkForGenerated, m) ty = let g = ncenv.g - ncenv.InfoReader.GetPrimaryTypeHierachy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> + ncenv.InfoReader.GetPrimaryTypeHierarchy(AllowMultiIntfInstantiations.Yes, m, ty) |> List.collect (fun ty -> match ty with | AppTy g (tcref, tinst) -> let tycon = tcref.Deref @@ -1610,7 +1610,7 @@ let ItemsAreEffectivelyEqual g orig other = name1 = name2 && tyconRefDefnEq g tcref1 tcref2 | EventUse evt1, EventUse evt2 -> - EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 || + EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 || // Allow for equality up to signature matching match evt1.ArbitraryValRef, evt2.ArbitraryValRef with | Some vref1, Some vref2 -> valRefDefnEq g vref1 vref2 @@ -3282,8 +3282,8 @@ let FreshenRecdFieldRef (ncenv: NameResolver) m (rfref: RecdFieldRef) = // QUERY (instantiationGenerator cleanup): it would be really nice not to flow instantiationGenerator to here. let private ResolveExprDotLongIdent (ncenv: NameResolver) m ad nenv ty (id: Ident) rest findFlag = let typeNameResInfo = TypeNameResolutionInfo.Default - let adhoctDotSearchAccessible = AtMostOneResult m (ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m ad id rest findFlag typeNameResInfo ty) - match adhoctDotSearchAccessible with + let adhocDotSearchAccessible = AtMostOneResult m (ResolveLongIdentInTypePrim ncenv nenv LookupKind.Expr ResolutionInfo.Empty 1 m ad id rest findFlag typeNameResInfo ty) + match adhocDotSearchAccessible with | Exception _ -> // If the dot is not resolved by adhoc overloading then look for a record field // that can resolve the name. @@ -3306,7 +3306,7 @@ let private ResolveExprDotLongIdent (ncenv: NameResolver) m ad nenv ty (id: Iden |> AtMostOneResult m |> ForceRaise | _ -> - ForceRaise adhoctDotSearchAccessible + ForceRaise adhocDotSearchAccessible let ComputeItemRange wholem (lid: Ident list) rest = match rest with @@ -4103,7 +4103,7 @@ let rec ResolvePartialLongIdentPrim (ncenv: NameResolver) (nenv: NameResolutionE | _ -> [], false | _ -> [], false) - let staticSometingInType = + let staticSomethingInType = [ if not isItemVal then // type.lookup: lookup a static something in a type for tcref in LookupTypeNameInEnvNoArity OpenQualified id nenv do @@ -4111,7 +4111,7 @@ let rec ResolvePartialLongIdentPrim (ncenv: NameResolver) (nenv: NameResolutionE let ty = FreshenTycon ncenv m tcref yield! ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad true rest ty ] - namespaces @ values @ staticSometingInType + namespaces @ values @ staticSomethingInType /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions. let ResolvePartialLongIdent ncenv nenv isApplicableMeth m ad plid allowObsolete = diff --git a/src/fsharp/NameResolution.fsi b/src/fsharp/NameResolution.fsi index a1567ed43b..ea3bbd8aea 100755 --- a/src/fsharp/NameResolution.fsi +++ b/src/fsharp/NameResolution.fsi @@ -328,7 +328,7 @@ type internal TcSymbolUses = /// Represents open declaration statement. type internal OpenDeclaration = - { /// Long identifier as it's presented in soruce code. + { /// Long identifier as it's presented in source code. LongId: Ident list /// Full range of the open declaration. diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index 2d9ea197db..6479d6c672 100644 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -47,10 +47,10 @@ module internal PrintUtilities = isEnumTy g ty || isDelegateTy g ty || ExistsHeadTypeInEntireHierarchy g amap m ty g.exn_tcr || ExistsHeadTypeInEntireHierarchy g amap m ty g.tcref_System_Attribute - let applyMaxMembers maxMembers (alldecls: _ list) = + let applyMaxMembers maxMembers (allDecls: _ list) = match maxMembers with - | Some n when alldecls.Length > n -> (alldecls |> List.truncate n) @ [wordL (tagPunctuation "...")] - | _ -> alldecls + | Some n when allDecls.Length > n -> (allDecls |> List.truncate n) @ [wordL (tagPunctuation "...")] + | _ -> allDecls /// fix up a name coming from IL metadata by quoting "funny" names (keywords, otherwise invalid identifiers) let adjustILName n = @@ -185,12 +185,12 @@ module private PrintIL = | ILType.Modified (_, _, t) -> layoutILType denv ilTyparSubst t // Just recurse through them to the contained ILType /// Layout a function pointer signature using type-only-F#-style. No argument names are printed. - and private layoutILCallingSignature denv ilTyparSubst cons (signatur: ILCallingSignature) = + and private layoutILCallingSignature denv ilTyparSubst cons (signature: ILCallingSignature) = // We need a special case for // constructors (Their return types are reported as `void`, but this is // incorrect; so if we're dealing with a constructor we require that the // return type be passed along as the `cons` parameter.) - let args = signatur.ArgTypes |> List.map (layoutILType denv ilTyparSubst) + let args = signature.ArgTypes |> List.map (layoutILType denv ilTyparSubst) let res = match cons with | Some className -> @@ -198,7 +198,7 @@ module private PrintIL = // special case for constructor return-type (viz., the class itself) layoutILTypeRefName denv names ^^ (pruneParams className ilTyparSubst |> paramsL) | None -> - signatur.ReturnType |> layoutILType denv ilTyparSubst + signature.ReturnType |> layoutILType denv ilTyparSubst match args with | [] -> WordL.structUnit ^^ WordL.arrow ^^ res @@ -566,7 +566,7 @@ module private PrintTypes = | Const.String bs -> "\"" + bs + "\"" |> tagNumericLiteral | Const.Unit -> "()" |> tagPunctuation | Const.Decimal bs -> string bs + "M" |> tagNumericLiteral - // either "null" or "the defaut value for a struct" + // either "null" or "the default value for a struct" | Const.Zero -> tagKeyword(if isRefTy g ty then "null" else "default") wordL str @@ -1788,14 +1788,14 @@ module private TastDefinitionPrinting = tycon.TrueFieldsAsList |> List.filter (fun f -> not f.IsStatic) |> List.map (fun f -> WordL.keywordVal ^^ layoutRecdField true denv f) - let alldecls = inherits @ memberImplementLs @ memberCtorLs @ instanceValsLs @ vsprs @ memberInstanceLs @ staticValsLs @ memberStaticLs - if isNil alldecls then + let allDecls = inherits @ memberImplementLs @ memberCtorLs @ instanceValsLs @ vsprs @ memberInstanceLs @ staticValsLs @ memberStaticLs + if isNil allDecls then None else - let alldecls = applyMaxMembers denv.maxMembers alldecls - let emptyMeasure = match tycon.TypeOrMeasureKind with TyparKind.Measure -> isNil alldecls | _ -> false + let allDecls = applyMaxMembers denv.maxMembers allDecls + let emptyMeasure = match tycon.TypeOrMeasureKind with TyparKind.Measure -> isNil allDecls | _ -> false if emptyMeasure then None else - let declsL = aboveListL alldecls + let declsL = aboveListL allDecls let declsL = match start with Some s -> (wordL s @@-- declsL) @@ wordL (tagKeyword "end") | None -> declsL Some declsL | TUnionRepr _ -> diff --git a/src/fsharp/Optimizer.fs b/src/fsharp/Optimizer.fs index e89f3e4284..69b7d640a7 100644 --- a/src/fsharp/Optimizer.fs +++ b/src/fsharp/Optimizer.fs @@ -100,7 +100,7 @@ type ExprValueInfo = /// arities: The number of bunches of untupled args and type args, and /// the number of args in each bunch. NOTE: This include type arguments. /// expr: The value, a lambda term. - /// ty: The type of lamba term + /// ty: The type of lambda term | CurriedLambdaValue of Unique * int * int * Expr * TType /// ConstExprValue(size, value) @@ -350,14 +350,14 @@ type OptimizationSettings = member x.EliminateTupleFieldGet () = x.localOpt () - member x.EliminatUnionCaseFieldGet () = x.localOpt () + member x.EliminateUnionCaseFieldGet () = x.localOpt () /// eliminate non-compiler generated immediate bindings member x.EliminateImmediatelyConsumedLocals() = x.localOpt () /// expand "let x = (exp1, exp2, ...)" bindings as prior tmps /// expand "let x = Some exp1" bindings as prior tmps - member x.ExpandStructrualValues() = x.localOpt () + member x.ExpandStructuralValues() = x.localOpt () type cenv = { g: TcGlobals @@ -1132,7 +1132,7 @@ let AbstractOptimizationInfoToEssentials = /// Hide information because of a "let ... in ..." or "let rec ... in ... " let AbstractExprInfoByVars (boundVars: Val list, boundTyVars) ivalue = // Module and member bindings can be skipped when checking abstraction, since abstraction of these values has already been done when - // we hit the end of the module and called AbstractLazyModulInfoByHiding. If we don't skip these then we end up quadtratically retraversing + // we hit the end of the module and called AbstractLazyModulInfoByHiding. If we don't skip these then we end up quadratically retraversing // the inferred optimization data, i.e. at each binding all the way up a sequences of 'lets' in a module. let boundVars = boundVars |> List.filter (fun v -> not v.IsMemberOrModuleBinding) @@ -1524,7 +1524,7 @@ and RewriteBoolLogicCase data (TCase(test, tree)) = TCase(test, RewriteBoolLogicTree data tree) /// Repeatedly combine switch-over-match decision trees, see https://github.com/Microsoft/visualfsharp/issues/635. -/// The outer decision tree is doing a swithc over a boolean result, the inner match is producing only +/// The outer decision tree is doing a switch over a boolean result, the inner match is producing only /// constant boolean results in its targets. let rec CombineBoolLogic expr = @@ -1576,7 +1576,7 @@ let MakeStructuralBindingTemp (v: Val) i (arg: Expr) argTy = ve, mkCompGenBind v arg let ExpandStructuralBindingRaw cenv expr = - assert cenv.settings.ExpandStructrualValues() + assert cenv.settings.ExpandStructuralValues() match expr with | Expr.Let (TBind(v, rhs, tgtSeqPtOpt), body, m, _) when (isRefTupleExpr rhs && @@ -1611,7 +1611,7 @@ let rec RearrangeTupleBindings expr fin = | _ -> None let ExpandStructuralBinding cenv expr = - assert cenv.settings.ExpandStructrualValues() + assert cenv.settings.ExpandStructuralValues() match expr with | Expr.Let (TBind(v, rhs, tgtSeqPtOpt), body, m, _) when (isRefTupleTy cenv.g v.Type && @@ -1708,7 +1708,7 @@ let (|AnyQueryBuilderOpTrans|_|) g = function // | query.For(, ) --> IQueryable if qexprInner is IQueryable, otherwise seq { qexprInner' } // | query.Yield --> not IQueryable, seq { } // | query.YieldFrom --> not IQueryable, seq { yield! } -// | query.Op(, ) --> IQueryable if qexprOuter is IQueryable, otherwise query.Op(qexpOuter', ) +// | query.Op(, ) --> IQueryable if qexprOuter is IQueryable, otherwise query.Op(qexprOuter', ) let rec tryRewriteToSeqCombinators g (e: Expr) = let m = e.Range match e with @@ -2112,7 +2112,7 @@ and OptimizeExprOpReductionsAfter cenv env (op, tyargs, argsR, arginfos, m) = | None -> OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos UnknownValue and OptimizeExprOpFallback cenv env (op, tyargs, argsR, m) arginfos valu = - // The generic case - we may collect information, but the construction/projection doesnRt disappear + // The generic case - we may collect information, but the construction/projection doesn't disappear let argsTSize = AddTotalSizes arginfos let argsFSize = AddFunctionSizes arginfos let argEffects = OrEffects arginfos @@ -2230,7 +2230,7 @@ and TryOptimizeTupleFieldGet cenv _env (_tupInfo, e1info, tys, n, m) = and TryOptimizeUnionCaseGet cenv _env (e1info, cspec, _tys, n, m) = match e1info.Info with - | StripUnionCaseValue(cspec2, args) when cenv.settings.EliminatUnionCaseFieldGet() && not e1info.HasEffect && cenv.g.unionCaseRefEq cspec cspec2 -> + | StripUnionCaseValue(cspec2, args) when cenv.settings.EliminateUnionCaseFieldGet() && not e1info.HasEffect && cenv.g.unionCaseRefEq cspec cspec2 -> if n >= args.Length then errorR(InternalError( "TryOptimizeUnionCaseGet: term argument out of range", m)) Some args.[n] | _ -> None @@ -2298,7 +2298,7 @@ and OptimizeLinearExpr cenv env expr contf = // Eliminate subsumption coercions for functions. This must be done post-typechecking because we need // complete inference types. let expr = DetectAndOptimizeForExpression cenv.g OptimizeAllForExpressions expr - let expr = if cenv.settings.ExpandStructrualValues() then ExpandStructuralBinding cenv expr else expr + let expr = if cenv.settings.ExpandStructuralValues() then ExpandStructuralBinding cenv expr else expr let expr = stripExpr expr match expr with @@ -2326,7 +2326,7 @@ and OptimizeLinearExpr cenv env expr contf = let (bindR, bindingInfo), env = OptimizeBinding cenv false env bind OptimizeLinearExpr cenv env body (contf << (fun (bodyR, bodyInfo) -> // PERF: This call to ValueIsUsedOrHasEffect/freeInExpr amounts to 9% of all optimization time. - // Is it quadratic or quasi-quadtratic? + // Is it quadratic or quasi-quadratic? if ValueIsUsedOrHasEffect cenv (fun () -> (freeInExpr CollectLocals bodyR).FreeLocals) (bindR, bindingInfo) then // Eliminate let bindings on the way back up let exprR, adjust = TryEliminateLet cenv env bindR bodyR m @@ -3027,7 +3027,7 @@ and ComputeSplitToMethodCondition flag threshold cenv env (e: Expr, einfo) = // None of them should be byrefs not (isByrefLikeTy cenv.g m v.Type) && // None of them should be local polymorphic constrained values - not (IsGenericValWithGenericContraints cenv.g v) && + not (IsGenericValWithGenericConstraints cenv.g v) && // None of them should be mutable not v.IsMutable)))) && not (isByrefLikeTy cenv.g m (tyOfExpr cenv.g e)) diff --git a/src/fsharp/PatternMatchCompilation.fs b/src/fsharp/PatternMatchCompilation.fs index 3b172de1e3..d3c49646c1 100755 --- a/src/fsharp/PatternMatchCompilation.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -596,7 +596,7 @@ let rec BuildSwitch inpExprOpt g expr edges dflt m = let testexpr = match discrim with | DecisionTreeTest.ArrayLength(n, _) -> - let _v, vExpr, bind = mkCompGenLocalAndInvisbleBind g "testExpr" m testexpr + let _v, vExpr, bind = mkCompGenLocalAndInvisibleBind g "testExpr" m testexpr mkLetBind m bind (mkLazyAnd g m (mkNonNullTest g m vExpr) (mkILAsmCeq g m (mkLdlen g m vExpr) (mkInt g m n))) | DecisionTreeTest.Const (Const.String _ as c) -> mkCallEqualsOperator g m g.string_ty testexpr (Expr.Const (c, m, g.string_ty)) @@ -952,7 +952,7 @@ let CompilePatternBasic Some vExpr, Some(mkInvisibleBind v appExpr) // Any match on a struct union must take the address of its input. - // We can shortcut the addrof when the original input is a deref of a byref value. + // We can shortcut the addrOf when the original input is a deref of a byref value. | EdgeDiscrim(_i', (DecisionTreeTest.UnionCase (ucref, _)), _) :: _rest when isNil origInputValTypars && ucref.Tycon.IsStructRecordOrUnionTycon -> diff --git a/src/fsharp/PostInferenceChecks.fs b/src/fsharp/PostInferenceChecks.fs index 4d8f05b5a0..c718a94665 100755 --- a/src/fsharp/PostInferenceChecks.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -561,7 +561,7 @@ let mkArgsForAppliedVal isBaseCall (vref: ValRef) argsl = | Some topValInfo -> let argArities = topValInfo.AritiesOfArgs let argArities = if isBaseCall && argArities.Length >= 1 then List.tail argArities else argArities - // Check for partial applications: arguments to partial applciations don't get to use byrefs + // Check for partial applications: arguments to partial applications don't get to use byrefs if List.length argsl >= argArities.Length then List.map mkArgsPermit argArities else @@ -640,7 +640,7 @@ let CheckTypePermitSpanLike (cenv: cenv) env m ty = CheckType PermitByRefType.Sp /// Check types occurring in TAST but allow all byrefs. Only used on internally-generated types let CheckTypePermitAllByrefs (cenv: cenv) env m ty = CheckType PermitByRefType.All cenv env m ty -/// Check types ocurring in TAST but disallow inner types to be byref or byref-like types. +/// Check types occurring in TAST but disallow inner types to be byref or byref-like types. let CheckTypeNoInnerByrefs cenv env m ty = CheckType PermitByRefType.NoInnerByRefLike cenv env m ty let CheckTypeInstNoByrefs cenv env m tyargs = @@ -824,7 +824,7 @@ and CheckCallLimitArgs cenv env m returnTy limitArgs (context: PermitByRefExpr) errorR(Error(FSComp.SR.chkNoByrefAddressOfValueFromExpression(), m)) // You cannot call a function that takes a byref of a span-like (not stack referring) and - // either a stack referring spanlike or a local-byref of a stack referring span-like. + // either a stack referring span-like or a local-byref of a stack referring span-like. let isCallLimited = HasLimitFlag LimitFlags.ByRefOfSpanLike limitArgs && (HasLimitFlag LimitFlags.StackReferringSpanLike limitArgs || @@ -1139,7 +1139,7 @@ and CheckExprOp cenv env (op, tyargs, args, m) context expr = let ctorLimitedZoneCheck() = if env.ctorLimitedZone then errorR(Error(FSComp.SR.chkObjCtorsCantUseExceptionHandling(), m)) - // Ensure anonynous record type requirements are recorded + // Ensure anonymous record type requirements are recorded match op with | TOp.AnonRecdGet (anonInfo, _) | TOp.AnonRecd anonInfo -> @@ -1318,7 +1318,7 @@ and CheckExprOp cenv env (op, tyargs, args, m) context expr = // C# applies a rule where the APIs to struct types can't return the addresses of fields in that struct. // There seems no particular reason for this given that other protections in the language, though allowing - // it would mean "readonly" on a struct doesn't imply immutabality-of-contents - it only implies + // it would mean "readonly" on a struct doesn't imply immutability-of-contents - it only implies if context.PermitOnlyReturnable && (match obj with Expr.Val (vref, _, _) -> vref.BaseOrThisInfo = MemberThisVal | _ -> false) && isByrefTy g (tyOfExpr g obj) then errorR(Error(FSComp.SR.chkStructsMayNotReturnAddressesOfContents(), m)) diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs index 4c11b9054d..13ca5e4fc7 100755 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information. //---------------------------------------------------------------------------- -// Some general F# utilities for mangling / unmangling / manipulating names. +// Some general F# utilities for mangling / demangling / manipulating names. //-------------------------------------------------------------------------- /// Anything to do with special names of identifiers and other lexical rules diff --git a/src/fsharp/SimulatedMSBuildReferenceResolver.fs b/src/fsharp/SimulatedMSBuildReferenceResolver.fs index 8b47ad9bff..bf5ffc092f 100644 --- a/src/fsharp/SimulatedMSBuildReferenceResolver.fs +++ b/src/fsharp/SimulatedMSBuildReferenceResolver.fs @@ -138,17 +138,17 @@ let private SimulatedMSBuildResolver = #if !FX_RESHAPED_MSBUILD try - // Seach the GAC on Windows + // Search the GAC on Windows if not found && not isFileName && Environment.OSVersion.Platform = PlatformID.Win32NT then let n = AssemblyName r - let netfx = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() - let gac = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(netfx.TrimEnd('\\'))), "assembly") + let netFx = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + let gac = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(netFx.TrimEnd('\\'))), "assembly") match n.Version, n.GetPublicKeyToken() with | null, _ | _, null -> let options = [ if Directory.Exists gac then - for gacdir in Directory.EnumerateDirectories gac do - let assemblyDir = Path.Combine(gacdir, n.Name) + for gacDir in Directory.EnumerateDirectories gac do + let assemblyDir = Path.Combine(gacDir, n.Name) if Directory.Exists assemblyDir then for tdir in Directory.EnumerateDirectories assemblyDir do let trialPath = Path.Combine(tdir, qual) @@ -162,18 +162,18 @@ let private SimulatedMSBuildResolver = | v, tok -> if Directory.Exists gac then - for gacdir in Directory.EnumerateDirectories gac do - //printfn "searching GAC directory: %s" gacdir - let assemblyDir = Path.Combine(gacdir, n.Name) + for gacDir in Directory.EnumerateDirectories gac do + //printfn "searching GAC directory: %s" gacDir + let assemblyDir = Path.Combine(gacDir, n.Name) if Directory.Exists assemblyDir then //printfn "searching GAC directory: %s" assemblyDir let tokText = String.concat "" [| for b in tok -> sprintf "%02x" b |] - let verdir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) - //printfn "searching GAC directory: %s" verdir + let verDir = Path.Combine(assemblyDir, "v4.0_"+v.ToString()+"__"+tokText) + //printfn "searching GAC directory: %s" verDir - if Directory.Exists verdir then - let trialPath = Path.Combine(verdir, qual) + if Directory.Exists verDir then + let trialPath = Path.Combine(verDir, qual) //printfn "searching GAC: %s" trialPath if FileSystem.SafeExists trialPath then success trialPath diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 91a63819da..5ea0d49b52 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -397,7 +397,7 @@ let mkTyconInst (tycon: Tycon) tinst = mkTyparInst tycon.TyparsNoRange tinst let mkTyconRefInst (tcref: TyconRef) tinst = mkTyconInst tcref.Deref tinst //--------------------------------------------------------------------------- -// Basic equalites +// Basic equalities //--------------------------------------------------------------------------- let tyconRefEq (g: TcGlobals) tcref1 tcref2 = primEntityRefEq g.compilingFslib g.fslibCcu tcref1 tcref2 @@ -721,7 +721,7 @@ let rec stripTyEqnsA g canShortcut ty = | Some abbrevTy -> stripTyEqnsA g canShortcut (applyTyconAbbrev abbrevTy tycon tinst) | None -> - // This is the point where we get to add additional coditional normalizing equations + // This is the point where we get to add additional conditional normalizing equations // into the type system. Such power! // // Add the equation byref<'T> = byref<'T, ByRefKinds.InOut> for when using sufficient FSharp.Core @@ -4282,14 +4282,14 @@ let isPublicTycon (tcref: Tycon) = (tcref.Accessibility = taccessPublic) let freeVarsAllPublic fvs = // Are any non-public items used in the expr (which corresponded to the fvs)? // Recall, taccess occurs in: - // EntityData has ReprAccessibility and Accessiblity + // EntityData has ReprAccessibility and Accessibility // UnionCase has Accessibility // RecdField has Accessibility // ValData has Accessibility // The freevars and FreeTyvars collect local constructs. // Here, we test that all those constructs are public. // - // CODEREVIEW: + // CODE REVIEW: // What about non-local vals. This fix assumes non-local vals must be public. OK? Zset.forall isPublicVal fvs.FreeLocals && Zset.forall isPublicUnionCase fvs.FreeUnionCases && @@ -5748,7 +5748,7 @@ let isExpansiveUnderInstantiation g fty0 tyargs pargs argsl = | _ :: t -> not (isFunTy g fty) || loop (rangeOfFunTy g fty) t loop fty1 argsl) -let rec mkExprApplAux g f fty argsl m = +let rec mkExprAppAux g f fty argsl m = match argsl with | [] -> f | _ -> @@ -5783,7 +5783,7 @@ let rec mkAppsAux g f fty tyargsl argsl m = let arfty = applyForallTy g fty tyargs mkAppsAux g (primMkApp (f, fty) tyargs [] m) arfty rest argsl m | [] -> - mkExprApplAux g f fty argsl m + mkExprAppAux g f fty argsl m let mkApps g ((f, fty), tyargsl, argl, m) = mkAppsAux g f fty tyargsl argl m @@ -6677,7 +6677,7 @@ let mkNil (g: TcGlobals) m ty = mkUnionCaseExpr (g.nil_ucref, [ty], [], m) let mkCons (g: TcGlobals) ty h t = mkUnionCaseExpr (g.cons_ucref, [ty], [h;t], unionRanges h.Range t.Range) -let mkCompGenLocalAndInvisbleBind g nm m e = +let mkCompGenLocalAndInvisibleBind g nm m e = let locv, loce = mkCompGenLocal m nm (tyOfExpr g e) locv, loce, mkInvisibleBind locv e @@ -7230,7 +7230,7 @@ let AdjustArityOfLambdaBody g arity (vs: Val list) body = let MultiLambdaToTupledLambda g vs body = match vs with - | [] -> failwith "MultiLambdaToTupledLambda: expected some argments" + | [] -> failwith "MultiLambdaToTupledLambda: expected some arguments" | [v] -> v, body | vs -> let tupledv, untupler = untupledToRefTupled g vs @@ -7243,7 +7243,7 @@ let (|RefTuple|_|) expr = let MultiLambdaToTupledLambdaIfNeeded g (vs, arg) body = match vs, arg with - | [], _ -> failwith "MultiLambdaToTupledLambda: expected some argments" + | [], _ -> failwith "MultiLambdaToTupledLambda: expected some arguments" | [v], _ -> [(v, arg)], body | vs, RefTuple args when args.Length = vs.Length -> List.zip vs args, body | vs, _ -> @@ -7304,7 +7304,7 @@ let rec MakeApplicationAndBetaReduceAux g (f, fty, tyargsl: TType list list, arg let argvs2, args2 = List.unzip (List.concat pairs) mkLetsBind m (mkCompGenBinds argvs2 args2) body | _ -> - mkExprApplAux g f fty argsl m + mkExprAppAux g f fty argsl m | [] -> f @@ -8526,7 +8526,7 @@ let isCompiledConstraint cx = // Is a value a first-class polymorphic value with .NET constraints? // Used to turn off TLR and method splitting -let IsGenericValWithGenericContraints g (v: Val) = +let IsGenericValWithGenericConstraints g (v: Val) = isForallTy g v.Type && v.Type |> destForallTy g |> fst |> List.exists (fun tp -> List.exists isCompiledConstraint tp.Constraints) diff --git a/src/fsharp/TastOps.fsi b/src/fsharp/TastOps.fsi index 6119007d52..5179b85239 100755 --- a/src/fsharp/TastOps.fsi +++ b/src/fsharp/TastOps.fsi @@ -31,7 +31,7 @@ val typeEquiv : TcGlobals -> TType -> TType - /// Check the equivalence of two units-of-measure val measureEquiv : TcGlobals -> Measure -> Measure -> bool -/// Reduce a type to its more anonical form subject to an erasure flag, inference equations and abbreviations +/// Reduce a type to its more canonical form subject to an erasure flag, inference equations and abbreviations val stripTyEqnsWrtErasure: Erasure -> TcGlobals -> TType -> TType /// Build a function type @@ -120,7 +120,7 @@ val mkMutableCompGenLocal : range -> string -> TType -> Val * Expr /// Make a new mutable compiler-generated local value, 'let' bind it to an expression /// 'invisibly' (no sequence point etc.), and build an expression to reference it -val mkCompGenLocalAndInvisbleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding +val mkCompGenLocalAndInvisibleBind : TcGlobals -> string -> range -> Expr -> Val * Expr * Binding /// Build a lambda expression taking multiple values val mkMultiLambda : range -> Val list -> Expr * TType -> Expr @@ -1150,7 +1150,7 @@ type SignatureRepackageInfo = { /// The list of corresponding values RepackagedVals: (ValRef * ValRef) list - /// The list of corresponding modules, namespacea and type definitions + /// The list of corresponding modules, namespaces and type definitions RepackagedEntities: (TyconRef * TyconRef) list } /// The empty table @@ -1219,7 +1219,7 @@ val IsHiddenVal : (Remap * SignatureHidingInfo) list -> Val -> bool /// Determine if a record field is hidden by a signature val IsHiddenRecdField : (Remap * SignatureHidingInfo) list -> RecdFieldRef -> bool -/// Adjust marks in expressions, replacing all marks by thegiven mark. +/// Adjust marks in expressions, replacing all marks by the given mark. /// Used when inlining. val remarkExpr : range -> Expr -> Expr @@ -1250,7 +1250,7 @@ val mkAddrGet : range -> ValRef -> Expr /// &localv val mkValAddr : range -> readonly: bool -> ValRef -> Expr -/// Build an exression representing the read of an instance class or record field. +/// Build an expression representing the read of an instance class or record field. /// First take the address of the record expression if it is a struct. val mkRecdFieldGet : TcGlobals -> Expr * RecdFieldRef * TypeInst * range -> Expr @@ -1280,7 +1280,7 @@ val AdjustArityOfLambdaBody : TcGlobals -> int -> Val list -> Expr -> Val list * /// Make an application expression, doing beta reduction by introducing let-bindings val MakeApplicationAndBetaReduce : TcGlobals -> Expr * TType * TypeInst list * Exprs * range -> Expr -/// COmbine two static-resolution requirements on a type parameter +/// Combine two static-resolution requirements on a type parameter val JoinTyparStaticReq : TyparStaticReq -> TyparStaticReq -> TyparStaticReq /// Layout for internal compiler debugging purposes @@ -1481,10 +1481,10 @@ val destListTy : TcGlobals -> TType -> TType /// Build an array type of the given rank val mkArrayTy : TcGlobals -> int -> TType -> range -> TType -/// Check if a type definition is one of the artifical type definitions used for array types of different ranks +/// Check if a type definition is one of the artificial type definitions used for array types of different ranks val isArrayTyconRef : TcGlobals -> TyconRef -> bool -/// Determine the rank of one of the artifical type definitions used for array types +/// Determine the rank of one of the artificial type definitions used for array types val rankOfArrayTyconRef : TcGlobals -> TyconRef -> int /// Determine if a type is the F# unit type @@ -2218,7 +2218,7 @@ val RewriteExpr : ExprRewritingEnv -> Expr -> Expr val RewriteImplFile : ExprRewritingEnv -> TypedImplFile -> TypedImplFile -val IsGenericValWithGenericContraints: TcGlobals -> Val -> bool +val IsGenericValWithGenericConstraints: TcGlobals -> Val -> bool type Entity with diff --git a/src/fsharp/TastPickle.fs b/src/fsharp/TastPickle.fs index 0c7c7fa20d..f9c22b21cd 100644 --- a/src/fsharp/TastPickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1368,7 +1368,7 @@ let p_tys = (p_list p_ty) let fill_p_attribs, p_attribs = p_hole() // In F# 4.5, the type of the "this" pointer for structs is considered to be inref for the purposes of checking the implementation -// of the struct. However for backwards compat reaons we can't serialize this as the type. +// of the struct. However for backwards compat reasons we can't serialize this as the type. let checkForInRefStructThisArg st ty = let g = st.oglobals let _, tauTy = tryDestForallTy g ty @@ -2162,7 +2162,7 @@ and u_entity_spec_data st : Entity = entity_xmldoc= defaultArg x15 XmlDoc.Empty entity_xmldocsig = System.String.Empty entity_tycon_abbrev = x8 - entity_accessiblity = x4a + entity_accessibility = x4a entity_tycon_repr_accessibility = x4b entity_exn_info = x14 } } diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 5cc848e5ab..4181cb846c 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -286,7 +286,7 @@ let addFreeItemOfTy ty eUngeneralizableItems = if isEmptyFreeTyvars fvs then eUngeneralizableItems else UngeneralizableItem(fun () -> freeInType CollectAllNoCaching ty) :: eUngeneralizableItems -/// Add the contents of a module type to the TcEnv, i.e. register the contants as ungeneralizable. +/// Add the contents of a module type to the TcEnv, i.e. register the contents as ungeneralizable. /// Add a module type to the TcEnv, i.e. register it as ungeneralizable. let addFreeItemOfModuleTy mtyp eUngeneralizableItems = let fvs = freeInModuleTy mtyp @@ -410,7 +410,7 @@ let AddNonLocalCcu g amap scopem env assemblyName (ccu: CcuThunk, internalsVisib { env with eNameResEnv = AddTyconRefsToNameEnv BulkAdd.Yes false g amap env.eAccessRights scopem true env.eNameResEnv tcrefs } env -/// Adjust the TcEnv to account for a fully processed "namespace" declaration in thie file +/// Adjust the TcEnv to account for a fully processed "namespace" declaration in this file let AddLocalRootModuleOrNamespace tcSink g amap scopem env (mtyp: ModuleOrNamespaceType) = // Compute the top-rooted module or namespace references let modrefs = mtyp.ModuleAndNamespaceDefinitions |> List.map mkLocalModRef @@ -1278,7 +1278,7 @@ let GeneralizedTypeForTypeScheme typeScheme = let (TypeScheme(generalizedTypars, tau)) = typeScheme mkForallTyIfNeeded generalizedTypars tau -/// Create a type scheme for somthing that is not generic +/// Create a type scheme for something that is not generic let NonGenericTypeScheme ty = TypeScheme([], ty) //------------------------------------------------------------------------- @@ -2456,7 +2456,7 @@ type NormalizedBinding = | NormalizedBinding of SynAccess option * SynBindingKind * - bool * (* pesudo/mustinline value? *) + bool * (* pseudo/mustinline value? *) bool * (* mutable *) SynAttribute list * XmlDoc * @@ -3966,10 +3966,10 @@ let EliminateInitializationGraphs // Check the shape of an object constructor and rewrite calls //------------------------------------------------------------------------- -let CheckAndRewriteObjectCtor g env (ctorLambaExpr: Expr) = +let CheckAndRewriteObjectCtor g env (ctorLambdaExpr: Expr) = - let m = ctorLambaExpr.Range - let tps, vsl, body, returnTy = stripTopLambda (ctorLambaExpr, tyOfExpr g ctorLambaExpr) + let m = ctorLambdaExpr.Range + let tps, vsl, body, returnTy = stripTopLambda (ctorLambdaExpr, tyOfExpr g ctorLambdaExpr) // Rewrite legitimate self-construction calls to CtorValUsedAsSelfInit let error (expr: Expr) = @@ -4180,7 +4180,7 @@ type NewSlotsOK = | NoNewSlots -type ImplictlyBoundTyparsAllowed = +type ImplicitlyBoundTyparsAllowed = | NewTyparsOKButWarnIfNotRigid | NewTyparsOK | NoNewTypars @@ -5806,7 +5806,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = // LanguageFeatures.ImplicitYield do not require this validation let implicitYieldEnabled = cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield let validateObjectSequenceOrRecordExpression = not implicitYieldEnabled - let validateExpressionWithIfRequiresParenethesis = not implicitYieldEnabled + let validateExpressionWithIfRequiresParenthesis = not implicitYieldEnabled let acceptDeprecatedIfThenExpression = not implicitYieldEnabled match synExpr with @@ -6022,7 +6022,7 @@ and TcExprUndelayed cenv overallTy env tpenv (synExpr: SynExpr) = | SynExpr.CompExpr (_, _, (SimpleSemicolonSequence cenv acceptDeprecatedIfThenExpression elems as body), _) -> match body with | SimpleSemicolonSequence cenv false _ -> () - | _ when validateExpressionWithIfRequiresParenethesis -> errorR(Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis(), m)) + | _ when validateExpressionWithIfRequiresParenthesis -> errorR(Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis(), m)) | _ -> () let replacementExpr = @@ -9314,7 +9314,7 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del -> false - // Propagte the known application structure into function types + // Propagate the known application structure into function types Propagate cenv overallTy env tpenv (MakeApplicableExprNoFlex cenv expr) (tyOfExpr g expr) delayed // Take all simple arguments and process them before applying the constraint. @@ -9700,7 +9700,7 @@ and TcEventValueThen cenv overallTy env tpenv mItem mExprAndItem objDetails (ein | None -> f [] | Some (objExpr, objExprTy) -> mkCompGenLetIn mItem "eventTarget" objExprTy objExpr (fun (_, ve) -> f [ve]) - // Bind the object target expression to make sure we only run its sdie effects once, and to make + // Bind the object target expression to make sure we only run its side effects once, and to make // sure if it's a mutable reference then we dereference it - see FSharp 1.0 bug 942 let expr = bindObjArgs (fun objVars -> @@ -9849,7 +9849,7 @@ and TcMethodApplication // The arguments are passed as if they are curried with arity [numberOfIndexParameters;1], however in the TAST, indexed property setters // are uncurried and have arity [numberOfIndexParameters+1]. // - // Here we work around this mismatch by crunching all property argument lists to uncirred form. + // Here we work around this mismatch by crunching all property argument lists to uncurried form. // Ideally the problem needs to be solved at its root cause at the callsites to this function let unnamedCurriedCallerArgs, namedCurriedCallerArgs = if isProp then @@ -11173,7 +11173,7 @@ and TcLetBinding cenv isUse env containerInfo declKind tpenv (synBinds, synBinds /// RECAP: /// The LHS of let-bindings are patterns. /// These patterns could fail, e.g. "let Some x = ...". -/// So letbindings could contain a fork at a match construct, with one branch being the match failure. +/// So let bindings could contain a fork at a match construct, with one branch being the match failure. /// If bindings are linearised, then this fork is pushed to the RHS. /// In this case, the let bindings type check to a sequence of bindings. and TcLetBindings cenv env containerInfo declKind tpenv (binds, bindsm, scopem) = @@ -11416,7 +11416,7 @@ and AnalyzeRecursiveStaticMemberOrValDecl let vis = CombineVisibilityAttribs vis1 vis2 mBinding // Check if we're defining a member, in which case generate the internal unique - // name for the member and the information about which type it is agumenting + // name for the member and the information about which type it is augmenting match tcrefContainerInfo, memberFlagsOpt with | (Some(MemberOrValContainerInfo(tcref, optIntfSlotTy, baseValOpt, _safeInitInfo, declaredTyconTypars)), Some memberFlags) -> @@ -11636,7 +11636,7 @@ and AnalyzeAndMakeAndPublishRecursiveValue overridesOK isGeneratedEventVal cenv let isComplete = ComputeIsComplete enclosingDeclaredTypars declaredTypars ty // NOTE: The type scheme here is normally not 'complete'!!!! The type is more or less just a type variable at this point. - // NOTE: toparity, type and typars get fixed-up after inference + // NOTE: top arity, type and typars get fixed-up after inference let prelimTyscheme = TypeScheme(enclosingDeclaredTypars@declaredTypars, ty) let partialValReprInfo = TranslateTopValSynInfo mBinding (TcAttributes cenv envinner) valSynInfo let topValInfo = UseSyntacticArity declKind prelimTyscheme partialValReprInfo @@ -11813,7 +11813,7 @@ and TcIncrementalLetRecGeneralization cenv scopem // - This table is usually much smaller than the number of remaining forward declarations ? e.g. in the pathological case you mentioned below this table is size 1. // - If a forward declaration does not have an entry in this table then its type can't involve any inference variables from the declarations we have already checked. // - So by scanning the domain of this table we can reduce the complexity down to something like O(n * average-number-of-forward-calls). - // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect callgraphs to be like this in practice + // - For a fully connected programs or programs where every forward declaration is subject to a forward call, this would be quadratic. However we do not expect call graphs to be like this in practice // // Hence we use the recursive-uses table to guide the process of scraping forward references for frozen types // If the is no entry in the recursive use table then a forward binding has never been used and @@ -12180,8 +12180,8 @@ and TcLetrec overridesOK cenv env tpenv (binds, bindsm, scopem) = let results = EliminateInitializationGraphs - (fun _ -> failwith "unreachable 2 - no type definitions in recursivve group") - (fun _ _ -> failwith "unreachable 3 - no type definitions in recursivve group") + (fun _ -> failwith "unreachable 2 - no type definitions in recursive group") + (fun _ _ -> failwith "unreachable 3 - no type definitions in recursive group") id (fun morpher oldBinds -> morpher oldBinds) cenv.g mustHaveArity env.DisplayEnv [MutRecShape.Lets bindsWithoutLaziness] bindsm @@ -12540,7 +12540,7 @@ module IncrClassChecking = TyconRef: TyconRef /// The type parameters allocated for the implicit instance constructor. - /// These may be equated with other (WillBeRigid) type parameters through equirecursive inference, and so + /// These may be equated with other (WillBeRigid) type parameters through equi-recursive inference, and so /// should always be renormalized/canonicalized when used. InstanceCtorDeclaredTypars: Typars @@ -12582,7 +12582,7 @@ module IncrClassChecking = /// Check and elaborate the "left hand side" of the implicit class construction /// syntax. - let TcImplictCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) = + let TcImplicitCtorLhs_Phase2A(cenv, env, tpenv, tcref: TyconRef, vis, attrs, spats, thisIdOpt, baseValOpt: Val option, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) = let baseValOpt = match GetSuperTypeOfType cenv.g cenv.amap m objTy with @@ -13164,12 +13164,12 @@ module IncrClassChecking = // Note: the recursive calls are made via members on the object // or via access to fields. This means the recursive loop is "broken", // and we can collapse to sequential bindings - let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // inscope before + let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // in scope before let actions, methodBinds = binds |> List.map (TransBind reps) |> List.unzip // since can occur in RHS of own defns actions, reps, methodBinds else let actions, methodBinds = binds |> List.map (TransBind reps) |> List.unzip - let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // inscope after + let reps = (reps, binds) ||> List.fold (fun rep bind -> rep.ValNowWithRepresentation bind.Var) // in scope after actions, reps, methodBinds let methodBinds = List.concat methodBinds if isStatic then @@ -13439,16 +13439,16 @@ module MutRecBindingChecking = // Class members can access protected members of the implemented type // Class members can access private members in the ty let isExtrinsic = (declKind = ExtrinsicExtensionBinding) - let initalEnvForTycon = MakeInnerEnvForTyconRef envForDecls tcref isExtrinsic + let initialEnvForTycon = MakeInnerEnvForTyconRef envForDecls tcref isExtrinsic // Re-add the type constructor to make it take precedence for record label field resolutions // This does not apply to extension members: in those cases the relationship between the record labels // and the type is too extruded let envForTycon = if isExtrinsic then - initalEnvForTycon + initialEnvForTycon else - AddLocalTyconRefs true g cenv.amap tcref.Range [tcref] initalEnvForTycon + AddLocalTyconRefs true g cenv.amap tcref.Range [tcref] initialEnvForTycon // Make fresh version of the class type for type checking the members and lets * let _, copyOfTyconTypars, _, objTy, thisTy = FreshenObjectArgType cenv tcref.Range TyparRigidity.WillBeRigid tcref isExtrinsic declaredTyconTypars @@ -13477,7 +13477,7 @@ module MutRecBindingChecking = error(Error(FSComp.SR.tcMeasureDeclarationsRequireStaticMembers(), m)) // Phase2A: make incrClassCtorLhs - ctorv, thisVal etc, type depends on argty(s) - let incrClassCtorLhs = TcImplictCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) + let incrClassCtorLhs = TcImplicitCtorLhs_Phase2A(cenv, envForTycon, tpenv, tcref, vis, attrs, spats, thisIdOpt, baseValOpt, safeInitInfo, m, copyOfTyconTypars, objTy, thisTy) // Phase2A: Add copyOfTyconTypars from incrClassCtorLhs - or from tcref let envForTycon = AddDeclaredTypars CheckForDuplicateTypars incrClassCtorLhs.InstanceCtorDeclaredTypars envForTycon let innerState = (Some incrClassCtorLhs, envForTycon, tpenv, recBindIdx, uncheckedBindsRev) @@ -14451,7 +14451,7 @@ module TyconConstraintInference = yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type variables - let initialAsssumedTypars = Set.empty + let initialAssumedTypars = Set.empty // Repeatedly eliminate structural type definitions whose structural component types no longer support // comparison. On the way record type variables which are support the comparison relation. @@ -14557,7 +14557,7 @@ module TyconConstraintInference = else loop newSet !assumedTyparsAcc - let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAsssumedTypars + let uneliminatedTycons, assumedTyparsActual = loop initialAssumedTycons initialAssumedTypars // OK, we're done, Record the results for the type variable which provide the support for tyconStamp in uneliminatedTycons do @@ -14598,7 +14598,7 @@ module TyconConstraintInference = if tp.Constraints |> List.exists (function TyparConstraint.SupportsEquality _ -> true | _ -> false) then true - // Within structural types, type parameters can be optimistically assumed to have ewquality + // Within structural types, type parameters can be optimistically assumed to have equality // We record the ones for which we have made this assumption. elif tycon.Typars(tycon.Range) |> List.exists (fun tp2 -> typarRefEq tp tp2) then assumedTyparsAcc := (!assumedTyparsAcc).Add(tp.Stamp) @@ -15415,7 +15415,7 @@ module EstablishTypeDefinitionCores = with e -> errorRecovery e m - // Third phase: check and publish the supr types. Run twice, once before constraints are established + // Third phase: check and publish the super types. Run twice, once before constraints are established // and once after let private TcTyconDefnCore_Phase1D_Phase1F_EstablishSuperTypesAndInterfaceTypes cenv tpenv inSig pass (envMutRec, mutRecDefns: MutRecShape<(_ * (Tycon * (Attribs * _)) option), _, _, _, _> list) = let checkCxs = if (pass = SecondPass) then CheckCxs else NoCheckCxs @@ -15545,7 +15545,7 @@ module EstablishTypeDefinitionCores = let hasMeasureAttr = HasFSharpAttribute g g.attrib_MeasureAttribute attrs // REVIEW: for hasMeasureableAttr we need to be stricter about checking these - // are only used on exactly the right kinds of type definitions and not inconjunction with other attributes. + // are only used on exactly the right kinds of type definitions and not in conjunction with other attributes. let hasMeasureableAttr = HasFSharpAttribute g g.attrib_MeasureableAttribute attrs let hasCLIMutable = HasFSharpAttribute g g.attrib_CLIMutableAttribute attrs @@ -16433,7 +16433,7 @@ module TcDeclarations = | SynMemberDefn.Inherit _ | SynMemberDefn.AbstractSlot _ -> false) - // Convert autoproperties to let bindings in the pre-list + // Convert auto properties to let bindings in the pre-list let rec preAutoProps memb = match memb with | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, _, xmlDoc, _access, synExpr, _mGetSet, mWholeAutoProp) -> @@ -16460,7 +16460,7 @@ module TcDeclarations = | SynMemberDefn.ImplicitInherit _ -> [memb] | _ -> [] - // Convert autoproperties to member bindings in the post-list + // Convert auto properties to member bindings in the post-list let rec postAutoProps memb = match memb with | SynMemberDefn.AutoProperty(Attributes attribs, isStatic, id, tyOpt, propKind, memberFlags, xmlDoc, access, _synExpr, mGetSetOpt, _mWholeAutoProp) -> diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 59e93205ce..0a00cd4434 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -1368,7 +1368,7 @@ and and [] SynExceptionDefnRepr = - | SynExceptionDefnRepr of SynAttributes * SynUnionCase * longId: LongIdent option * xmlDoc: PreXmlDoc * accessiblity: SynAccess option * range: range + | SynExceptionDefnRepr of SynAttributes * SynUnionCase * longId: LongIdent option * xmlDoc: PreXmlDoc * accessibility: SynAccess option * range: range member this.Range = match this with SynExceptionDefnRepr (range=m) -> m @@ -1416,7 +1416,7 @@ and | Member of memberDefn: SynBinding * range: range /// implicit ctor args as a defn line, 'as' specification - | ImplicitCtor of accessiblity: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * range: range + | ImplicitCtor of accessibility: SynAccess option * attributes: SynAttributes * ctorArgs: SynSimplePats * selfIdentifier: Ident option * range: range /// inherit (args...) as base | ImplicitInherit of inheritType: SynType * inheritArgs: SynExpr * inheritAlias: Ident option * range: range @@ -1448,7 +1448,7 @@ and propKind: MemberKind * memberFlags:(MemberKind -> MemberFlags) * xmlDoc: PreXmlDoc * - accessiblity: SynAccess option * + accessibility: SynAccess option * synExpr: SynExpr * getSetRange: range option * range: range @@ -1760,15 +1760,15 @@ let (|SynPatErrorSkip|) (p: SynPat) = let rec SimplePatOfPat (synArgNameGenerator: SynArgNameGenerator) p = match p with | SynPat.Typed(p', ty, m) -> - let p2, laterf = SimplePatOfPat synArgNameGenerator p' + let p2, laterF = SimplePatOfPat synArgNameGenerator p' SynSimplePat.Typed(p2, ty, m), - laterf + laterF | SynPat.Attrib(p', attribs, m) -> - let p2, laterf = SimplePatOfPat synArgNameGenerator p' + let p2, laterF = SimplePatOfPat synArgNameGenerator p' SynSimplePat.Attrib(p2, attribs, m), - laterf - | SynPat.Named (SynPat.Wild _, v, thisv, _, m) -> - SynSimplePat.Id (v, None, false, thisv, false, m), + laterF + | SynPat.Named (SynPat.Wild _, v, thisV, _, m) -> + SynSimplePat.Id (v, None, false, thisV, false, m), None | SynPat.OptionalVal (v, m) -> SynSimplePat.Id (v, None, false, false, true, m), @@ -1803,13 +1803,13 @@ let rec SimplePatsOfPat synArgNameGenerator p = match p with | SynPat.FromParseError (p, _) -> SimplePatsOfPat synArgNameGenerator p | SynPat.Typed(p', ty, m) -> - let p2, laterf = SimplePatsOfPat synArgNameGenerator p' + let p2, laterF = SimplePatsOfPat synArgNameGenerator p' SynSimplePats.Typed(p2, ty, m), - laterf + laterF // | SynPat.Paren (p, m) -> SimplePatsOfPat synArgNameGenerator p | SynPat.Tuple (false, ps, m) | SynPat.Paren(SynPat.Tuple (false, ps, m), _) -> - let ps2, laterf = + let ps2, laterF = List.foldBack (fun (p', rhsf) (ps', rhsf') -> p':: ps', @@ -1817,23 +1817,23 @@ let rec SimplePatsOfPat synArgNameGenerator p = (List.map (SimplePatOfPat synArgNameGenerator) ps) ([], None) SynSimplePats.SimplePats (ps2, m), - laterf + laterF | SynPat.Paren(SynPat.Const (SynConst.Unit, m), _) | SynPat.Const (SynConst.Unit, m) -> SynSimplePats.SimplePats ([], m), None | _ -> let m = p.Range - let sp, laterf = SimplePatOfPat synArgNameGenerator p - SynSimplePats.SimplePats ([sp], m), laterf + let sp, laterF = SimplePatOfPat synArgNameGenerator p + SynSimplePats.SimplePats ([sp], m), laterF let PushPatternToExpr synArgNameGenerator isMember pat (rhs: SynExpr) = - let nowpats, laterf = SimplePatsOfPat synArgNameGenerator pat - nowpats, SynExpr.Lambda (isMember, false, nowpats, appFunOpt laterf rhs, rhs.Range) + let nowPats, laterF = SimplePatsOfPat synArgNameGenerator pat + nowPats, SynExpr.Lambda (isMember, false, nowPats, appFunOpt laterF rhs, rhs.Range) let private isSimplePattern pat = - let _nowpats, laterf = SimplePatsOfPat (SynArgNameGenerator()) pat - Option.isNone laterf + let _nowPats, laterF = SimplePatsOfPat (SynArgNameGenerator()) pat + Option.isNone laterF /// "fun (UnionCase x) (UnionCase y) -> body" /// ==> @@ -1950,15 +1950,15 @@ let mkSynDotBrackGet m mDot a b = SynExpr.DotIndexedGet (a, [SynIndexerArg.On let mkSynQMarkSet m a b c = mkSynTrifix m qmarkSet a b c let mkSynDotBrackSliceGet m mDot arr sliceArg = SynExpr.DotIndexedGet (arr, [sliceArg], mDot, m) -let mkSynDotBrackSeqSliceGet m mDot arr (argslist: list) = - let notsliced=[ for arg in argslist do +let mkSynDotBrackSeqSliceGet m mDot arr (argsList: list) = + let notSliced=[ for arg in argsList do match arg with | SynIndexerArg.One x -> yield x | _ -> () ] - if notsliced.Length = argslist.Length then - SynExpr.DotIndexedGet (arr, [SynIndexerArg.One (SynExpr.Tuple (false, notsliced, [], unionRanges (List.head notsliced).Range (List.last notsliced).Range))], mDot, m) + if notSliced.Length = argsList.Length then + SynExpr.DotIndexedGet (arr, [SynIndexerArg.One (SynExpr.Tuple (false, notSliced, [], unionRanges (List.head notSliced).Range (List.last notSliced).Range))], mDot, m) else - SynExpr.DotIndexedGet (arr, argslist, mDot, m) + SynExpr.DotIndexedGet (arr, argsList, mDot, m) let mkSynDotParenGet lhsm dotm a b = match b with @@ -2206,7 +2206,7 @@ let mkSynBindingRhs staticOptimizations rhsExpr mRhs retInfo = let rhsExpr = List.foldBack (fun (c, e1) e2 -> SynExpr.LibraryOnlyStaticOptimization (c, e1, e2, mRhs)) staticOptimizations rhsExpr let rhsExpr, retTyOpt = match retInfo with - | Some (SynReturnInfo((ty, SynArgInfo(rattribs, _, _)), tym)) -> SynExpr.Typed (rhsExpr, ty, rhsExpr.Range), Some(SynBindingReturnInfo(ty, tym, rattribs) ) + | Some (SynReturnInfo((ty, SynArgInfo(rAttribs, _, _)), tym)) -> SynExpr.Typed (rhsExpr, ty, rhsExpr.Range), Some(SynBindingReturnInfo(ty, tym, rAttribs) ) | None -> rhsExpr, None rhsExpr, retTyOpt diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index bfecea2a16..ff5263718f 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -405,7 +405,7 @@ type internal FsiValuePrinter(fsi: FsiEvaluationSessionHostConfig, g: TcGlobals, // Note: The value may be (null:Object). // Note: A System.Type allows the value printer guide printing of nulls, e.g. as None or []. //------- - // IlxGen knows what the v:Val was converted to w.r.t. AbsIL datastructures. + // IlxGen knows what the v:Val was converted to w.r.t. AbsIL data structures. // Ilreflect knows what the AbsIL was generated to. // Combining these allows for obtaining the (obj,objTy) by reflection where possible. // This assumes the v:Val was given appropriate storage, e.g. StaticField. @@ -1254,7 +1254,7 @@ type internal FsiDynamicCompiler with e -> tcConfigB.RemoveReferencedAssemblyByPath(m,path) reraise() - let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) istate.optEnv ccuinfos + let optEnv = List.fold (AddExternalCcuToOptimizationEnv tcGlobals) istate.optEnv ccuinfos istate.ilxGenerator.AddExternalCcus (ccuinfos |> List.map (fun ccuinfo -> ccuinfo.FSharpViewOfMetadata)) resolutions, { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnv); optEnv = optEnv } @@ -1401,7 +1401,7 @@ type internal FsiInterruptController(fsiOptions: FsiCommandLineOptions, fsiConso member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = - // Fsi Interupt handler + // Fsi Interrupt handler let raiseCtrlC() = use _scope = SetCurrentUICultureForThread fsiOptions.FsiLCID fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) @@ -1623,11 +1623,11 @@ type internal FsiStdinLexerProvider let isFeatureSupported featureId = tcConfigB.langVersion.SupportsFeature featureId - let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readf = + let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readF = UnicodeLexing.FunctionAsLexbuf (isFeatureSupported, (fun (buf: char[], start, len) -> //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" - let inputOption = try Some(readf()) with :? EndOfStreamException -> None + let inputOption = try Some(readF()) with :? EndOfStreamException -> None inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) match inputOption with | Some(null) | None -> @@ -2699,7 +2699,7 @@ type FsiEvaluationSession (fsi: FsiEvaluationSessionHostConfig, argv:string[], i DriveFsiEventLoop (fsi, fsiConsoleOutput ) else // not interact - if !progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading intitial files..." + if !progress then fprintfn fsiConsoleOutput.Out "Run: not interact, loading initial files..." fsiInteractionProcessor.LoadInitialFiles(ctokRun, errorLogger) if !progress then fprintfn fsiConsoleOutput.Out "Run: done..." @@ -2749,7 +2749,7 @@ module Settings = abstract Invoke : (unit -> 'T) -> 'T abstract ScheduleRestart : unit -> unit - // fsi.fs in FSHarp.Compiler.Sevice.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll + // fsi.fs in FSHarp.Compiler.Service.dll avoids a hard dependency on FSharp.Compiler.Interactive.Settings.dll // by providing an optional reimplementation of the functionality // An implementation of IEventLoop suitable for the command-line console diff --git a/src/fsharp/fsi/fsi.fsi b/src/fsharp/fsi/fsi.fsi index 8cc0b23fed..bed1b74e61 100644 --- a/src/fsharp/fsi/fsi.fsi +++ b/src/fsharp/fsi/fsi.fsi @@ -125,10 +125,10 @@ type FsiEvaluationSession = /// Create an FsiEvaluationSession, reading from the given text input, writing to the given text output and error writers /// /// The dynamic configuration of the evaluation session - /// The commmand line arguments for the evaluation session + /// The command line arguments for the evaluation session /// Read input from the given reader /// Write output to the given writer - /// Optionally make the dynamic assmbly for the session collectible + /// Optionally make the dynamic assembly for the session collectible static member Create : fsiConfig: FsiEvaluationSessionHostConfig * argv:string[] * inReader:TextReader * outWriter:TextWriter * errorWriter: TextWriter * ?collectible: bool * ?legacyReferenceResolver: ReferenceResolver.Resolver -> FsiEvaluationSession /// A host calls this to request an interrupt on the evaluation thread. @@ -177,7 +177,7 @@ type FsiEvaluationSession = /// Execute the code as if it had been entered as one or more interactions, with an /// implicit termination at the end of the input. Stop on first error, discarding the rest /// of the input. Errors are sent to the output writer. Parsing is performed on the current thread, and execution is performed - /// sycnhronously on the 'main' thread. + /// synchronously on the 'main' thread. /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. @@ -187,7 +187,7 @@ type FsiEvaluationSession = /// implicit termination at the end of the input. Stop on first error, discarding the rest /// of the input. Errors and warnings are collected apart from any exception arising from execution /// which is returned via a Choice. Parsing is performed on the current thread, and execution is performed - /// sycnhronously on the 'main' thread. + /// synchronously on the 'main' thread. /// /// Due to a current limitation, it is not fully thread-safe to run this operation concurrently with evaluation triggered /// by input from 'stdin'. @@ -222,7 +222,7 @@ type FsiEvaluationSession = /// Get a handle to the resolved view of the current signature of the incrementally generated assembly. member CurrentPartialAssemblySignature : FSharpAssemblySignature - /// Get a handle to the dynamicly generated assembly + /// Get a handle to the dynamically generated assembly member DynamicAssembly : System.Reflection.Assembly /// A host calls this to determine if the --gui parameter is active @@ -320,7 +320,7 @@ module Settings = /// A default implementation of the 'fsi' object, used by GetDefaultConfiguration(). Note this /// is a different object to FSharp.Compiler.Interactive.Settings.fsi in FSharp.Compiler.Interactive.Settings.dll, - /// which can be used as an alternative implementation of the interactiev settings if passed as a parameter + /// which can be used as an alternative implementation of the interactive settings if passed as a parameter /// to GetDefaultConfiguration(fsiObj). val fsi : InteractiveSettings diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index e8a036febb..15608fc331 100755 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -1077,7 +1077,7 @@ type MethInfo = /// For an extension method this includes all type parameters, even if it is extending a generic type. member x.GenericArity = x.FormalMethodTypars.Length - member x.IsProtectedAccessiblity = + member x.IsProtectedAccessibility = match x with | ILMeth(_, ilmeth, _) -> ilmeth.IsProtectedAccessibility | FSMeth _ -> false @@ -2476,7 +2476,7 @@ type EventInfo = /// Test whether two event infos have the same underlying definition. /// Must be compatible with ItemsAreEffectivelyEqual relation. - static member EventInfosUseIdenticalDefintions x1 x2 = + static member EventInfosUseIdenticalDefinitions x1 x2 = match x1, x2 with | FSEvent(g, pi1, vrefa1, vrefb1), FSEvent(_, pi2, vrefa2, vrefb2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2 && valRefEq g vrefa1 vrefa2 && valRefEq g vrefb1 vrefb2 diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index d63a8f8f02..f6e35cfb61 100755 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -389,7 +389,7 @@ type LayoutRenderer<'a, 'b> = let renderL (rr: LayoutRenderer<_, _>) layout = let rec addL z pos i layout k = match layout with - | ObjLeaf _ -> failwith "ObjLeaf should never apper here" + | ObjLeaf _ -> failwith "ObjLeaf should never appear here" (* pos is tab level *) | Leaf (_, text, _) -> k(rr.AddText z text, i + text.Text.Length) diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 6c4599f8a1..f626cdd022 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -98,31 +98,31 @@ module Check = /// Throw System.InvalidOperationException() if argument is None. /// If there is a value (e.g. Some(value)) then value is returned. - let NotNone argname (arg:'T option) : 'T = + let NotNone argName (arg:'T option) : 'T = match arg with - | None -> raise (new System.InvalidOperationException(argname)) + | None -> raise (new System.InvalidOperationException(argName)) | Some x -> x /// Throw System.ArgumentNullException() if argument is null. - let ArgumentNotNull arg argname = + let ArgumentNotNull arg argName = match box(arg) with - | null -> raise (new System.ArgumentNullException(argname)) + | null -> raise (new System.ArgumentNullException(argName)) | _ -> () /// Throw System.ArgumentNullException() if array argument is null. /// Throw System.ArgumentOutOfRangeException() is array argument is empty. - let ArrayArgumentNotNullOrEmpty (arr:'T[]) argname = - ArgumentNotNull arr argname + let ArrayArgumentNotNullOrEmpty (arr:'T[]) argName = + ArgumentNotNull arr argName if (0 = arr.Length) then - raise (new System.ArgumentOutOfRangeException(argname)) + raise (new System.ArgumentOutOfRangeException(argName)) /// Throw System.ArgumentNullException() if string argument is null. /// Throw System.ArgumentOutOfRangeException() is string argument is empty. - let StringArgumentNotNullOrEmpty (s:string) argname = - ArgumentNotNull s argname + let StringArgumentNotNullOrEmpty (s:string) argName = + ArgumentNotNull s argName if s.Length = 0 then - raise (new System.ArgumentNullException(argname)) + raise (new System.ArgumentNullException(argName)) //------------------------------------------------------------------------- // Library @@ -378,10 +378,10 @@ let nullableSlotFull x = x type cache<'T> = { mutable cacheVal: 'T NonNullSlot } let newCache() = { cacheVal = nullableSlotEmpty() } -let inline cached cache resf = +let inline cached cache resF = match box cache.cacheVal with | null -> - let res = resf() + let res = resF() cache.cacheVal <- nullableSlotFull res res | _ -> @@ -419,11 +419,11 @@ module internal AsyncUtil = | AsyncCanceled of OperationCanceledException static member Commit(res:AsyncResult<'T>) = - Async.FromContinuations (fun (cont, econt, ccont) -> + Async.FromContinuations (fun (cont, eCont, cCont) -> match res with | AsyncOk v -> cont v - | AsyncException exn -> econt exn - | AsyncCanceled exn -> ccont exn) + | AsyncException exn -> eCont exn + | AsyncCanceled exn -> cCont exn) /// When using .NET 4.0 you can replace this type by [] @@ -446,7 +446,7 @@ module internal AsyncUtil = else result <- Some res // Invoke continuations in FIFO order - // Continuations that Async.FromContinuations provide do QUWI/SynchContext.Post, + // Continuations that Async.FromContinuations provide do QUWI/SyncContext.Post, // so the order is not overly relevant but still. List.rev savedConts) let postOrQueue (sc:SynchronizationContext, cont) = diff --git a/src/fsharp/range.fs b/src/fsharp/range.fs index 0b6d7d3963..e9b44a6397 100755 --- a/src/fsharp/range.fs +++ b/src/fsharp/range.fs @@ -208,8 +208,8 @@ let mkPos l c = pos (l, c) #endif type range(code1:int64, code2: int64) = static member Zero = range(0L, 0L) - new (fidx, bl, bc, el, ec) = - let code1 = ((int64 fidx) &&& fileIndexMask) + new (fIdx, bl, bc, el, ec) = + let code1 = ((int64 fIdx) &&& fileIndexMask) ||| ((int64 bc <<< startColumnShift) &&& startColumnMask) ||| ((int64 ec <<< endColumnShift) &&& endColumnMask) let code2 = @@ -217,7 +217,7 @@ type range(code1:int64, code2: int64) = ||| ((int64 (el-bl) <<< heightShift) &&& heightMask) range(code1, code2) - new (fidx, b:pos, e:pos) = range(fidx, b.Line, b.Column, e.Line, e.Column) + new (fIdx, b:pos, e:pos) = range(fIdx, b.Line, b.Column, e.Line, e.Column) member r.StartLine = int32((code2 &&& startLineMask) >>> startLineShift) diff --git a/src/fsharp/service/FSharpCheckerResults.fs b/src/fsharp/service/FSharpCheckerResults.fs index d17b56c085..c3990eb132 100644 --- a/src/fsharp/service/FSharpCheckerResults.fs +++ b/src/fsharp/service/FSharpCheckerResults.fs @@ -1353,7 +1353,7 @@ type internal TypeCheckInfo | CNR(_, (Item.CustomBuilder _ | Item.CustomOperation _), ItemOccurence.Use, _, _, _, m) -> Some (m, SemanticClassificationType.ComputationExpression) // types get colored as types when they occur in syntactic types or custom attributes - // typevariables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords + // type variables get colored as types when they occur in syntactic types custom builders, custom operations get colored as keywords | CNR(_, Item.Types (_, [OptionalArgumentAttribute]), LegitTypeOccurence, _, _, _, _) -> None | CNR(_, Item.CtorGroup(_, [MethInfo.FSMeth(_, OptionalArgumentAttribute, _, _)]), LegitTypeOccurence, _, _, _, _) -> None | CNR(_, Item.Types(_, types), LegitTypeOccurence, _, _, _, m) when types |> List.exists (isInterfaceTy g) -> @@ -1446,7 +1446,7 @@ type FSharpParsingOptions = CompilingFsLib = tcConfig.compilingFslib IsExe = tcConfig.target.IsExe } - static member FromTcConfigBuidler(tcConfigB: TcConfigBuilder, sourceFiles, isInteractive: bool) = + static member FromTcConfigBuilder(tcConfigB: TcConfigBuilder, sourceFiles, isInteractive: bool) = { SourceFiles = sourceFiles ConditionalCompilationDefines = tcConfigB.conditionalCompilationDefines @@ -2104,7 +2104,7 @@ type FSharpCheckProjectResults let (tcGlobals, tcImports, thisCcu, ccuSig, _tcSymbolUses, topAttribs, _tcAssemblyData, _ilAssemRef, _ad, _tcAssemblyExpr, _dependencyFiles) = getDetails() FSharpAssemblySignature(tcGlobals, thisCcu, ccuSig, tcImports, topAttribs, ccuSig) - member __.TypedImplementionFiles = + member __.TypedImplementationFiles = if not keepAssemblyContents then invalidOp "The 'keepAssemblyContents' flag must be set to true on the FSharpChecker in order to access the checked contents of assemblies" let (tcGlobals, tcImports, thisCcu, _ccuSig, _tcSymbolUses, _topAttribs, _tcAssemblyData, _ilAssemRef, _ad, tcAssemblyExpr, _dependencyFiles) = getDetails() let mimpls = diff --git a/src/fsharp/service/FSharpCheckerResults.fsi b/src/fsharp/service/FSharpCheckerResults.fsi index 4f7062d9ce..13496225bf 100644 --- a/src/fsharp/service/FSharpCheckerResults.fsi +++ b/src/fsharp/service/FSharpCheckerResults.fsi @@ -89,7 +89,7 @@ type public FSharpParsingOptions = static member internal FromTcConfig: tcConfig: TcConfig * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions - static member internal FromTcConfigBuidler: tcConfigB: TcConfigBuilder * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions + static member internal FromTcConfigBuilder: tcConfigB: TcConfigBuilder * sourceFiles: string[] * isInteractive: bool -> FSharpParsingOptions /// A handle to the results of CheckFileInProject. [] diff --git a/src/fsharp/service/IncrementalBuild.fs b/src/fsharp/service/IncrementalBuild.fs index 96e81e3214..ce24bbcb16 100755 --- a/src/fsharp/service/IncrementalBuild.fs +++ b/src/fsharp/service/IncrementalBuild.fs @@ -253,9 +253,9 @@ module internal IncrementalBuild = static member OfSize size = ResultVector(size, DateTime.MinValue, Map.empty) member rv.Size = size member rv.Get slot = get slot - member rv.Resize newsize = - if size<>newsize then - ResultVector(newsize, zeroElementTimestamp, map |> Map.filter(fun s _ -> s < newsize)) + member rv.Resize newSize = + if size<>newSize then + ResultVector(newSize, zeroElementTimestamp, map |> Map.filter(fun s _ -> s < newSize)) else rv member rv.Set(slot, value) = @@ -266,7 +266,7 @@ module internal IncrementalBuild = ResultVector(size, zeroElementTimestamp, Map.add slot value map) member rv.MaxTimestamp() = - let maximize (lasttimestamp: DateTime) (_, result: Result) = max lasttimestamp result.Timestamp + let maximize (lastTimestamp: DateTime) (_, result: Result) = max lastTimestamp result.Timestamp List.fold maximize zeroElementTimestamp (asList.Force()) member rv.Signature() = @@ -416,16 +416,16 @@ module internal IncrementalBuild = /// Get the maximum build stamp for an output. let MaxTimestamp(bt: PartialBuild, id) = match bt.Results.TryFind id with - | Some resultset -> - match resultset with + | Some resultSet -> + match resultSet with | ScalarResult rs -> rs.Timestamp | VectorResult rv -> rv.MaxTimestamp() | None -> DateTime.MaxValue let Signature(bt: PartialBuild, id) = match bt.Results.TryFind id with - | Some resultset -> - match resultset with + | Some resultSet -> + match resultSet with | ScalarResult rs -> rs.InputSignature | VectorResult rv -> rv.Signature() | None -> UnevaluatedInput @@ -515,9 +515,9 @@ module internal IncrementalBuild = seen.[id] <- true false - let shouldEvaluate(bt, currentsig: InputSignature, id) = - if currentsig.IsEvaluated then - currentsig <> Signature(bt, id) + let shouldEvaluate(bt, currentSig: InputSignature, id) = + if currentSig.IsEvaluated then + currentSig <> Signature(bt, id) else false /// Make sure the result vector saved matches the size of expr @@ -555,20 +555,20 @@ module internal IncrementalBuild = let inputResult = GetVectorExprResult (bt, inputExpr, slot) match accumulatorResult, inputResult with - | Available (accumulator, accumulatortimesamp, _accumulatorInputSig), Available (input, inputtimestamp, _inputSig) -> - let inputtimestamp = max inputtimestamp accumulatortimesamp - let prevoutput = GetVectorExprResult (bt, ve, slot) - let outputtimestamp = prevoutput.Timestamp + | Available (accumulator, accumulatorTimestamp, _accumulatorInputSig), Available (input, inputTimestamp, _inputSig) -> + let inputTimestamp = max inputTimestamp accumulatorTimestamp + let prevOutput = GetVectorExprResult (bt, ve, slot) + let outputTimestamp = prevOutput.Timestamp let scanOpOpt = - if inputtimestamp <> outputtimestamp then + if inputTimestamp <> outputTimestamp then Some (fun ctok -> func ctok accumulator input) - elif prevoutput.ResultIsInProgress then - Some prevoutput.GetInProgressContinuation + elif prevOutput.ResultIsInProgress then + Some prevOutput.GetInProgressContinuation else // up-to-date and complete, no work required None match scanOpOpt with - | Some scanOp -> Some (actionFunc (IndexedAction(id, taskname, slot, cardinality, inputtimestamp, scanOp)) acc) + | Some scanOp -> Some (actionFunc (IndexedAction(id, taskname, slot, cardinality, inputTimestamp, scanOp)) acc) | None -> None | _ -> None @@ -584,19 +584,19 @@ module internal IncrementalBuild = | Some cardinality -> if cardinality=0 then // For vector length zero, just propagate the prior timestamp. - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then - actionFunc (VectorAction(id, taskname, inputtimestamp, EmptyTimeStampedInput inputtimestamp, fun _ -> cancellable.Return [||])) acc + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then + actionFunc (VectorAction(id, taskname, inputTimestamp, EmptyTimeStampedInput inputTimestamp, fun _ -> cancellable.Return [||])) acc else acc else let MapResults acc slot = - let inputtimestamp = GetVectorExprResult(bt, inputExpr, slot).Timestamp - let outputtimestamp = GetVectorExprResult(bt, ve, slot).Timestamp - if inputtimestamp <> outputtimestamp then + let inputTimestamp = GetVectorExprResult(bt, inputExpr, slot).Timestamp + let outputTimestamp = GetVectorExprResult(bt, ve, slot).Timestamp + if inputTimestamp <> outputTimestamp then let OneToOneOp ctok = Eventually.Done (func ctok (GetVectorExprResult(bt, inputExpr, slot).GetAvailable())) - actionFunc (IndexedAction(id, taskname, slot, cardinality, inputtimestamp, OneToOneOp)) acc + actionFunc (IndexedAction(id, taskname, slot, cardinality, inputTimestamp, OneToOneOp)) acc else acc match optSlot with | None -> @@ -615,20 +615,20 @@ module internal IncrementalBuild = | Some cardinality -> if cardinality=0 then // For vector length zero, just propagate the prior timestamp. - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then - actionFunc (VectorAction(id, taskname, inputtimestamp, EmptyTimeStampedInput inputtimestamp, fun _ -> cancellable.Return [||])) acc + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then + actionFunc (VectorAction(id, taskname, inputTimestamp, EmptyTimeStampedInput inputTimestamp, fun _ -> cancellable.Return [||])) acc else acc else let checkStamp acc slot = - let inputresult = GetVectorExprResult (bt, inputExpr, slot) - match inputresult with + let inputResult = GetVectorExprResult (bt, inputExpr, slot) + match inputResult with | Available (ires, _, _) -> - let oldtimestamp = GetVectorExprResult(bt, ve, slot).Timestamp - let newtimestamp = func cache ctok ires - if newtimestamp <> oldtimestamp then - actionFunc (IndexedAction(id, taskname, slot, cardinality, newtimestamp, fun _ -> Eventually.Done ires)) acc + let oldTimestamp = GetVectorExprResult(bt, ve, slot).Timestamp + let newTimestamp = func cache ctok ires + if newTimestamp <> oldTimestamp then + actionFunc (IndexedAction(id, taskname, slot, cardinality, newTimestamp, fun _ -> Eventually.Done ires)) acc else acc | _ -> acc match optSlot with @@ -642,11 +642,11 @@ module internal IncrementalBuild = | VectorMultiplex(id, taskname, inputExpr, func) -> let acc = match GetScalarExprResult (bt, inputExpr) with - | Available (inp, inputtimestamp, inputsig) -> - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then + | Available (inp, inputTimestamp, inputsig) -> + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then let MultiplexOp ctok = func ctok inp |> cancellable.Return - actionFunc (VectorAction(id, taskname, inputtimestamp, inputsig, MultiplexOp)) acc + actionFunc (VectorAction(id, taskname, inputTimestamp, inputsig, MultiplexOp)) acc else acc | _ -> acc visitScalar inputExpr acc @@ -659,16 +659,16 @@ module internal IncrementalBuild = | ScalarDemultiplex (id, taskname, inputExpr, func) -> let acc = match GetVectorExprResultVector (bt, inputExpr) with - | Some inputresult -> - let currentsig = inputresult.Signature() - if shouldEvaluate(bt, currentsig, id) then - let inputtimestamp = MaxTimestamp(bt, inputExpr.Id) + | Some inputResult -> + let currentSig = inputResult.Signature() + if shouldEvaluate(bt, currentSig, id) then + let inputTimestamp = MaxTimestamp(bt, inputExpr.Id) let DemultiplexOp ctok = cancellable { let input = AvailableAllResultsOfExpr bt inputExpr |> List.toArray return! func ctok input } - actionFunc (ScalarAction(id, taskname, inputtimestamp, currentsig, DemultiplexOp)) acc + actionFunc (ScalarAction(id, taskname, inputTimestamp, currentSig, DemultiplexOp)) acc else acc | None -> acc @@ -677,11 +677,11 @@ module internal IncrementalBuild = | ScalarMap (id, taskname, inputExpr, func) -> let acc = match GetScalarExprResult (bt, inputExpr) with - | Available (inp, inputtimestamp, inputsig) -> - let outputtimestamp = MaxTimestamp(bt, id) - if inputtimestamp <> outputtimestamp then + | Available (inp, inputTimestamp, inputsig) -> + let outputTimestamp = MaxTimestamp(bt, id) + if inputTimestamp <> outputTimestamp then let MapOp ctok = func ctok inp |> cancellable.Return - actionFunc (ScalarAction(id, taskname, inputtimestamp, inputsig, MapOp)) acc + actionFunc (ScalarAction(id, taskname, inputTimestamp, inputsig, MapOp)) acc else acc | _ -> acc @@ -782,10 +782,10 @@ module internal IncrementalBuild = if gen>5000 then failwith "Infinite loop in incremental builder?" #endif - let worklist = CollectActions cache target bt + let workList = CollectActions cache target bt let! newBt = - (bt, worklist) ||> Cancellable.fold (fun bt action -> + (bt, workList) ||> Cancellable.fold (fun bt action -> if injectCancellationFault then Cancellable.canceled() else @@ -800,9 +800,9 @@ module internal IncrementalBuild = cancellable { // REVIEW: we're building up the whole list of actions on the fringe of the work tree, // executing one thing and then throwing the list away. What about saving the list inside the Build instance? - let worklist = CollectActions cache target bt + let workList = CollectActions cache target bt - match worklist with + match workList with | action :: _ -> let! res = ExecuteApply ctok save action bt return Some res @@ -822,8 +822,8 @@ module internal IncrementalBuild = /// Check if an output is up-to-date and ready let IsReady cache target bt = - let worklist = CollectActions cache target bt - worklist.IsEmpty + let workList = CollectActions cache target bt + workList.IsEmpty /// Check if an output is up-to-date and ready let MaxTimeStampInDependencies cache ctok target bt = @@ -972,7 +972,7 @@ module internal IncrementalBuild = -// Record the most recent IncrementalBuilder events, so we can more easily unittest/debug the +// Record the most recent IncrementalBuilder events, so we can more easily unit test/debug the // 'incremental' behavior of the product. module IncrementalBuilderEventTesting = @@ -1054,7 +1054,7 @@ type TypeCheckAccumulator = /// Global service state type FrameworkImportsCacheKey = (*resolvedpath*)string list * string * (*TargetFrameworkDirectories*)string list * (*fsharpBinaries*)string * (*langVersion*)decimal -/// Represents a cache of 'framework' references that can be shared betweeen multiple incremental builds +/// Represents a cache of 'framework' references that can be shared between multiple incremental builds type FrameworkImportsCache(keepStrongly) = // Mutable collection protected via CompilationThreadToken @@ -1087,7 +1087,7 @@ type FrameworkImportsCache(keepStrongly) = tcConfig.primaryAssembly.Name, tcConfig.GetTargetFrameworkDirectories(), tcConfig.fsharpBinariesDir, - tcConfig.langVersion.SpecifiedVerson) + tcConfig.langVersion.SpecifiedVersion) match frameworkTcImportsCache.TryGet (ctok, key) with | Some res -> return res @@ -1141,7 +1141,7 @@ type PartialCheckResults = LatestImplementationFile: TypedImplFile option - LastestCcuSigForFile: ModuleOrNamespaceType option } + LatestCcuSigForFile: ModuleOrNamespaceType option } member x.TcErrors = Array.concat (List.rev x.TcErrorsRev) member x.TcSymbolUses = List.rev x.TcSymbolUsesRev @@ -1161,7 +1161,7 @@ type PartialCheckResults = ModuleNamesDict = tcAcc.tcModuleNamesDict TimeStamp = timestamp LatestImplementationFile = tcAcc.latestImplFile - LastestCcuSigForFile = tcAcc.latestCcuSigForFile } + LatestCcuSigForFile = tcAcc.latestCcuSigForFile } [] @@ -1722,9 +1722,9 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput /// Create a type-check configuration let tcConfigB, sourceFilesNew = - let getSwitchValue switchstring = - match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchstring) with - | Some idx -> Some(commandLineArgs.[idx].Substring(switchstring.Length)) + let getSwitchValue switchString = + match commandLineArgs |> Seq.tryFindIndex(fun s -> s.StartsWithOrdinal switchString) with + | Some idx -> Some(commandLineArgs.[idx].Substring(switchString.Length)) | _ -> None // see also fsc.fs: runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB @@ -1810,7 +1810,7 @@ type IncrementalBuilder(tcGlobals, frameworkTcImports, nonFrameworkAssemblyInput [ for r in nonFrameworkResolutions do let fileName = r.resolvedPath - yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctokk -> cache.GetFileTimeStamp fileName)) + yield (Choice1Of2 fileName, (fun (cache: TimeStampCache) _ctok -> cache.GetFileTimeStamp fileName)) for pr in projectReferences do yield Choice2Of2 pr, (fun (cache: TimeStampCache) ctok -> cache.GetProjectReferenceTimeStamp (pr, ctok)) ] diff --git a/src/fsharp/service/IncrementalBuild.fsi b/src/fsharp/service/IncrementalBuild.fsi index 96d0063688..fb60dbff69 100755 --- a/src/fsharp/service/IncrementalBuild.fsi +++ b/src/fsharp/service/IncrementalBuild.fsi @@ -60,7 +60,7 @@ type internal PartialCheckResults = TcDependencyFiles: string list - /// Represents the collected attributes to apply to the module of assuembly generates + /// Represents the collected attributes to apply to the module of assembly generates TopAttribs: TypeChecker.TopAttribs option TimeStamp: DateTime @@ -70,7 +70,7 @@ type internal PartialCheckResults = LatestImplementationFile: TypedImplFile option /// Represents latest inferred signature contents. - LastestCcuSigForFile: ModuleOrNamespaceType option} + LatestCcuSigForFile: ModuleOrNamespaceType option} member TcErrors: (PhasedDiagnostic * FSharpErrorSeverity)[] @@ -163,7 +163,7 @@ type internal IncrementalBuilder = static member TryCreateBackgroundBuilderForProjectOptions : CompilationThreadToken * ReferenceResolver.Resolver * defaultFSharpBinariesDir: string * FrameworkImportsCache * scriptClosureOptions:LoadClosure option * sourceFiles:string list * commandLineArgs:string list * projectReferences: IProjectReference list * projectDirectory:string * useScriptResolutionRules:bool * keepAssemblyContents: bool * keepAllBackgroundResolutions: bool * maxTimeShareMilliseconds: int64 * tryGetMetadataSnapshot: ILBinaryReader.ILReaderTryGetMetadataSnapshot * suggestNamesForErrors: bool -> Cancellable -/// Generalized Incremental Builder. This is exposed only for unittesting purposes. +/// Generalized Incremental Builder. This is exposed only for unit testing purposes. module internal IncrementalBuild = type INode = abstract Name: string diff --git a/src/fsharp/service/QuickParse.fs b/src/fsharp/service/QuickParse.fs index b431f2557b..434a0312da 100644 --- a/src/fsharp/service/QuickParse.fs +++ b/src/fsharp/service/QuickParse.fs @@ -20,10 +20,10 @@ type PartialLongName = /// Position of the last dot. LastDotPos: int option } - /// Empty patial long name. + /// Empty partial long name. static member Empty(endColumn: int) = { QualifyingIdents = []; PartialIdent = ""; EndColumn = endColumn; LastDotPos = None } -/// Methods for cheaply and innacurately parsing F#. +/// Methods for cheaply and inaccurately parsing F#. /// /// These methods are very old and are mostly to do with extracting "long identifier islands" /// A.B.C @@ -58,7 +58,7 @@ module QuickParse = // Utility function that recognizes whether a name is valid active pattern name // Extracts the 'core' part without surrounding bars and checks whether it contains some identifier - // (Note, this doesn't have to be precise, because this is checked by backround compiler, + // (Note, this doesn't have to be precise, because this is checked by background compiler, // but it has to be good enough to distinguish operators and active pattern names) let private isValidActivePatternName (name: string) = @@ -152,7 +152,7 @@ module QuickParse = /// In general, only identifiers composed from upper/lower letters and '.' are supported, but there /// are a couple of explicitly handled exceptions to allow some common scenarios: /// - When the name contains only letters and '|' symbol, it may be an active pattern, so we - /// treat it as a valid identifier - e.g. let ( |Identitiy| ) a = a + /// treat it as a valid identifier - e.g. let ( |Identity| ) a = a /// (but other identifiers that include '|' are not allowed - e.g. '||' operator) /// - It searches for double tick (``) to see if the identifier could be something like ``a b`` /// diff --git a/src/fsharp/service/QuickParse.fsi b/src/fsharp/service/QuickParse.fsi index 5f78dbefd2..3c2adfd0df 100644 --- a/src/fsharp/service/QuickParse.fsi +++ b/src/fsharp/service/QuickParse.fsi @@ -19,10 +19,10 @@ type public PartialLongName = /// Position of the last dot. LastDotPos: int option } - /// Empty patial long name. + /// Empty partial long name. static member Empty: endColumn: int -> PartialLongName -/// Methods for cheaply and innacurately parsing F#. +/// Methods for cheaply and inaccurately parsing F#. /// /// These methods are very old and are mostly to do with extracting "long identifier islands" /// A.B.C @@ -57,7 +57,7 @@ module public QuickParse = /// In general, only identifiers composed from upper/lower letters and '.' are supported, but there /// are a couple of explicitly handled exceptions to allow some common scenarios: /// - When the name contains only letters and '|' symbol, it may be an active pattern, so we - /// treat it as a valid identifier - e.g. let ( |Identitiy| ) a = a + /// treat it as a valid identifier - e.g. let ( |Identity| ) a = a /// (but other identifiers that include '|' are not allowed - e.g. '||' operator) /// - It searches for double tick (``) to see if the identifier could be something like ``a b`` /// diff --git a/src/fsharp/service/Reactor.fs b/src/fsharp/service/Reactor.fs index f879e5133f..b4c487caeb 100755 --- a/src/fsharp/service/Reactor.fs +++ b/src/fsharp/service/Reactor.fs @@ -34,7 +34,7 @@ type Reactor() = let mutable pauseBeforeBackgroundWork = pauseBeforeBackgroundWorkDefault // We need to store the culture for the VS thread that is executing now, - // so that when the reactor picks up a thread from the threadpool we can set the culture + // so that when the reactor picks up a thread from the thread pool we can set the culture let mutable culture = CultureInfo(CultureInfo.CurrentUICulture.Name) let mutable bgOpCts = new CancellationTokenSource() diff --git a/src/fsharp/service/ServiceAnalysis.fs b/src/fsharp/service/ServiceAnalysis.fs index e4f942b657..d9630ab77a 100644 --- a/src/fsharp/service/ServiceAnalysis.fs +++ b/src/fsharp/service/ServiceAnalysis.fs @@ -203,7 +203,7 @@ module UnusedOpens = let filterOpenStatements (symbolUses1: FSharpSymbolUse[], symbolUses2: FSharpSymbolUse[]) openStatements = async { // the key is a namespace or module, the value is a list of FSharpSymbolUse range of symbols defined in the - // namespace or module. So, it's just symbol uses ranges groupped by namespace or module where they are _defined_. + // namespace or module. So, it's just symbol uses ranges grouped by namespace or module where they are _defined_. let symbolUsesRangesByDeclaringEntity = Dictionary(entityHash) for symbolUse in symbolUses1 do match symbolUse.Symbol with diff --git a/src/fsharp/service/ServiceAssemblyContent.fs b/src/fsharp/service/ServiceAssemblyContent.fs index 8ceb381225..4fc27df4ad 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fs +++ b/src/fsharp/service/ServiceAssemblyContent.fs @@ -238,16 +238,16 @@ module AssemblyContentProvider = |> Seq.filter (fun x -> not x.IsInstanceMember && not x.IsPropertyGetterMethod && not x.IsPropertySetterMethod) |> Seq.collect (fun func -> let processIdents fullName idents = - let cleanedIdentes = parent.FixParentModuleSuffix idents + let cleanedIdents = parent.FixParentModuleSuffix idents { FullName = fullName - CleanedIdents = cleanedIdentes + CleanedIdents = cleanedIdents Namespace = ns NearestRequireQualifiedAccessParent = parent.ThisRequiresQualifiedAccess true |> Option.map parent.FixParentModuleSuffix TopRequireQualifiedAccessParent = topRequireQualifiedAccessParent AutoOpenParent = autoOpenParent Symbol = func Kind = fun _ -> EntityKind.FunctionOrValue func.IsActivePattern - UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdentes fullName } + UnresolvedSymbol = unresolvedSymbol topRequireQualifiedAccessParent cleanedIdents fullName } [ yield! func.TryGetFullDisplayName() |> Option.map (fun fullDisplayName -> processIdents func.FullName (fullDisplayName.Split '.')) @@ -948,8 +948,8 @@ module ParsedInput = let fullIdent = parent @ ident addModule (fullIdent, range) if range.EndLine >= currentLine then - let moduleBodyIdentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) - doRange NestedModule fullIdent range.StartLine moduleBodyIdentation + let moduleBodyIndentation = getMinColumn decls |> Option.defaultValue (range.StartColumn + 4) + doRange NestedModule fullIdent range.StartLine moduleBodyIndentation List.iter (walkSynModuleDecl fullIdent) decls | SynModuleDecl.Open (_, range) -> doRange OpenDeclaration [] range.EndLine (range.StartColumn - 5) | SynModuleDecl.HashDirective (_, range) -> doRange HashDirective [] range.EndLine range.StartColumn @@ -1008,9 +1008,9 @@ module ParsedInput = if ctx.Pos.Line > 1 then // it's an implicit module without any open declarations let line = getLineStr (ctx.Pos.Line - 2) - let isImpliciteTopLevelModule = + let isImplicitTopLevelModule = not (line.StartsWithOrdinal("module") && not (line.EndsWithOrdinal("="))) - if isImpliciteTopLevelModule then 1 else ctx.Pos.Line + if isImplicitTopLevelModule then 1 else ctx.Pos.Line else 1 | ScopeKind.Namespace -> // for namespaces the start line is start line of the first nested entity diff --git a/src/fsharp/service/ServiceAssemblyContent.fsi b/src/fsharp/service/ServiceAssemblyContent.fsi index 0fe14c1144..f9e9699cb7 100644 --- a/src/fsharp/service/ServiceAssemblyContent.fsi +++ b/src/fsharp/service/ServiceAssemblyContent.fsi @@ -44,7 +44,7 @@ type public AssemblySymbol = { /// Full entity name as it's seen in compiled code (raw FSharpEntity.FullName, FSharpValueOrFunction.FullName). FullName: string /// Entity name parts with removed module suffixes (Ns.M1Module.M2Module.M3.entity -> Ns.M1.M2.M3.entity) - /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFucntion.DisplayName). + /// and replaced compiled names with display names (FSharpEntity.DisplayName, FSharpValueOrFunction.DisplayName). /// Note: *all* parts are cleaned, not the last one. CleanedIdents: Idents /// `FSharpEntity.Namespace`. @@ -87,10 +87,10 @@ type public EntityCache = /// Performs an operation on the cache in thread safe manner. member Locking : (IAssemblyContentCache -> 'T) -> 'T -/// Lond identifier (i.e. it may contain dots). +/// Long identifier (i.e. it may contain dots). type public StringLongIdent = string -/// Helper data structure representing a symbol, sutable for implementing unresolved identifiers resolution code fixes. +/// Helper data structure representing a symbol, suitable for implementing unresolved identifiers resolution code fixes. type public Entity = { /// Full name, relative to the current scope. FullRelativeName: StringLongIdent @@ -149,7 +149,7 @@ module public ParsedInput = /// Returns `InsertContext` based on current position and symbol idents. val findNearestPointToInsertOpenDeclaration : currentLine: int -> ast: Ast.ParsedInput -> entity: Idents -> insertionPoint: OpenStatementInsertionPoint -> InsertContext - /// Returns lond identifier at position. + /// Returns long identifier at position. val getLongIdentAt : ast: Ast.ParsedInput -> pos: Range.pos -> Ast.LongIdent option /// Corrects insertion line number based on kind of scope and text surrounding the insertion point. diff --git a/src/fsharp/service/ServiceLexing.fs b/src/fsharp/service/ServiceLexing.fs index 9d07198c0a..9217971c5f 100644 --- a/src/fsharp/service/ServiceLexing.fs +++ b/src/fsharp/service/ServiceLexing.fs @@ -453,7 +453,7 @@ module internal LexerStateEncoding = let decodeLexInt (state: FSharpTokenizerLexState) = - let tag, n1, p1, ifd, lightSyntaxStatusInital = decodeLexCont state + let tag, n1, p1, ifd, lightSyntaxStatusInitial = decodeLexCont state let lexcont = match tag with | FSharpTokenizerColorState.Token -> LexCont.Token ifd @@ -470,7 +470,7 @@ module internal LexerStateEncoding = | FSharpTokenizerColorState.EndLineThenSkip -> LexCont.EndLine(LexerEndlineContinuation.Skip(ifd, n1, mkRange "file" p1 p1)) | FSharpTokenizerColorState.EndLineThenToken -> LexCont.EndLine(LexerEndlineContinuation.Token ifd) | _ -> LexCont.Token [] - lightSyntaxStatusInital, lexcont + lightSyntaxStatusInitial, lexcont let callLexCont lexcont args skip lexbuf = let argsWithIfDefs ifd = @@ -499,7 +499,7 @@ module internal LexerStateEncoding = //---------------------------------------------------------------------------- // Information beyond just tokens that can be derived by looking at just a single line. -// For example metacommands like #load. +// For example meta commands like #load. type SingleLineTokenState = | BeforeHash = 0 | NoFurtherMatchPossible = 1 @@ -594,11 +594,11 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, use unwindBP = PushThreadBuildPhaseUntilUnwind BuildPhase.Parse use unwindEL = PushErrorLoggerPhaseUntilUnwind (fun _ -> DiscardErrorsLogger) - let lightSyntaxStatusInital, lexcontInitial = LexerStateEncoding.decodeLexInt lexintInitial - let lightSyntaxStatus = LightSyntaxStatus(lightSyntaxStatusInital, false) + let lightSyntaxStatusInitial, lexcontInitial = LexerStateEncoding.decodeLexInt lexintInitial + let lightSyntaxStatus = LightSyntaxStatus(lightSyntaxStatusInitial, false) // Build the arguments to the lexer function - let lexargs = if lightSyntaxStatusInital then lexArgsLightOn else lexArgsLightOff + let lexargs = if lightSyntaxStatusInitial then lexArgsLightOn else lexArgsLightOff let GetTokenWithPosition lexcontInitial = // Column of token @@ -617,7 +617,7 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, try if (tokenStack.Count > 0) then true, tokenStack.Pop() else - // Choose which lexer entrypoint to call and call it + // Choose which lexer entry point to call and call it let token = LexerStateEncoding.callLexCont lexcontInitial lexargs skip lexbuf let leftc, rightc = ColumnsOfCurrentToken() @@ -721,8 +721,8 @@ type FSharpLineTokenizer(lexbuf: UnicodeLexing.Lexbuf, // Peek at the next token let isCached, (nextToken, _, rightc) = GetTokenWithPosition lexcontInitial match nextToken with - | IDENT possibleMetacommand -> - match fsx, possibleMetacommand with + | IDENT possibleMetaCommand -> + match fsx, possibleMetaCommand with // These are for script (.fsx and .fsscript) files. | true, "r" | true, "reference" diff --git a/src/fsharp/service/ServiceLexing.fsi b/src/fsharp/service/ServiceLexing.fsi index 85e18f171c..2ee5dfacaa 100755 --- a/src/fsharp/service/ServiceLexing.fsi +++ b/src/fsharp/service/ServiceLexing.fsi @@ -15,7 +15,7 @@ type FSharpTokenizerLexState = static member Initial : FSharpTokenizerLexState member Equals : FSharpTokenizerLexState -> bool -/// Represents stable information for the state of the laxing engine at the end of a line +/// Represents stable information for the state of the lexing engine at the end of a line type FSharpTokenizerColorState = | Token = 1 | IfDefSkip = 3 @@ -32,7 +32,7 @@ type FSharpTokenizerColorState = | TripleQuoteStringInComment = 14 | InitialState = 0 -/// Gives an indicattion of the color class to assign to the token an IDE +/// Gives an indication of the color class to assign to the token an IDE type FSharpTokenColorKind = | Default = 0 | Text = 0 diff --git a/src/fsharp/service/ServiceNavigation.fs b/src/fsharp/service/ServiceNavigation.fs index 0640e9ef06..3578543b65 100755 --- a/src/fsharp/service/ServiceNavigation.fs +++ b/src/fsharp/service/ServiceNavigation.fs @@ -127,13 +127,13 @@ module NavigationImpl = FSharpNavigationDeclarationItem.Create(id.idText, kind, baseGlyph, m, m, false, enclosingEntityKind, isAbstract, access), (addItemName(id.idText)) // Process let-binding - let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memebrOpt, _, _), synPat, _, synExpr, _, _)) = + let processBinding isMember enclosingEntityKind isAbstract (Binding(_, _, _, _, _, _, SynValData(memberOpt, _, _), synPat, _, synExpr, _, _)) = let m = match synExpr with | SynExpr.Typed (e, _, _) -> e.Range // fix range for properties with type annotations | _ -> synExpr.Range - match synPat, memebrOpt with + match synPat, memberOpt with | SynPat.LongIdent(longDotId=LongIdentWithDots(lid,_); accessibility=access), Some(flags) when isMember -> let icon, kind = match flags.MemberKind with @@ -632,7 +632,7 @@ module NavigateTo = | SynMemberSig.Inherit _ | SynMemberSig.Interface _ -> () - and walkImplFileInpit (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = + and walkImplFileInput (ParsedImplFileInput (fileName = fileName; modules = moduleOrNamespaceList)) = let container = { Type = ContainerType.File; Name = fileName } for item in moduleOrNamespaceList do walkSynModuleOrNamespace item container @@ -732,7 +732,7 @@ module NavigateTo = match parsedInput with | ParsedInput.SigFile input -> walkSigFileInput input - | ParsedInput.ImplFile input -> walkImplFileInpit input + | ParsedInput.ImplFile input -> walkImplFileInput input result.ToArray() diff --git a/src/fsharp/service/ServiceStructure.fs b/src/fsharp/service/ServiceStructure.fs index 1bf31e27cf..56f2312da4 100644 --- a/src/fsharp/service/ServiceStructure.fs +++ b/src/fsharp/service/ServiceStructure.fs @@ -47,7 +47,7 @@ module Structure = | [] -> range0 | head :: _ -> Range.startToEnd head.idRange (List.last longId).idRange - /// Caclulate the range of the provided type arguments (<'a, ..., 'z>) + /// Calculate the range of the provided type arguments (<'a, ..., 'z>) /// or return the range `other` when `typeArgs` = [] let rangeOfTypeArgsElse other (typeArgs:SynTyparDecl list) = match typeArgs with @@ -77,7 +77,7 @@ module Structure = | Below | Same - /// Tag to identify the constuct that can be stored alongside its associated ranges + /// Tag to identify the construct that can be stored alongside its associated ranges [] type Scope = | Open @@ -177,7 +177,7 @@ module Structure = | Comment -> "Comment" | XmlDocComment -> "XmlDocComment" - /// Stores the range for a construct, the sub-range that should be collapsed for outlinging, + /// Stores the range for a construct, the sub-range that should be collapsed for outlining, /// a tag for the construct type, and a tag for the collapse style [] type ScopeRange = @@ -204,7 +204,7 @@ module Structure = let getOutliningRanges (sourceLines: string[]) (parsedInput: ParsedInput) = let acc = ResizeArray() - /// Validation function to ensure that ranges yielded for outlinging span 2 or more lines + /// Validation function to ensure that ranges yielded for outlining span 2 or more lines let inline rcheck scope collapse (fullRange: range) (collapseRange: range) = if fullRange.StartLine <> fullRange.EndLine then acc.Add { Scope = scope @@ -281,7 +281,7 @@ module Structure = if ExprAtomicFlag.NonAtomic=atomicFlag && (not isInfix) && (function SynExpr.Ident _ -> true | _ -> false) funcExpr && (function SynExpr.CompExpr _ -> false | _ -> true ) argExpr then - // if the argExrp is a computation expression another match will handle the outlining + // if the argExpr is a computation expression another match will handle the outlining // these cases must be removed to prevent creating unnecessary tags for the same scope let collapse = Range.endToEnd funcExpr.Range r rcheck Scope.SpecialFunc Collapse.Below r collapse @@ -624,7 +624,7 @@ module Structure = collectOpens decls List.iter parseDeclaration decls - /// Determine if a line is a single line or xml docummentation comment + /// Determine if a line is a single line or xml documentation comment let (|Comment|_|) (line: string) = if line.StartsWithOrdinal("///") then Some XmlDoc elif line.StartsWithOrdinal("//") then Some SingleLine diff --git a/src/fsharp/service/ServiceStructure.fsi b/src/fsharp/service/ServiceStructure.fsi index ef90f4627e..4eeefe529f 100644 --- a/src/fsharp/service/ServiceStructure.fsi +++ b/src/fsharp/service/ServiceStructure.fsi @@ -15,7 +15,7 @@ module public Structure = | Below | Same - /// Tag to identify the constuct that can be stored alongside its associated ranges + /// Tag to identify the construct that can be stored alongside its associated ranges [] type Scope = | Open diff --git a/src/fsharp/service/ServiceUntypedParse.fs b/src/fsharp/service/ServiceUntypedParse.fs index 84c8947d13..c087fe48a8 100755 --- a/src/fsharp/service/ServiceUntypedParse.fs +++ b/src/fsharp/service/ServiceUntypedParse.fs @@ -596,10 +596,10 @@ module UntypedParseImpl = AstTraversal.Traverse(pos, parseTree, walker) // Given a cursor position here: - // f(x) . iden + // f(x) . ident // ^ // walk the AST to find the position here: - // f(x) . iden + // f(x) . ident // ^ // On success, return Some (thatPos, boolTrueIfCursorIsAfterTheDotButBeforeTheIdentifier) // If there's no dot, return None, so for example diff --git a/src/fsharp/service/service.fs b/src/fsharp/service/service.fs index 63e91bfe3c..a110d69c42 100755 --- a/src/fsharp/service/service.fs +++ b/src/fsharp/service/service.fs @@ -131,7 +131,7 @@ module Helpers = && FSharpProjectOptions.UseSameProject(o1,o2) module CompileHelpers = - let mkCompilationErorHandlers() = + let mkCompilationErrorHandlers() = let errors = ResizeArray<_>() let errorSink isError exn = @@ -164,7 +164,7 @@ module CompileHelpers = /// Compile using the given flags. Source files names are resolved via the FileSystem API. The output file must be given by a -o flag. let compileFromArgs (ctok, argv: string[], legacyReferenceResolver, tcImportsCapture, dynamicAssemblyCreator) = - let errors, errorLogger, loggerProvider = mkCompilationErorHandlers() + let errors, errorLogger, loggerProvider = mkCompilationErrorHandlers() let result = tryCompile errorLogger (fun exiter -> mainCompile (ctok, argv, legacyReferenceResolver, (*bannerAlreadyPrinted*)true, ReduceMemoryFlag.Yes, CopyFSharpCoreFlag.No, exiter, loggerProvider, tcImportsCapture, dynamicAssemblyCreator) ) @@ -173,7 +173,7 @@ module CompileHelpers = let compileFromAsts (ctok, legacyReferenceResolver, asts, assemblyName, outFile, dependencies, noframework, pdbFile, executable, tcImportsCapture, dynamicAssemblyCreator) = - let errors, errorLogger, loggerProvider = mkCompilationErorHandlers() + let errors, errorLogger, loggerProvider = mkCompilationErrorHandlers() let executable = defaultArg executable true let target = if executable then CompilerTarget.ConsoleExe else CompilerTarget.Dll @@ -205,7 +205,7 @@ module CompileHelpers = TypeDefs = ilxMainModule.TypeDefs.AsList |> List.filter (fun td -> not (isTypeNameForGlobalFunctions td.Name)) |> mkILTypeDefs Resources=mkILResources [] } - // The function used to resolve typees while emitting the code + // The function used to resolve types while emitting the code let assemblyResolver s = match tcImportsRef.Value.Value.TryFindExistingFullyQualifiedPathByExactAssemblyRef (ctok, s) with | Some res -> Some (Choice1Of2 res) @@ -385,7 +385,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC areSame=AreSameForChecking3, areSimilar=AreSubsumable3) - /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunck queued to Reactor). + /// Holds keys for files being currently checked. It's used to prevent checking same file in parallel (interleaving chunk queued to Reactor). let beingCheckedFileTable = ConcurrentDictionary (HashIdentity.FromFunctions @@ -687,7 +687,7 @@ type BackgroundCompiler(legacyReferenceResolver, projectCacheSize, keepAssemblyC tcErrors, reactorOps, keepAssemblyContents, - Option.get tcProj.LastestCcuSigForFile, + Option.get tcProj.LatestCcuSigForFile, tcProj.TcState.Ccu, tcProj.TcImports, tcProj.TcEnvAtEnd.AccessRights, @@ -1166,7 +1166,7 @@ type FSharpChecker(legacyReferenceResolver, // Apply command-line arguments and collect more source files if they are in the arguments let sourceFilesNew = ApplyCommandLineArgs(tcConfigBuilder, initialSourceFiles, argv) - FSharpParsingOptions.FromTcConfigBuidler(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics + FSharpParsingOptions.FromTcConfigBuilder(tcConfigBuilder, Array.ofList sourceFilesNew, isInteractive), errorScope.Diagnostics member ic.GetParsingOptionsFromCommandLineArgs(argv, ?isInteractive: bool) = ic.GetParsingOptionsFromCommandLineArgs([], argv, ?isInteractive=isInteractive) diff --git a/src/fsharp/symbols/Exprs.fs b/src/fsharp/symbols/Exprs.fs index 7941a6be57..16ada4ec57 100644 --- a/src/fsharp/symbols/Exprs.fs +++ b/src/fsharp/symbols/Exprs.fs @@ -339,11 +339,11 @@ module FSharpExprConvert = and ConvExpr cenv env expr = Mk2 cenv expr (ConvExprPrim cenv env expr) - and ConvExprLinear cenv env expr contf = - ConvExprPrimLinear cenv env expr (fun exprR -> contf (Mk2 cenv expr exprR)) + and ConvExprLinear cenv env expr contF = + ConvExprPrimLinear cenv env expr (fun exprR -> contF (Mk2 cenv expr exprR)) // Tail recursive function to process the subset of expressions considered "linear" - and ConvExprPrimLinear cenv env expr contf = + and ConvExprPrimLinear cenv env expr contF = match expr with // Large lists @@ -352,15 +352,15 @@ module FSharpExprConvert = let typR = ConvType cenv (mkAppTy ucref.TyconRef tyargs) let e1R = ConvExpr cenv env e1 // tail recursive - ConvExprLinear cenv env e2 (contf << (fun e2R -> E.NewUnionCase(typR, mkR, [e1R; e2R]) )) + ConvExprLinear cenv env e2 (contF << (fun e2R -> E.NewUnionCase(typR, mkR, [e1R; e2R]) )) // Large sequences of let bindings | Expr.Let (bind, body, _, _) -> match ConvLetBind cenv env bind with - | None, env -> ConvExprPrimLinear cenv env body contf + | None, env -> ConvExprPrimLinear cenv env body contF | Some bindR, env -> // tail recursive - ConvExprLinear cenv env body (contf << (fun bodyR -> E.Let(bindR, bodyR))) + ConvExprLinear cenv env body (contF << (fun bodyR -> E.Let(bindR, bodyR))) // Remove initialization checks // Remove static initialization counter updates @@ -372,23 +372,23 @@ module FSharpExprConvert = | Expr.Sequential (ObjectInitializationCheck cenv.g, x1, NormalSeq, _, _) | Expr.Sequential (StaticInitializationCount, x1, NormalSeq, _, _) | Expr.Sequential (StaticInitializationCheck, x1, NormalSeq, _, _) -> - ConvExprPrim cenv env x1 |> contf + ConvExprPrim cenv env x1 |> contF // Large sequences of sequential code | Expr.Sequential (e1, e2, NormalSeq, _, _) -> let e1R = ConvExpr cenv env e1 // tail recursive - ConvExprLinear cenv env e2 (contf << (fun e2R -> E.Sequential(e1R, e2R))) + ConvExprLinear cenv env e2 (contF << (fun e2R -> E.Sequential(e1R, e2R))) | Expr.Sequential (x0, x1, ThenDoSeq, _, _) -> E.Sequential(ConvExpr cenv env x0, ConvExpr cenv env x1) | ModuleValueOrMemberUse cenv.g (vref, vFlags, _f, _fty, tyargs, curriedArgs) when (nonNil tyargs || nonNil curriedArgs) && vref.IsMemberOrModuleBinding -> - ConvModuleValueOrMemberUseLinear cenv env (expr, vref, vFlags, tyargs, curriedArgs) contf + ConvModuleValueOrMemberUseLinear cenv env (expr, vref, vFlags, tyargs, curriedArgs) contF | Expr.Match (_spBind, m, dtree, tgs, _, retTy) -> let dtreeR = ConvDecisionTree cenv env retTy dtree m // tailcall - ConvTargetsLinear cenv env (List.ofArray tgs) (contf << fun (targetsR: _ list) -> + ConvTargetsLinear cenv env (List.ofArray tgs) (contF << fun (targetsR: _ list) -> let (|E|) (x: FSharpExpr) = x.E // If the match is really an "if-then-else" then return it as such. @@ -397,11 +397,11 @@ module FSharpExprConvert = | _ -> E.DecisionTree(dtreeR, targetsR)) | _ -> - ConvExprPrim cenv env expr |> contf + ConvExprPrim cenv env expr |> contF /// A nasty function copied from creflect.fs. Made nastier by taking a continuation to process the /// arguments to the call in a tail-recursive fashion. - and ConvModuleValueOrMemberUseLinear (cenv: SymbolEnv) env (expr: Expr, vref, vFlags, tyargs, curriedArgs) contf = + and ConvModuleValueOrMemberUseLinear (cenv: SymbolEnv) env (expr: Expr, vref, vFlags, tyargs, curriedArgs) contF = let m = expr.Range let (numEnclTypeArgs, _, isNewObj, _valUseFlags, _isSelfInit, takesInstanceArg, _isPropGet, _isPropSet) = @@ -444,7 +444,7 @@ module FSharpExprConvert = let expr, exprty = AdjustValForExpectedArity cenv.g m vref vFlags topValInfo let splitCallExpr = MakeApplicationAndBetaReduce cenv.g (expr, exprty, [tyargs], curriedArgs, m) // tailcall - ConvExprPrimLinear cenv env splitCallExpr contf + ConvExprPrimLinear cenv env splitCallExpr contF else let curriedArgs, laterArgs = List.splitAt curriedArgInfos.Length curriedArgs @@ -459,8 +459,8 @@ module FSharpExprConvert = let contf2 = match laterArgs with - | [] -> contf - | _ -> (fun subCallR -> (subCallR, laterArgs) ||> List.fold (fun fR arg -> E.Application (Mk2 cenv arg fR, [], [ConvExpr cenv env arg])) |> contf) + | [] -> contF + | _ -> (fun subCallR -> (subCallR, laterArgs) ||> List.fold (fun fR arg -> E.Application (Mk2 cenv arg fR, [], [ConvExpr cenv env arg])) |> contF) if isMember then let callArgs = (objArgs :: untupledCurriedArgs) |> List.concat @@ -827,7 +827,7 @@ module FSharpExprConvert = let typR = ConvType cenv (mkAppTy tycr tyargs) E.UnionCaseTag(ConvExpr cenv env arg1, typR) - | TOp.TraitCall (TTrait(tys, nm, memFlags, argtys, _rty, _colution)), _, _ -> + | TOp.TraitCall (TTrait(tys, nm, memFlags, argtys, _rty, _solution)), _, _ -> let tysR = ConvTypes cenv tys let tyargsR = ConvTypes cenv tyargs let argtysR = ConvTypes cenv argtys @@ -849,7 +849,7 @@ module FSharpExprConvert = // 'let v = isinst e in .... if nonnull v then ...v .... ' // construct arising out the compilation of pattern matching. We decode these back to the form // 'if istype e then ...unbox e .... ' - // It's bit annoying that pattern matching does this tranformation. Like all premature optimization we pay a + // It's bit annoying that pattern matching does this transformation. Like all premature optimization we pay a // cost here to undo it. | Expr.Op (TOp.ILAsm ([ I_isinst _ ], _), [ty], [e], _) -> None, env.BindIsInstVal bind.Var (ty, e) @@ -951,7 +951,7 @@ module FSharpExprConvert = else let valR = ConvExpr cenv env callArgs.Head E.ValueSet (m, valR) - | _ -> failwith "Failed to resolve module value unambigously" + | _ -> failwith "Failed to resolve module value unambiguously" else failwith "Failed to resolve module member" | _ -> @@ -1077,7 +1077,7 @@ module FSharpExprConvert = with e -> failwithf "An IL call to '%s' could not be resolved: %s" (ilMethRef.ToString()) e.Message - and ConvObjectModelCallLinear cenv env (isNewObj, v: FSharpMemberOrFunctionOrValue, enclTyArgs, methTyArgs, callArgs) contf = + and ConvObjectModelCallLinear cenv env (isNewObj, v: FSharpMemberOrFunctionOrValue, enclTyArgs, methTyArgs, callArgs) contF = let enclTyArgsR = ConvTypes cenv enclTyArgs let methTyArgsR = ConvTypes cenv methTyArgs let obj, callArgs = @@ -1089,7 +1089,7 @@ module FSharpExprConvert = None, callArgs let objR = Option.map (ConvLValueExpr cenv env) obj // tailcall - ConvExprsLinear cenv env callArgs (contf << fun callArgsR -> + ConvExprsLinear cenv env callArgs (contF << fun callArgsR -> if isNewObj then E.NewObject(v, enclTyArgsR, callArgsR) else @@ -1098,21 +1098,21 @@ module FSharpExprConvert = and ConvExprs cenv env args = List.map (ConvExpr cenv env) args - // Process a list of expressions in a tail-recursive way. Identical to "ConvExprs" but the result is eventually passed to contf. - and ConvExprsLinear cenv env args contf = + // Process a list of expressions in a tail-recursive way. Identical to "ConvExprs" but the result is eventually passed to contF. + and ConvExprsLinear cenv env args contF = match args with - | [] -> contf [] - | [arg] -> ConvExprLinear cenv env arg (fun argR -> contf [argR]) - | arg :: rest -> ConvExprLinear cenv env arg (fun argR -> ConvExprsLinear cenv env rest (fun restR -> contf (argR :: restR))) + | [] -> contF [] + | [arg] -> ConvExprLinear cenv env arg (fun argR -> contF [argR]) + | arg :: rest -> ConvExprLinear cenv env arg (fun argR -> ConvExprsLinear cenv env rest (fun restR -> contF (argR :: restR))) - and ConvTargetsLinear cenv env tgs contf = + and ConvTargetsLinear cenv env tgs contF = match tgs with - | [] -> contf [] + | [] -> contF [] | TTarget(vars, rhs, _) :: rest -> let varsR = (List.rev vars) |> List.map (ConvVal cenv) ConvExprLinear cenv env rhs (fun targetR -> ConvTargetsLinear cenv env rest (fun restR -> - contf ((varsR, targetR) :: restR))) + contF ((varsR, targetR) :: restR))) and ConvValRef cenv env m (vref: ValRef) = let v = vref.Deref diff --git a/src/fsharp/symbols/Exprs.fsi b/src/fsharp/symbols/Exprs.fsi index fd5d88c022..96c12024cc 100644 --- a/src/fsharp/symbols/Exprs.fsi +++ b/src/fsharp/symbols/Exprs.fsi @@ -89,7 +89,7 @@ module public BasicPatterns = /// Matches expressions which are type abstractions val (|TypeLambda|_|) : FSharpExpr -> (FSharpGenericParameter list * FSharpExpr) option - /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess pasing control and values to one of the targets. + /// Matches expressions with a decision expression, each branch of which ends in DecisionTreeSuccess passing control and values to one of the targets. val (|DecisionTree|_|) : FSharpExpr -> (FSharpExpr * (FSharpMemberOrFunctionOrValue list * FSharpExpr) list) option /// Special expressions at the end of a conditional decision structure in the decision expression node of a DecisionTree . diff --git a/src/fsharp/symbols/SymbolHelpers.fs b/src/fsharp/symbols/SymbolHelpers.fs index b1c46d9bd7..cf87b0b8f7 100644 --- a/src/fsharp/symbols/SymbolHelpers.fs +++ b/src/fsharp/symbols/SymbolHelpers.fs @@ -117,7 +117,7 @@ type ErrorScope() = /// may hit internal compiler failures. /// /// In some calling cases, we get a chance to report the error as part of user text. For example - /// if there is a "msising assembly" error while formatting the text of the description of an + /// if there is a "missing assembly" error while formatting the text of the description of an /// autocomplete, then the error message is shown in replacement of the text (rather than crashing Visual /// Studio, or swallowing the exception completely) static member Protect<'a> (m: range) (f: unit->'a) (err: string->'a): 'a = @@ -212,7 +212,7 @@ type FSharpXmlDoc = type FSharpToolTipElementData<'T> = { MainDescription: 'T XmlDoc: FSharpXmlDoc - /// typar insantiation text, to go after xml + /// typar instantiation text, to go after xml TypeMapping: 'T list Remarks: 'T option ParamName : string option } @@ -762,7 +762,7 @@ module internal SymbolHelpers = | Item.Property(_, pi1s), Item.Property(_, pi2s) -> List.zip pi1s pi2s |> List.forall(fun (pi1, pi2) -> PropInfo.PropInfosUseIdenticalDefinitions pi1 pi2) | Item.Event evt1, Item.Event evt2 -> - EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 + EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | Item.AnonRecdField(anon1, _, i1, _), Item.AnonRecdField(anon2, _, i2, _) -> Tastops.anonInfoEquiv anon1 anon2 && i1 = i2 | Item.CtorGroup(_, meths1), Item.CtorGroup(_, meths2) -> @@ -1301,7 +1301,7 @@ module internal SymbolHelpers = #endif - /// Get the "F1 Keyword" associated with an item, for looking up documentatio help indexes on the web + /// Get the "F1 Keyword" associated with an item, for looking up documentation help indexes on the web let rec GetF1Keyword (g: TcGlobals) item = let getKeywordForMethInfo (minfo : MethInfo) = diff --git a/src/fsharp/symbols/SymbolHelpers.fsi b/src/fsharp/symbols/SymbolHelpers.fsi index 984654c461..e6ece6fa2c 100755 --- a/src/fsharp/symbols/SymbolHelpers.fsi +++ b/src/fsharp/symbols/SymbolHelpers.fsi @@ -64,7 +64,7 @@ type public Layout = Internal.Utilities.StructuredFormat.Layout type public FSharpToolTipElementData<'T> = { MainDescription: 'T XmlDoc: FSharpXmlDoc - /// typar insantiation text, to go after xml + /// typar instantiation text, to go after xml TypeMapping: 'T list /// Extra text, goes at the end Remarks: 'T option diff --git a/src/fsharp/symbols/Symbols.fs b/src/fsharp/symbols/Symbols.fs index fcfe2c085f..add09769d6 100755 --- a/src/fsharp/symbols/Symbols.fs +++ b/src/fsharp/symbols/Symbols.fs @@ -1954,7 +1954,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = // Note, returning "public" is wrong for IL members that are private match d with | E e -> - // For IL events, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL events, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match e with | ILEvent ileinfo -> @@ -1965,7 +1965,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = FSharpAccessibility access | P p -> - // For IL properties, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL properties, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match p with | ILProp ilpinfo -> @@ -1977,13 +1977,13 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = | M m | C m -> - // For IL methods, we get an approximate accessiblity that at least reports "internal" as "internal" and "private" as "private" + // For IL methods, we get an approximate accessibility that at least reports "internal" as "internal" and "private" as "private" let access = match m with | ILMeth (_, x, _) -> getApproxFSharpAccessibilityOfMember x.DeclaringTyconRef x.RawMetadata.Access | _ -> taccessPublic - FSharpAccessibility(access, isProtected=m.IsProtectedAccessiblity) + FSharpAccessibility(access, isProtected=m.IsProtectedAccessibility) | V v -> FSharpAccessibility(v.Accessibility) @@ -2010,7 +2010,7 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) = match other with | :? FSharpMemberOrFunctionOrValue as other -> match d, other.Data with - | E evt1, E evt2 -> EventInfo.EventInfosUseIdenticalDefintions evt1 evt2 + | E evt1, E evt2 -> EventInfo.EventInfosUseIdenticalDefinitions evt1 evt2 | P p1, P p2 -> PropInfo.PropInfosUseIdenticalDefinitions p1 p2 | M m1, M m2 | C m1, C m2 -> MethInfo.MethInfosUseIdenticalDefinitions m1 m2 diff --git a/src/fsharp/symbols/Symbols.fsi b/src/fsharp/symbols/Symbols.fsi index 60c3cecedd..19df3cd26a 100644 --- a/src/fsharp/symbols/Symbols.fsi +++ b/src/fsharp/symbols/Symbols.fsi @@ -87,7 +87,7 @@ type [] public FSharpSymbol = /// Return true if two symbols are effectively the same when referred to in F# source code text. /// This sees through signatures (a symbol in a signature will be considered effectively the same as - /// the matching symbol in an implementation). In addition, other equivalances are applied + /// the matching symbol in an implementation). In addition, other equivalences are applied /// when the same F# source text implies the same declaration name - for example, constructors /// are considered to be effectively the same symbol as the corresponding type definition. /// diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs index 6e063cd831..a122bfe146 100644 --- a/src/fsharp/tast.fs +++ b/src/fsharp/tast.fs @@ -600,7 +600,7 @@ type EntityOptionalData = /// Indicates how visible is the entity is. // MUTABILITY: only for unpickle linkage - mutable entity_accessiblity: Accessibility + mutable entity_accessibility: Accessibility /// Field used when the 'tycon' is really an exception definition // @@ -678,7 +678,7 @@ and /// Represents a type definition, exception definition, module definition or entity_xmldocsig = "" entity_tycon_abbrev = None entity_tycon_repr_accessibility = TAccess [] - entity_accessiblity = TAccess [] + entity_accessibility = TAccess [] entity_exn_info = TExnNone } /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException @@ -884,7 +884,7 @@ and /// Represents a type definition, exception definition, module definition or /// Get the value representing the accessibility of an F# type definition or module. member x.Accessibility = match x.entity_opt_data with - | Some optData -> optData.entity_accessiblity + | Some optData -> optData.entity_accessibility | _ -> TAccess [] /// Indicates the type prefers the "tycon" syntax for display etc. @@ -1049,7 +1049,7 @@ and /// Represents a type definition, exception definition, module definition or entity_xmldocsig = tg.entity_xmldocsig entity_tycon_abbrev = tg.entity_tycon_abbrev entity_tycon_repr_accessibility = tg.entity_tycon_repr_accessibility - entity_accessiblity = tg.entity_accessiblity + entity_accessibility = tg.entity_accessibility entity_exn_info = tg.entity_exn_info } | None -> () @@ -1235,8 +1235,8 @@ and /// Represents a type definition, exception definition, module definition or let rec top racc p = match p with | [] -> ILTypeRef.Create(sref, [], textOfPath (List.rev (item :: racc))) - | (h, istype) :: t -> - match istype with + | (h, isType) :: t -> + match isType with | FSharpModuleWithSuffix | ModuleOrType -> let outerTypeName = (textOfPath (List.rev (h :: racc))) ILTypeRef.Create(sref, (outerTypeName :: List.map (fun (nm, _) -> nm) t), item) @@ -1910,7 +1910,7 @@ and [] cacheOptRef tyconsByAccessNamesCache (fun () -> LayeredMultiMap.Empty.AddAndMarkAsCollapsible (mtyp.TypeAndExceptionDefinitions |> List.toArray |> Array.collect (fun (tc: Tycon) -> KeyTyconByAccessNames tc.LogicalName tc))) - // REVIEW: we can remove this lookup and use AllEntitiedByMangledName instead? + // REVIEW: we can remove this lookup and use AllEntitiesByMangledName instead? member mtyp.TypesByMangledName = let addTyconByMangledName (x: Tycon) tab = NameMap.add x.LogicalName x tab cacheOptRef tyconsByMangledNameCache (fun () -> @@ -2090,7 +2090,7 @@ and Construct = entity_opt_data = match kind, access with | TyparKind.Type, TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_accessiblity = access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_accessibility = access } } #endif static member NewModuleOrNamespace cpath access (id: Ident) xml attribs mtype = @@ -2112,7 +2112,7 @@ and Construct = entity_opt_data = match xml, access with | XmlDoc [||], TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = xml; entity_tycon_repr_accessibility = access; entity_accessiblity = access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = xml; entity_tycon_repr_accessibility = access; entity_accessibility = access } } and [] @@ -2398,7 +2398,7 @@ and [] TraitConstraintInfo = - /// TTrait(tys, nm, memFlags, argtys, rty, colution) + /// TTrait(tys, nm, memFlags, argtys, rty, solution) /// /// Indicates the signature of a member constraint. Contains a mutable solution cell /// to store the inferred solution of the constraint. @@ -5733,7 +5733,7 @@ let NewExn cpath (id: Ident) access repr attribs doc = entity_opt_data = match doc, access, repr with | XmlDoc [||], TAccess [], TExnNone -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = doc; entity_accessiblity = access; entity_tycon_repr_accessibility = access; entity_exn_info = repr } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_xmldoc = doc; entity_accessibility = access; entity_tycon_repr_accessibility = access; entity_exn_info = repr } } /// Create a new TAST RecdField node for an F# class, struct or record field let NewRecdField stat konst id nameGenerated ty isMutable isVolatile pattribs fattribs docOption access secret = @@ -5771,7 +5771,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre entity_opt_data = match kind, docOption, reprAccess, access with | TyparKind.Type, XmlDoc [||], TAccess [], TAccess [] -> None - | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = docOption; entity_tycon_repr_accessibility = reprAccess; entity_accessiblity=access } } + | _ -> Some { Entity.NewEmptyEntityOptData() with entity_kind = kind; entity_xmldoc = docOption; entity_tycon_repr_accessibility = reprAccess; entity_accessibility=access } } let NewILTycon nlpath (nm, m) tps (scoref: ILScopeRef, enc, tdef: ILTypeDef) mtyp = @@ -5871,7 +5871,7 @@ let CombineCcuContentFragments m l = let entities = [ for e1 in mty1.AllEntities do match tab2.TryGetValue e1.LogicalName with - | true, e2 -> yield CombineEntites path e1 e2 + | true, e2 -> yield CombineEntities path e1 e2 | _ -> yield e1 for e2 in mty2.AllEntities do match tab1.TryGetValue e2.LogicalName with @@ -5888,7 +5888,7 @@ let CombineCcuContentFragments m l = | _-> error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path), m)) - and CombineEntites path (entity1: Entity) (entity2: Entity) = + and CombineEntities path (entity1: Entity) (entity2: Entity) = match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with | true, true -> diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs index 95aa5c5a31..097b8d92e6 100755 --- a/src/utils/CompilerLocationUtils.fs +++ b/src/utils/CompilerLocationUtils.fs @@ -124,7 +124,7 @@ module internal FSharpEnvironment = let tryRegKey(subKey:string) = - //if we are runing on mono simply return None + //if we are running on mono simply return None // GetDefaultRegistryStringValueViaDotNet will result in an access denied by default, // and Get32BitRegistryStringValueViaPInvoke will fail due to Advapi32.dll not existing if runningOnMono then None else @@ -188,7 +188,7 @@ module internal FSharpEnvironment = // Check for an app.config setting to redirect the default compiler location // Like fsharp-compiler-location try - // FSharp.Compiler support setting an appkey for compiler location. I've never seen this used. + // FSharp.Compiler support setting an appKey for compiler location. I've never seen this used. let result = tryAppConfig "fsharp-compiler-location" match result with | Some _ -> result @@ -210,10 +210,10 @@ module internal FSharpEnvironment = None - // Apply the given function to the registry entry corresponding to the subkey. + // Apply the given function to the registry entry corresponding to the subKey. // The reg key is disposed at the end of the scope. - let useKey subkey f = - let key = Registry.LocalMachine.OpenSubKey subkey + let useKey subKey f = + let key = Registry.LocalMachine.OpenSubKey subKey try f key finally match key with @@ -221,12 +221,12 @@ module internal FSharpEnvironment = | _ -> key.Dispose() // Check if the framework version 4.5 or above is installed at the given key entry - let IsNetFx45OrAboveInstalledAt subkey = + let IsNetFx45OrAboveInstalledAt subKey = try - useKey subkey (fun regkey -> - match regkey with + useKey subKey (fun regKey -> + match regKey with | null -> false - | _ -> regkey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 + | _ -> regKey.GetValue("Release", 0) :?> int |> (fun s -> s >= 0x50000)) // 0x50000 implies 4.5.0 with _ -> false // Check if the framework version 4.5 or above is installed diff --git a/src/utils/HashMultiMap.fs b/src/utils/HashMultiMap.fs index 7f571c232d..e3765ced86 100755 --- a/src/utils/HashMultiMap.fs +++ b/src/utils/HashMultiMap.fs @@ -9,16 +9,16 @@ open Microsoft.FSharp.Collections // Each entry in the HashMultiMap dictionary has at least one entry. Under normal usage each entry has _only_ // one entry. So use two hash tables: one for the main entries and one for the overflow. [] -type internal HashMultiMap<'Key,'Value>(n: int, hasheq: IEqualityComparer<'Key>) = +type internal HashMultiMap<'Key,'Value>(n: int, hashEq: IEqualityComparer<'Key>) = - let firstEntries = Dictionary<_,_>(n,hasheq) + let firstEntries = Dictionary<_,_>(n,hashEq) - let rest = Dictionary<_,_>(3,hasheq) + let rest = Dictionary<_,_>(3,hashEq) - new (hasheq : IEqualityComparer<'Key>) = HashMultiMap<'Key,'Value>(11, hasheq) + new (hashEq : IEqualityComparer<'Key>) = HashMultiMap<'Key,'Value>(11, hashEq) - new (seq : seq<'Key * 'Value>, hasheq : IEqualityComparer<'Key>) as x = - new HashMultiMap<'Key,'Value>(11, hasheq) + new (seq : seq<'Key * 'Value>, hashEq : IEqualityComparer<'Key>) as x = + new HashMultiMap<'Key,'Value>(11, hashEq) then seq |> Seq.iter (fun (k,v) -> x.Add(k,v)) member x.GetRest(k) = diff --git a/src/utils/prim-lexing.fsi b/src/utils/prim-lexing.fsi index bf9eb3171c..b0579d71e2 100755 --- a/src/utils/prim-lexing.fsi +++ b/src/utils/prim-lexing.fsi @@ -32,7 +32,7 @@ module SourceText = // // NOTE: the code in this file is a drop-in replacement runtime for Lexing.fsi from the FsLexYacc repository // and is referenced by generated code for the three FsLex generated lexers in the F# compiler. -// The underlying table format intepreted must precisely match the format generated by FsLex. +// The underlying table format interpreted must precisely match the format generated by FsLex. namespace Internal.Utilities.Text.Lexing open System.Collections.Generic diff --git a/src/utils/prim-parsing.fs b/src/utils/prim-parsing.fs index 9ce01bff90..c247161e9c 100755 --- a/src/utils/prim-parsing.fs +++ b/src/utils/prim-parsing.fs @@ -341,7 +341,7 @@ module internal Implementation = if errorSuppressionCountDown > 0 then errorSuppressionCountDown <- errorSuppressionCountDown - 1 #if DEBUG - if Flags.debug then Console.WriteLine("shifting, reduced errorRecoverylevel to {0}\n", errorSuppressionCountDown) + if Flags.debug then Console.WriteLine("shifting, reduced errorRecoveryLevel to {0}\n", errorSuppressionCountDown) #endif let nextState = actionValue action if not haveLookahead then failwith "shift on end of input!" From 7a39de20fb1a3b60fca87f79b8907e7b3b86a638 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 03:10:18 +0300 Subject: [PATCH 135/146] Fix member declaration ranges (#7676) * Fix member declaration ranges * Fix member declaration ranges * Update baseline * Update baseline --- src/fsharp/pars.fsy | 113 +++++++++------- tests/service/Common.fs | 8 +- tests/service/ServiceUntypedParseTests.fs | 158 +++++++++++++++++++--- tests/service/StructureTests.fs | 8 +- 4 files changed, 211 insertions(+), 76 deletions(-) diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy index 64011e2c40..8a4988935c 100644 --- a/src/fsharp/pars.fsy +++ b/src/fsharp/pars.fsy @@ -1623,21 +1623,23 @@ classDefnMemberGetSetElement: /* The core of a member definition */ memberCore: /* Methods and simple getter properties */ - | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSeqExprBlock - { let mRhs = $5.Range - let mWhole = unionRanges (rhs2 parseState 3 4) mRhs - let optReturnType = $3 - let bindingBuilder,mBindLhs = $2 - (fun vis memFlagsBuilder attrs -> - [ SynMemberDefn.Member (bindingBuilder (vis,$1,false,mBindLhs,NoSequencePointAtInvisibleBinding,optReturnType,$5,mRhs,[],attrs,Some(memFlagsBuilder MemberKind.Member)),unionRanges mWhole mBindLhs) ]) } + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints EQUALS typedSeqExprBlock + { let mRhs = $5.Range + let optReturnType = $3 + let bindingBuilder, mBindLhs = $2 + (fun vis memFlagsBuilder attrs rangeStart -> + let memberFlags = Some (memFlagsBuilder MemberKind.Member) + let binding = bindingBuilder (vis, $1, false, mBindLhs, NoSequencePointAtInvisibleBinding, optReturnType, $5, mRhs, [], attrs, memberFlags) + let memberRange = unionRanges rangeStart mRhs + [ SynMemberDefn.Member (binding, memberRange) ]) } /* Properties with explicit get/set, also indexer properties */ - | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet + | opt_inline bindingPattern opt_topReturnTypeWithTypeConstraints classDefnMemberGetSet { let mWhole = (rhs parseState 2, $4) ||> unionRangeWithListBy (fun (_,_,_,_,_,m2) -> m2) - let propertyNameBindingBuilder,_ = $2 + let propertyNameBindingBuilder, _ = $2 let optPropertyType = $3 let isMutable = false - (fun visNoLongerUsed memFlagsBuilder attrs -> + (fun visNoLongerUsed memFlagsBuilder attrs rangeStart -> let hasGet = ref false let hasSet = ref false @@ -1665,21 +1667,21 @@ memberCore: | SynPat.Attrib (p,_,_) -> go p | _ -> raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidDeclarationSyntax()) go pv - if getset = "get" then ( + if getset = "get" then if !hasGet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasGet := true Some MemberKind.PropertyGet - ) else if getset = "set" then ( + else if getset = "set" then if !hasSet then reportParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) None else hasSet := true Some MemberKind.PropertySet - ) else + else raiseParseErrorAt mBindLhs (FSComp.SR.parsGetAndOrSetRequired()) match memberKind with @@ -1697,7 +1699,7 @@ memberCore: let optReturnType = match (memberKind, optReturnType) with - | MemberKind.PropertySet,_ -> optReturnType + | MemberKind.PropertySet, _ -> optReturnType | _, None -> optPropertyType | _ -> optReturnType @@ -1719,35 +1721,39 @@ memberCore: | _ -> SynInfo.unnamedTopArg match memberKind, valSynInfo, memFlags.IsInstance with - | MemberKind.PropertyGet,SynValInfo ([],_ret), false - | MemberKind.PropertyGet,SynValInfo ([_],_ret), true -> + | MemberKind.PropertyGet, SynValInfo ([], _ret), false + | MemberKind.PropertyGet, SynValInfo ([_], _ret), true -> raiseParseErrorAt mBindLhs (FSComp.SR.parsGetterMustHaveAtLeastOneArgument()) - | MemberKind.PropertyGet,SynValInfo (thisArg :: indexOrUnitArgs :: rest,ret), true -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument()) - SynValInfo ([thisArg; indexOrUnitArgs],ret) + | MemberKind.PropertyGet, SynValInfo (thisArg :: indexOrUnitArgs :: rest, ret), true -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + SynValInfo ([thisArg; indexOrUnitArgs], ret) - | MemberKind.PropertyGet,SynValInfo (indexOrUnitArgs :: rest,ret), false -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument()) - SynValInfo ([indexOrUnitArgs],ret) + | MemberKind.PropertyGet, SynValInfo (indexOrUnitArgs :: rest,ret), false -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsGetterAtMostOneArgument ()) + SynValInfo ([indexOrUnitArgs], ret) - | MemberKind.PropertySet,SynValInfo ([thisArg;valueArg],ret), true -> - SynValInfo ([thisArg; adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo ([thisArg;valueArg], ret), true -> + SynValInfo ([thisArg; adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo (thisArg :: indexArgs :: valueArg :: rest,ret), true -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments()) - SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo (thisArg :: indexArgs :: valueArg :: rest, ret), true -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + SynValInfo ([thisArg; indexArgs @ adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo ([valueArg],ret), false -> - SynValInfo ([adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo ([valueArg], ret), false -> + SynValInfo ([adjustValueArg valueArg], ret) - | MemberKind.PropertySet,SynValInfo (indexArgs :: valueArg :: rest,ret), _ -> - if not rest.IsEmpty then reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments()) - SynValInfo ([indexArgs @ adjustValueArg valueArg],ret) + | MemberKind.PropertySet, SynValInfo (indexArgs :: valueArg :: rest,ret), _ -> + if not rest.IsEmpty then + reportParseErrorAt mBindLhs (FSComp.SR.parsSetterAtMostTwoArguments ()) + SynValInfo ([indexArgs @ adjustValueArg valueArg], ret) | _ -> // should be unreachable, cover just in case - raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty()) + raiseParseErrorAt mBindLhs (FSComp.SR.parsInvalidProperty ()) let valSynData = SynValData(Some(memFlags), valSynInfo,None) @@ -1808,7 +1814,9 @@ memberCore: go pv,PreXmlDoc.Merge doc2 doc - Some <| SynMemberDefn.Member (Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind),mWhole))) + let binding = Binding (vis, NormalBinding, isInline, isMutable, attrs, xmlDocAdjusted, valSynData, bindingPatAdjusted, rhsRetInfo, rhsExpr, mBindLhs, spBind) + let memberRange = unionRanges rangeStart mWhole + Some (SynMemberDefn.Member (binding, memberRange)))) } @@ -1827,10 +1835,12 @@ classDefnMember: { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) [mkClassMemberLocalBindings(true,Some (rhs parseState 3),$1,$2,$4)] } - | opt_attributes opt_declVisibility memberFlags memberCore opt_ODECLEND - { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) - let _,flags = $3 - $4 $2 flags $1 } + | opt_attributes opt_declVisibility memberFlags memberCore opt_ODECLEND + { let rangeStart = rhs parseState 1 + if Option.isSome $2 then + errorR (Error (FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier (), rhs parseState 2)) + let _, flags = $3 + $4 $2 flags $1 rangeStart } | opt_attributes opt_declVisibility interfaceMember appType opt_interfaceImplDefn { if not (isNil $1) then errorR(Error(FSComp.SR.parsAttributesAreNotPermittedOnInterfaceImplementations(),rhs parseState 1)) @@ -1869,9 +1879,11 @@ classDefnMember: $4 (Some (rhs parseState 3)) $1 true } | opt_attributes opt_declVisibility memberFlags autoPropsDefnDecl opt_ODECLEND - { if Option.isSome $2 then errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) - let isStatic, flags = $3 - $4 $1 isStatic flags } + { let rangeStart = rhs parseState 1 + if Option.isSome $2 then + errorR(Error(FSComp.SR.parsVisibilityDeclarationsShouldComePriorToIdentifier(),rhs parseState 2)) + let isStatic, flags = $3 + $4 $1 isStatic flags rangeStart } | opt_attributes opt_declVisibility NEW atomicPattern optAsSpec EQUALS typedSeqExprBlock opt_ODECLEND { let m = unionRanges (rhs2 parseState 3 6) $7.Range @@ -1903,12 +1915,13 @@ valDefnDecl: /* An auto-property definition in an object type definition */ autoPropsDefnDecl: | VAL opt_mutable opt_access ident opt_typ EQUALS typedSeqExprBlock classMemberSpfnGetSet - { let doc = grabXmlDoc(parseState,5) - let mValDecl = unionRanges (rhs parseState 1) $7.Range - let mGetSetOpt, getSet = $8 - if $2 then errorR(Error(FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet(),rhs parseState 3)) - (fun attribs isStatic flags -> - [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, doc, $3, $7, mGetSetOpt, mValDecl) ]) } + { let doc = grabXmlDoc(parseState, 5) + let mGetSetOpt, getSet = $8 + if $2 then + errorR (Error (FSComp.SR.parsMutableOnAutoPropertyShouldBeGetSet (), rhs parseState 3)) + (fun attribs isStatic flags rangeStart -> + let memberRange = unionRanges rangeStart $7.Range + [ SynMemberDefn.AutoProperty(attribs, isStatic, $4, $5, getSet, flags, doc, $3, $7, mGetSetOpt, memberRange) ]) } /* An optional type on an auto-property definition */ @@ -2022,10 +2035,12 @@ objectImplementationMembers: /* One member in an object expression or interface implementation */ objectImplementationMember: | opt_attributes memberOrOverride memberCore opt_ODECLEND - { $3 None OverrideMemberFlags $1 } + { let rangeStart = rhs parseState 1 + $3 None OverrideMemberFlags $1 rangeStart } | opt_attributes memberOrOverride autoPropsDefnDecl opt_ODECLEND - { $3 $1 false OverrideMemberFlags } + { let rangeStart = rhs parseState 1 + $3 $1 false OverrideMemberFlags rangeStart } | opt_attributes memberOrOverride error { [] } diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 6920e682af..946995e4c1 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -190,7 +190,6 @@ let parseAndCheckScript (file, input) = let parseSourceCode (name: string, code: string) = let location = Path.Combine(Path.GetTempPath(),"test"+string(hash (name, code))) try Directory.CreateDirectory(location) |> ignore with _ -> () - let projPath = Path.Combine(location, name + ".fsproj") let filePath = Path.Combine(location, name + ".fs") let dllPath = Path.Combine(location, name + ".dll") let args = mkProjectCommandLineArgs(dllPath, [filePath]) @@ -198,6 +197,13 @@ let parseSourceCode (name: string, code: string) = let parseResults = checker.ParseFile(filePath, FSharp.Compiler.Text.SourceText.ofString code, options) |> Async.RunSynchronously parseResults.ParseTree +open FSharp.Compiler.Ast + +let parseSourceCodeAndGetModule (source: string) = + match parseSourceCode ("test", source) with + | Some (ParsedInput.ImplFile (ParsedImplFileInput (_, _, _, _, _, [ moduleOrNamespace ], _))) -> moduleOrNamespace + | _ -> failwith "Could not get module decls" + /// Extract range info let tups (m:Range.range) = (m.StartLine, m.StartColumn), (m.EndLine, m.EndColumn) diff --git a/tests/service/ServiceUntypedParseTests.fs b/tests/service/ServiceUntypedParseTests.fs index ac4e156561..ecf91ee4ca 100644 --- a/tests/service/ServiceUntypedParseTests.fs +++ b/tests/service/ServiceUntypedParseTests.fs @@ -127,25 +127,139 @@ let foo6 = () [<>] let foo7 = () """ - match parseSourceCode ("test", source) with - | Some (ParsedInput.ImplFile (ParsedImplFileInput (_,_,_,_,_,[SynModuleOrNamespace (_,_,_,decls,_,_,_,_)],_))) -> - decls |> List.map (fun decl -> - match decl with - | SynModuleDecl.Let (_,[Binding(_,_,_,_,attributeLists,_,_,_,_,_,_,_)],_) -> - attributeLists |> List.map (fun list -> - let r = list.Range - - list.Attributes.Length, - ((r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn))) - - | _ -> failwith "Could not get binding") - |> shouldEqual - [ [ (1, ((2, 0), (2, 5))) ] - [ (1, ((5, 0), (5, 5))); (2, ((6, 0), (6, 7))) ] - [ (1, ((9, 0), (9, 5))); (2, ((9, 6), (9, 13))) ] - [ (1, ((12, 0), (13, 0))) ] - [ (1, ((15, 0), (15, 4))) ] - [ (0, ((18, 0), (18, 2))) ] - [ (0, ((21, 0), (21, 4))) ] ] - - | _ -> failwith "Could not get module decls" + let (SynModuleOrNamespace (_, _, _, decls, _, _, _, _)) = parseSourceCodeAndGetModule source + decls |> List.map (fun decl -> + match decl with + | SynModuleDecl.Let (_,[Binding(_,_,_,_,attributeLists,_,_,_,_,_,_,_)],_) -> + attributeLists |> List.map (fun list -> + let r = list.Range + + list.Attributes.Length, + ((r.StartLine, r.StartColumn), (r.EndLine, r.EndColumn))) + + | _ -> failwith "Could not get binding") + |> shouldEqual + [ [ (1, ((2, 0), (2, 5))) ] + [ (1, ((5, 0), (5, 5))); (2, ((6, 0), (6, 7))) ] + [ (1, ((9, 0), (9, 5))); (2, ((9, 6), (9, 13))) ] + [ (1, ((12, 0), (13, 0))) ] + [ (1, ((15, 0), (15, 4))) ] + [ (0, ((18, 0), (18, 2))) ] + [ (0, ((21, 0), (21, 4))) ] ] + + +module TypeMemberRanges = + + let getTypeMemberRange source = + let (SynModuleOrNamespace (_, _, _, decls, _, _, _, _)) = parseSourceCodeAndGetModule source + match decls with + | [ SynModuleDecl.Types ([ TypeDefn (_, SynTypeDefnRepr.ObjectModel (_, memberDecls, _), _, _) ], _) ] -> + memberDecls |> List.map (fun memberDecl -> + let range = memberDecl.Range + (range.StartLine, range.StartColumn), (range.EndLine, range.EndColumn)) + + | _ -> failwith "Could not get member" + + + [] + let ``Member range 01 - Simple``() = + let source = """ +type T = + member x.Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 23) ] + + + [] + let ``Member range 02 - Static``() = + let source = """ +type T = + static member Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 28) ] + + + [] + let ``Member range 03 - Attribute``() = + let source = """ +type T = + [] + static member Foo() = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (4, 28) ] + + + [] + let ``Member range 04 - Property``() = + let source = """ +type T = + member x.P = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 19) ] + + + [] + let ``Member range 05 - Setter only property``() = + let source = """ +type T = + member x.P with set (value) = v <- value +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 44) ] + + + [] + let ``Member range 06 - Read-write property``() = + let source = """ +type T = + member this.MyReadWriteProperty + with get () = x + and set (value) = x <- value +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (5, 36) + (3, 4), (5, 36) ] + + + [] + let ``Member range 07 - Auto property``() = + let source = """ +type T = + member val Property1 = "" +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 29) ] + + + [] + let ``Member range 08 - Auto property with setter``() = + let source = """ +type T = + member val Property1 = "" with get, set +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 29) ] + + + [] + let ``Member range 09 - Abstract slot``() = + let source = """ +type T = + abstract P: int + abstract M: unit -> unit +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 19) + (4, 4), (4, 28) ] + + [] + let ``Member range 10 - Val field``() = + let source = """ +type T = + val x: int +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 14) ] + + + [] + let ``Member range 11 - Ctor``() = + let source = """ +type T = + new (x:int) = () +""" + getTypeMemberRange source |> shouldEqual [ (3, 4), (3, 20) ] diff --git a/tests/service/StructureTests.fs b/tests/service/StructureTests.fs index e3f7b7fe9b..c3583fe5ab 100644 --- a/tests/service/StructureTests.fs +++ b/tests/service/StructureTests.fs @@ -106,7 +106,7 @@ type Color = => [ (2, 5, 9, 55), (2, 11, 9, 55) (3, 4, 5, 10), (3, 4, 5, 10) (7, 4, 9, 55), (7, 25, 9, 55) - (8, 15, 9, 55), (8, 27, 9, 55) + (8, 8, 9, 55), (8, 27, 9, 55) (8, 15, 9, 55), (8, 27, 9, 55) ] [] @@ -127,7 +127,7 @@ type Color = (3, 4, 4, 14), (3, 4, 4, 14) (3, 6, 4, 13), (3, 6, 4, 13) (8, 4, 10, 55), (8, 25, 10, 55) - (9, 15, 10, 55), (9, 27, 10, 55) + (9, 8, 10, 55), (9, 27, 10, 55) (9, 15, 10, 55), (9, 27, 10, 55) ] [] @@ -181,13 +181,13 @@ module MyModule = // 2 (7, 9, 15, 59), (7, 15, 15, 59) (8, 8, 11, 9), (8, 8, 11, 9) (13, 8, 15, 59), (13, 29, 15, 59) - (14, 19, 15, 59), (14, 31, 15, 59) + (14, 12, 15, 59), (14, 31, 15, 59) (14, 19, 15, 59), (14, 31, 15, 59) (17, 4, 27, 63), (17, 24, 27, 63) (19, 13, 27, 63), (19, 25, 27, 63) (20, 12, 23, 13), (20, 12, 23, 13) (25, 12, 27, 63), (25, 33, 27, 63) - (26, 23, 27, 63), (26, 35, 27, 63) + (26, 16, 27, 63), (26, 35, 27, 63) (26, 23, 27, 63), (26, 35, 27, 63) ] From 4ee6fec8195d19a7299a30fd337a44c29683dab3 Mon Sep 17 00:00:00 2001 From: Phillip Carter Date: Wed, 30 Oct 2019 17:31:31 -0700 Subject: [PATCH 136/146] Use framework Queue (#7709) --- src/fsharp/FSharp.Core/mailbox.fs | 45 ++----------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/src/fsharp/FSharp.Core/mailbox.fs b/src/fsharp/FSharp.Core/mailbox.fs index b5c91fe49e..b2bec12971 100644 --- a/src/fsharp/FSharp.Core/mailbox.fs +++ b/src/fsharp/FSharp.Core/mailbox.fs @@ -4,6 +4,7 @@ namespace Microsoft.FSharp.Control open System open System.Threading + open System.Collections.Generic open Microsoft.FSharp.Core open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators open Microsoft.FSharp.Control @@ -11,48 +12,6 @@ namespace Microsoft.FSharp.Control open Microsoft.FSharp.Control.AsyncPrimitives open Microsoft.FSharp.Collections - /// We use our own internal implementation of queues to avoid a dependency on System.dll - type Queue<'T>() = - - let mutable array = [| |] - let mutable head = 0 - let mutable size = 0 - let mutable tail = 0 - - let SetCapacity capacity = - let destinationArray = Array.zeroCreate capacity - if (size > 0) then - if (head < tail) then - Array.Copy(array, head, destinationArray, 0, size) - - else - Array.Copy(array, head, destinationArray, 0, array.Length - head) - Array.Copy(array, 0, destinationArray, array.Length - head, tail) - array <- destinationArray - head <- 0 - tail <- if (size = capacity) then 0 else size - - member x.Dequeue() = - if (size = 0) then - failwith "Dequeue" - let local = array.[head] - array.[head] <- Unchecked.defaultof<'T> - head <- (head + 1) % array.Length - size <- size - 1 - local - - member this.Enqueue item = - if (size = array.Length) then - let capacity = int ((int64 array.Length * 200L) / 100L) - let capacity = max capacity (array.Length + 4) - SetCapacity capacity - array.[tail] <- item - tail <- (tail + 1) % array.Length - size <- size + 1 - - member x.Count = size - - module AsyncHelpers = let awaitEither a1 a2 = @@ -93,7 +52,7 @@ namespace Microsoft.FSharp.Control [] type Mailbox<'Msg>(cancellationSupported: bool) = let mutable inboxStore = null - let mutable arrivals = new Queue<'Msg>() + let arrivals = Queue<'Msg>() let syncRoot = arrivals // Control elements indicating the state of the reader. When the reader is "blocked" at an From bd106f8627c1c41bf89f2faed710441be21b9e89 Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Thu, 31 Oct 2019 05:00:34 +0300 Subject: [PATCH 137/146] Type check: recover in Set expressions when left side value is not mutable (#7682) * Recover ValNoMutable and PropertyCannotBeSet errors * Recover FieldNotMutable error * Refactor tests * Refactor tests * Update baseline --- src/fsharp/MethodCalls.fs | 3 ++- src/fsharp/TypeChecker.fs | 28 +++++++++++++-------------- tests/service/Common.fs | 29 ++++++++++++++++++++++++++++ tests/service/EditorTests.fs | 37 ++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 15 deletions(-) diff --git a/src/fsharp/MethodCalls.fs b/src/fsharp/MethodCalls.fs index fdae67c6ad..37f031e782 100644 --- a/src/fsharp/MethodCalls.fs +++ b/src/fsharp/MethodCalls.fs @@ -1638,5 +1638,6 @@ let MethInfoChecks g amap isInstance tyargsOpt objArgs ad m (minfo: MethInfo) = exception FieldNotMutable of DisplayEnv * Tast.RecdFieldRef * range let CheckRecdFieldMutation m denv (rfinfo: RecdFieldInfo) = - if not rfinfo.RecdField.IsMutable then error (FieldNotMutable(denv, rfinfo.RecdFieldRef, m)) + if not rfinfo.RecdField.IsMutable then + errorR (FieldNotMutable (denv, rfinfo.RecdFieldRef, m)) diff --git a/src/fsharp/TypeChecker.fs b/src/fsharp/TypeChecker.fs index 4181cb846c..978949fd47 100644 --- a/src/fsharp/TypeChecker.fs +++ b/src/fsharp/TypeChecker.fs @@ -9362,7 +9362,8 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del if isByrefTy g vty then destByrefTy g vty else - if not vref.IsMutable then error (ValNotMutable(env.DisplayEnv, vref, mStmt)) + if not vref.IsMutable then + errorR (ValNotMutable (env.DisplayEnv, vref, mStmt)) vty // Always allow subsumption on assignment to fields let e2', tpenv = TcExprFlex cenv true false vty2 env tpenv e2 @@ -9415,15 +9416,15 @@ and TcItemThen cenv overallTy env tpenv (item, mItem, rest, afterResolution) del if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) - if isByrefMethReturnSetter then - // x.P <- ... byref setter - if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed - else - error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if not isByrefMethReturnSetter then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + // x.P <- ... byref setter + if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterResolution NormalValUse args ExprAtomicFlag.Atomic delayed else let args = if pinfo.IsIndexer then args else [] - if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if isNil meths then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) // Note: static calls never mutate a struct object argument TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed | _ -> @@ -9600,12 +9601,11 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela if meths.IsEmpty then let meths = pinfos |> GettersOfPropInfos let isByrefMethReturnSetter = meths |> List.exists (function (_,Some pinfo) -> isByrefTy cenv.g (pinfo.GetPropertyType(cenv.amap,mItem)) | _ -> false) - if isByrefMethReturnSetter then - // x.P <- ... byref setter - if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) - TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed - else - error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + if not isByrefMethReturnSetter then + errorR (Error (FSComp.SR.tcPropertyCannotBeSet1 nm, mItem)) + // x.P <- ... byref setter + if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable nm, mItem)) + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterResolution NormalValUse args atomicFlag delayed else let args = if pinfo.IsIndexer then args else [] let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) diff --git a/tests/service/Common.fs b/tests/service/Common.fs index 946995e4c1..163e70bb09 100644 --- a/tests/service/Common.fs +++ b/tests/service/Common.fs @@ -5,6 +5,7 @@ open System.IO open System.Collections.Generic open FSharp.Compiler open FSharp.Compiler.SourceCodeServices +open FsUnit #if NETCOREAPP2_0 let readRefs (folder : string) (projectFile: string) = @@ -304,6 +305,34 @@ let rec allSymbolsInEntities compGen (entities: IList) = yield! allSymbolsInEntities compGen e.NestedEntities ] +let getSymbolUses (source: string) = + let _, typeCheckResults = parseAndCheckScript("/home/user/Test.fsx", source) + typeCheckResults.GetAllUsesOfAllSymbolsInFile() |> Async.RunSynchronously + +let getSymbols (source: string) = + getSymbolUses source + |> Array.map (fun symbolUse -> symbolUse.Symbol) + + +let getSymbolName (symbol: FSharpSymbol) = + match symbol with + | :? FSharpMemberOrFunctionOrValue as mfv -> Some mfv.LogicalName + | :? FSharpEntity as entity -> Some entity.LogicalName + | :? FSharpGenericParameter as parameter -> Some parameter.Name + | :? FSharpParameter as parameter -> parameter.Name + | :? FSharpStaticParameter as parameter -> Some parameter.Name + | :? FSharpActivePatternCase as case -> Some case.Name + | :? FSharpUnionCase as case -> Some case.Name + | _ -> None + + +let assertContainsSymbolWithName name source = + getSymbols source + |> Array.choose getSymbolName + |> Array.contains name + |> shouldEqual true + + let coreLibAssemblyName = #if NETCOREAPP2_0 "System.Runtime" diff --git a/tests/service/EditorTests.fs b/tests/service/EditorTests.fs index 69b9e40764..7cf404fdf3 100644 --- a/tests/service/EditorTests.fs +++ b/tests/service/EditorTests.fs @@ -1319,3 +1319,40 @@ let ``FSharpField.IsNameGenerated`` () = "type U = Case of string * Item2: string * string * Name: string", ["Item1", true; "Item2", false; "Item3", true; "Name", false]] |> List.iter (fun (source, expected) -> checkFields source |> shouldEqual expected) + + +[] +let ``ValNoMutable recovery`` () = + let source = """ +let x = 1 +x <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source + + +[] +let ``PropertyCannotBeSet recovery`` () = + let source = """ +type T = + static member P = 1 + +T.P <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source + + +[] +let ``FieldNotMutable recovery`` () = + let source = """ +type R = + { F: int } + +{ F = 1 }.F <- + let y = 1 + y +""" + assertContainsSymbolWithName "y" source From 70ee86d4b228f79f9aa5560371ad096ee47e2fbc Mon Sep 17 00:00:00 2001 From: "Kevin Ransom (msft)" Date: Wed, 30 Oct 2019 19:19:01 -0700 Subject: [PATCH 138/146] Update DotNetFrameworkDependencies.fs --- src/fsharp/DotNetFrameworkDependencies.fs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fsharp/DotNetFrameworkDependencies.fs b/src/fsharp/DotNetFrameworkDependencies.fs index 2032063334..8c9c98c16d 100644 --- a/src/fsharp/DotNetFrameworkDependencies.fs +++ b/src/fsharp/DotNetFrameworkDependencies.fs @@ -6,7 +6,6 @@ module internal FSharp.Compiler.DotNetFrameworkDependencies open System open System.Collections.Generic - open System.Diagnostics open System.Globalization open System.IO open System.Reflection From a373a5c6b1c3d3aee52eb11e7e4c068841c71761 Mon Sep 17 00:00:00 2001 From: Gauthier Segay Date: Thu, 31 Oct 2019 18:17:47 +0100 Subject: [PATCH 139/146] Add tests/fsharp/readme.md (#6681) * init a basic readme.md for fsharp test suite * fix title and try to add link * case sensitive? * Update layout. * Update readme.md --- tests/fsharp/readme.md | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/fsharp/readme.md diff --git a/tests/fsharp/readme.md b/tests/fsharp/readme.md new file mode 100644 index 0000000000..c12bf5a5e4 --- /dev/null +++ b/tests/fsharp/readme.md @@ -0,0 +1,67 @@ +# F# Compiler Cross-Platform Test Suite + +## Layout + +The tests are NUNIT test cases.. They test a very wide range of compiler, interactive and FSharp.Core scenarios. + +The bulk of the test cases are enumerated in tests.fs, these are the old cambridge test suite. They build on a test-suite ported from windows batch files. They run the compiler and fsi as seperate processes, when built for the coreclr it runs the coreclr versions using dotnet.exe + +The framework and utilities can be found in test-framework.fs, single-test.fs, coreclr_utilities.fs. + +test cases look similar to: +```` + [] + let ``array-FSI_BASIC`` () = singleTestBuildAndRun "core/array" FSI_BASIC +```` +This test case builds and runs the test case in the folder core/array + +this #define is used to exclude from the build tests that run will not run correctly on the coreclr +__#if !FSHARP_SUITE_DRIVES_CORECLR_TESTS__ + +There are some older tests in this section that looks similar to: +```` + [] + let events () = + let cfg = testConfig "core/events" + fsc cfg "%s -a -o:test.dll -g" cfg.fsc_flags ["test.fs"] + peverify cfg "test.dll" + csc cfg """/r:"%s" /reference:test.dll /debug+""" cfg.FSCOREDLLPATH ["testcs.cs"] + peverify cfg "testcs.exe" + use testOkFile = fileguard cfg "test.ok" + fsi cfg "" ["test.fs"] + testOkFile.CheckExists() + exec cfg ("." ++ "testcs.exe") "" +```` +These tests build, compile, peverify and run fsi. + +Below the Compiler directory there is a set of tests built on the compiler service. They are nunit and instead of executing the compiler and fsi using files on disk the tests are built from memory. These tests use the CompilerAssert framework and look similar to: + +This test verifies that a warning is produces when a value is implicitly discarded. The line ````x = 20``` looks like an assignment but in F# is a test for equality it yields and discards the value false. +```` + [] + let ``Unused compare with immutable when assignment might be intended``() = + CompilerAssert.TypeCheckSingleError + """ +let x = 10 +let y = "hello" + +let changeX() = + x = 20 + y = "test" + """ + FSharpErrorSeverity.Warning + 20 + (6, 5, 6, 11) + "The result of this equality expression has type 'bool' and is implicitly discarded. Consider using 'let' to bind the result to a name, e.g. 'let result = expression'. If you intended to mutate a value, then mark the value 'mutable' and use the '<-' operator e.g. 'x <- expression'." +```` + + +## Workflow when adding or fixing tests + +When a test is run, .err/.vserr output files are created and compared to their matching .bsl files. + +When many tests fail due to a change being worked on, the [update.base.line.with.actuals.fsx](update.base.line.with.actuals.fsx) script helps updating the .bsl against the actuals. + +After editing the folder list, evaluating the script should replace the .bsl files with actual .err/.vserr, after which the same test is supposed to pass. + +Tests are organized under modules as functions bearing NUnit `[]` attribute and can be run from an IDE or the command line (see the [Test Guide](../../TESTGUIDE.md)). From a276fff066710715f42b4ee0144b390f8c1d54da Mon Sep 17 00:00:00 2001 From: TIHan Date: Fri, 1 Nov 2019 19:01:33 -0700 Subject: [PATCH 140/146] Use cache value if available early in a let binding. Stops from having to traverse entire expr. --- src/fsharp/TastOps.fs | 19 +++++++++++++------ src/fsharp/lib.fs | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/fsharp/TastOps.fs b/src/fsharp/TastOps.fs index 5ea0d49b52..94d0bcffae 100644 --- a/src/fsharp/TastOps.fs +++ b/src/fsharp/TastOps.fs @@ -4388,6 +4388,10 @@ let bindLhs opts (bind: Binding) fvs = boundLocalVal opts bind.Var fvs let freeVarsCacheCompute opts cache f = if opts.canCache then cached cache f else f() +let tryGetFreeVarsCacheValue opts cache = + if opts.canCache then tryGetCacheValue cache + else ValueNone + let rec accBindRhs opts (TBind(_, repr, _)) acc = accFreeInExpr opts repr acc and accFreeInSwitchCases opts csl dflt (acc: FreeVars) = @@ -4485,13 +4489,16 @@ and accFreeInExpr (opts: FreeVarOptions) x acc = and accFreeInExprLinear (opts: FreeVarOptions) x acc contf = // for nested let-bindings, we need to continue after the whole let-binding is processed match x with - | Expr.Let (bind, e, _, cache) -> - let contf = contf << (fun free -> - unionFreeVars (freeVarsCacheCompute opts cache (fun () -> bindLhs opts bind (accBindRhs opts bind free))) acc ) - accFreeInExprLinear opts e emptyFreeVars contf + | Expr.Let (bind, e, _, cache) -> + match tryGetFreeVarsCacheValue opts cache with + | ValueSome free -> contf (unionFreeVars free acc) + | _ -> + accFreeInExprLinear opts e emptyFreeVars (contf << (fun free -> + unionFreeVars (freeVarsCacheCompute opts cache (fun () -> bindLhs opts bind (accBindRhs opts bind free))) acc + )) | _ -> - // No longer linear expr - accFreeInExpr opts x acc |> contf + // No longer linear expr + contf (accFreeInExpr opts x acc) and accFreeInExprNonLinear opts x acc = match x with diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs index 8d5fa3f0af..7ed3521ca3 100755 --- a/src/fsharp/lib.fs +++ b/src/fsharp/lib.fs @@ -394,6 +394,10 @@ let inline cacheOptRef cache f = cache := Some res res +let inline tryGetCacheValue cache = + match box cache.cacheVal with + | null -> ValueNone + | _ -> ValueSome cache.cacheVal #if DUMPER type Dumper(x:obj) = From 1cf46f72e7ce5fce2481c0e732f69f10c8c47b51 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2019 15:18:09 -0800 Subject: [PATCH 141/146] [master] Update dependencies from dotnet/arcade (#7706) * Update dependencies from https://github.com/dotnet/arcade build 20191004.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19504.2 * Update dependencies from https://github.com/dotnet/arcade build 20191005.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19505.1 * Update dependencies from https://github.com/dotnet/arcade build 20191006.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19506.1 * Update dependencies from https://github.com/dotnet/arcade build 20191009.5 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19509.5 * Update dependencies from https://github.com/dotnet/arcade build 20191010.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19510.4 * Update dependencies from https://github.com/dotnet/arcade build 20191011.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19511.1 * Update dependencies from https://github.com/dotnet/arcade build 20191015.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19515.1 * Update dependencies from https://github.com/dotnet/arcade build 20191015.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19515.2 * Update dependencies from https://github.com/dotnet/arcade build 20191017.8 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19517.8 * Update dependencies from https://github.com/dotnet/arcade build 20191018.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19518.2 * Update dependencies from https://github.com/dotnet/arcade build 20191021.4 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19521.4 * Update dependencies from https://github.com/dotnet/arcade build 20191022.8 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19522.8 * Update dependencies from https://github.com/dotnet/arcade build 20191023.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19523.3 * Update dependencies from https://github.com/dotnet/arcade build 20191024.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19524.2 * Update dependencies from https://github.com/dotnet/arcade build 20191025.2 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19525.2 * Update dependencies from https://github.com/dotnet/arcade build 20191026.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19526.1 * Update dependencies from https://github.com/dotnet/arcade build 20191027.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19527.3 * Update dependencies from https://github.com/dotnet/arcade build 20191028.5 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19528.5 * Update dependencies from https://github.com/dotnet/arcade build 20191029.9 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19529.9 * Update dependencies from https://github.com/dotnet/arcade build 20191030.15 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19530.15 * Update dependencies from https://github.com/dotnet/arcade build 20191031.14 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19531.14 * Update dependencies from https://github.com/dotnet/arcade build 20191101.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19551.3 * Update dependencies from https://github.com/dotnet/arcade build 20191102.1 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19552.1 * Update dependencies from https://github.com/dotnet/arcade build 20191104.3 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19554.3 * work around dotnet/wpf#1718 by not embedding untracked sources * use arcade mechanism of populating package icons --- FSharpBuild.Directory.Build.props | 2 + eng/Version.Details.xml | 4 +- eng/common/PublishToSymbolServers.proj | 6 +- eng/common/SetupNugetSources.ps1 | 127 ++++++++++++++++ eng/common/SetupNugetSources.sh | 117 ++++++++++++++ eng/common/build.ps1 | 19 ++- eng/common/build.sh | 24 +-- eng/common/darc-init.ps1 | 9 +- eng/common/darc-init.sh | 24 ++- eng/common/dotnet-install.ps1 | 6 +- eng/common/dotnet-install.sh | 43 +++++- eng/common/post-build/post-build-utils.ps1 | 1 + eng/common/post-build/setup-maestro-vars.ps1 | 26 ---- eng/common/sdl/extract-artifact-packages.ps1 | 1 + eng/common/templates/job/job.yml | 2 +- ...ase.yml => netcore-3-tools-validation.yml} | 13 +- .../post-build/channels/netcore-3-tools.yml | 143 ++++++++++++++++++ .../post-build/channels/netcore-dev-31.yml | 17 ++- .../post-build/channels/netcore-dev-5.yml | 17 ++- .../channels/netcore-internal-30.yml | 6 +- .../channels/netcore-release-30.yml | 17 ++- .../channels/netcore-release-31.yml | 17 ++- .../channels/netcore-tools-latest.yml | 19 ++- .../channels/netcore-tools-validation.yml | 98 ++++++++++++ .../templates/post-build/common-variables.yml | 14 +- .../templates/post-build/post-build.yml | 21 ++- .../post-build/setup-maestro-vars.yml | 26 +++- eng/common/templates/steps/send-to-helix.yml | 3 + eng/common/tools.ps1 | 49 +++++- eng/common/tools.sh | 43 +++++- eng/targets/Settings.props | 5 + global.json | 2 +- .../FSharp.Core.nuget/icon.png => icon.png | Bin .../FSharp.Compiler.Private.Scripting.nuspec | 1 + .../FSharp.Core.nuget.csproj | 4 - 35 files changed, 816 insertions(+), 110 deletions(-) create mode 100644 eng/common/SetupNugetSources.ps1 create mode 100644 eng/common/SetupNugetSources.sh delete mode 100644 eng/common/post-build/setup-maestro-vars.ps1 rename eng/common/templates/post-build/channels/{public-validation-release.yml => netcore-3-tools-validation.yml} (91%) create mode 100644 eng/common/templates/post-build/channels/netcore-3-tools.yml create mode 100644 eng/common/templates/post-build/channels/netcore-tools-validation.yml rename src/fsharp/FSharp.Core.nuget/icon.png => icon.png (100%) diff --git a/FSharpBuild.Directory.Build.props b/FSharpBuild.Directory.Build.props index 95fa8fcd02..791850399b 100644 --- a/FSharpBuild.Directory.Build.props +++ b/FSharpBuild.Directory.Build.props @@ -18,6 +18,8 @@ + $(MSBuildThisFileDirectory)icon.png + $(RestoreAdditionalProjectSources);$(ArtifactsPackagesDir) $(ArtifactsPackagesDir) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f10ba74c20..4da62ac3d0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - da75c6547c64a91eb8a9cecf8c503331c2cc394a + ec6a0344dd2b1237cd63b38281295ce1e4b71458 diff --git a/eng/common/PublishToSymbolServers.proj b/eng/common/PublishToSymbolServers.proj index 5d55e312b0..311e2bbe0f 100644 --- a/eng/common/PublishToSymbolServers.proj +++ b/eng/common/PublishToSymbolServers.proj @@ -37,6 +37,8 @@ 3650 true + true + true false @@ -56,7 +58,7 @@ DryRun="false" ConvertPortablePdbsToWindowsPdbs="false" PdbConversionTreatAsWarning="" - Condition="$(PublishToSymbolServer)"/> + Condition="$(PublishToSymbolServer) and $(PublishToMSDL)"/> + false + + false diff --git a/global.json b/global.json index d506e56546..4fb829e0e0 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19502.11", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19554.3", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } diff --git a/src/fsharp/FSharp.Core.nuget/icon.png b/icon.png similarity index 100% rename from src/fsharp/FSharp.Core.nuget/icon.png rename to icon.png diff --git a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec index dac8f0c240..fb54c7f393 100644 --- a/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec +++ b/src/fsharp/FSharp.Compiler.Private.Scripting/FSharp.Compiler.Private.Scripting.nuspec @@ -10,6 +10,7 @@ + $CommonFileElements$ diff --git a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj index b55bc2feba..4bc3e61c16 100644 --- a/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj +++ b/src/fsharp/FSharp.Core.nuget/FSharp.Core.nuget.csproj @@ -9,10 +9,6 @@ FSharp.Core redistributables from Visual F# Tools version $(FSPackageMajorVersion) For F# $(FSCoreMajorVersion). Contains code from the F# Software Foundation. - - - - false From 7cf21dd0c99ad92d14c59b6e583bbd471138e7f5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Wed, 6 Nov 2019 13:21:31 +0000 Subject: [PATCH 142/146] Update dependencies from https://github.com/dotnet/arcade build 20191105.7 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19555.7 --- eng/Version.Details.xml | 4 ++-- global.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4da62ac3d0..57f24eea5b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - ec6a0344dd2b1237cd63b38281295ce1e4b71458 + 82c69e4d687077689fae4826e755ff5bf296c9c3 diff --git a/global.json b/global.json index 4fb829e0e0..34d0386fc0 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19554.3", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19555.7", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From 19955c5f4c6723c18d46bed74f43e7b2ad61a2d1 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Thu, 7 Nov 2019 13:22:23 +0000 Subject: [PATCH 143/146] Update dependencies from https://github.com/dotnet/arcade build 20191106.10 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19556.10 --- eng/Version.Details.xml | 4 +-- eng/common/cross/toolchain.cmake | 49 ++++++++++---------------------- global.json | 2 +- 3 files changed, 18 insertions(+), 37 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 57f24eea5b..5ce67a2b26 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 82c69e4d687077689fae4826e755ff5bf296c9c3 + 4dcc0a7242ea70c7c18dc093c96222d1585c0c91 diff --git a/eng/common/cross/toolchain.cmake b/eng/common/cross/toolchain.cmake index 071d411241..0eea7d1df3 100644 --- a/eng/common/cross/toolchain.cmake +++ b/eng/common/cross/toolchain.cmake @@ -31,6 +31,10 @@ else() message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64 and x86 are supported!") endif() +if(DEFINED ENV{TOOLCHAIN}) + set(TOOLCHAIN $ENV{TOOLCHAIN}) +endif() + # Specify include paths if(TARGET_ARCH_NAME STREQUAL "armel") if(DEFINED TIZEN_TOOLCHAIN) @@ -39,48 +43,25 @@ if(TARGET_ARCH_NAME STREQUAL "armel") endif() endif() -# add_compile_param - adds only new options without duplicates. -# arg0 - list with result options, arg1 - list with new options. -# arg2 - optional argument, quick summary string for optional using CACHE FORCE mode. -macro(add_compile_param) - if(NOT ${ARGC} MATCHES "^(2|3)$") - message(FATAL_ERROR "Wrong using add_compile_param! Two or three parameters must be given! See add_compile_param description.") - endif() - foreach(OPTION ${ARGV1}) - if(NOT ${ARGV0} MATCHES "${OPTION}($| )") - set(${ARGV0} "${${ARGV0}} ${OPTION}") - if(${ARGC} EQUAL "3") # CACHE FORCE mode - set(${ARGV0} "${${ARGV0}}" CACHE STRING "${ARGV2}" FORCE) - endif() - endif() - endforeach() -endmacro() +set(CMAKE_SYSROOT "${CROSS_ROOTFS}") +set(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") +set(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") +set(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN "${CROSS_ROOTFS}/usr") # Specify link flags -add_compile_param(CROSS_LINK_FLAGS "--sysroot=${CROSS_ROOTFS}") -add_compile_param(CROSS_LINK_FLAGS "--gcc-toolchain=${CROSS_ROOTFS}/usr") -add_compile_param(CROSS_LINK_FLAGS "--target=${TOOLCHAIN}") -add_compile_param(CROSS_LINK_FLAGS "-fuse-ld=gold") if(TARGET_ARCH_NAME STREQUAL "armel") if(DEFINED TIZEN_TOOLCHAIN) # For Tizen only - add_compile_param(CROSS_LINK_FLAGS "-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") - add_compile_param(CROSS_LINK_FLAGS "-L${CROSS_ROOTFS}/lib") - add_compile_param(CROSS_LINK_FLAGS "-L${CROSS_ROOTFS}/usr/lib") - add_compile_param(CROSS_LINK_FLAGS "-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_link_options("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") + add_link_options("-L${CROSS_ROOTFS}/lib") + add_link_options("-L${CROSS_ROOTFS}/usr/lib") + add_link_options("-L${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") endif() elseif(TARGET_ARCH_NAME STREQUAL "x86") - add_compile_param(CROSS_LINK_FLAGS "-m32") + add_link_options(-m32) endif() -add_compile_param(CMAKE_EXE_LINKER_FLAGS "${CROSS_LINK_FLAGS}" "TOOLCHAIN_EXE_LINKER_FLAGS") -add_compile_param(CMAKE_SHARED_LINKER_FLAGS "${CROSS_LINK_FLAGS}" "TOOLCHAIN_EXE_LINKER_FLAGS") -add_compile_param(CMAKE_MODULE_LINKER_FLAGS "${CROSS_LINK_FLAGS}" "TOOLCHAIN_EXE_LINKER_FLAGS") - # Specify compile options -add_compile_options("--sysroot=${CROSS_ROOTFS}") -add_compile_options("--target=${TOOLCHAIN}") -add_compile_options("--gcc-toolchain=${CROSS_ROOTFS}/usr") if(TARGET_ARCH_NAME MATCHES "^(arm|armel|arm64)$") set(CMAKE_C_COMPILER_TARGET ${TOOLCHAIN}) @@ -103,7 +84,7 @@ elseif(TARGET_ARCH_NAME STREQUAL "x86") add_compile_options(-Wno-error=unused-command-line-argument) endif() -# Set LLDB include and library paths +# Set LLDB include and library paths for builds that need lldb. if(TARGET_ARCH_NAME MATCHES "^(arm|armel|x86)$") if(TARGET_ARCH_NAME STREQUAL "x86") set(LLVM_CROSS_DIR "$ENV{LLVM_CROSS_HOME}") @@ -131,7 +112,7 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel|x86)$") endif() endif() -set(CMAKE_FIND_ROOT_PATH "${CROSS_ROOTFS}") + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/global.json b/global.json index 34d0386fc0..3cf3055ecc 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19555.7", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19556.10", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From ce18cc59df092bbbcff8f83afaf374ef87b82f27 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" Date: Fri, 8 Nov 2019 13:19:21 +0000 Subject: [PATCH 144/146] Update dependencies from https://github.com/dotnet/arcade build 20191107.20 - Microsoft.DotNet.Arcade.Sdk - 5.0.0-beta.19557.20 --- eng/Version.Details.xml | 4 +- .../post-build/channels/general-testing.yml | 143 ++++++++++++++++++ ...ation.yml => netcore-3-eng-validation.yml} | 6 +- ...{netcore-3-tools.yml => netcore-3-eng.yml} | 6 +- .../channels/netcore-blazor-31-features.yml | 143 ++++++++++++++++++ ...ools-latest.yml => netcore-eng-latest.yml} | 6 +- ...idation.yml => netcore-eng-validation.yml} | 6 +- .../channels/netcore-internal-30.yml | 1 + .../templates/post-build/common-variables.yml | 8 + .../templates/post-build/post-build.yml | 27 +++- global.json | 2 +- 11 files changed, 331 insertions(+), 21 deletions(-) create mode 100644 eng/common/templates/post-build/channels/general-testing.yml rename eng/common/templates/post-build/channels/{netcore-3-tools-validation.yml => netcore-3-eng-validation.yml} (95%) rename eng/common/templates/post-build/channels/{netcore-3-tools.yml => netcore-3-eng.yml} (96%) create mode 100644 eng/common/templates/post-build/channels/netcore-blazor-31-features.yml rename eng/common/templates/post-build/channels/{netcore-tools-latest.yml => netcore-eng-latest.yml} (96%) rename eng/common/templates/post-build/channels/{netcore-tools-validation.yml => netcore-eng-validation.yml} (95%) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 5ce67a2b26..9470178a3b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -3,9 +3,9 @@ - + https://github.com/dotnet/arcade - 4dcc0a7242ea70c7c18dc093c96222d1585c0c91 + b62f1617f2c453497fd55697c04dd8021a38dc17 diff --git a/eng/common/templates/post-build/channels/general-testing.yml b/eng/common/templates/post-build/channels/general-testing.yml new file mode 100644 index 0000000000..229e80a883 --- /dev/null +++ b/eng/common/templates/post-build/channels/general-testing.yml @@ -0,0 +1,143 @@ +parameters: + artifactsPublishingAdditionalParameters: '' + dependsOn: + - Validate + publishInstallersAndChecksums: false + symbolPublishingAdditionalParameters: '' + +stages: +- stage: General_Testing_Publish + dependsOn: ${{ parameters.dependsOn }} + variables: + - template: ../common-variables.yml + displayName: General Testing Publishing + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.GeneralTesting_Channel_Id)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true + + # This is necessary whenever we want to publish/restore to an AzDO private feed + # Since sdk-task.ps1 tries to restore packages we need to do this authentication here + # otherwise it'll complain about accessing a private feed. + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + + - task: PowerShell@2 + displayName: Enable cross-org publishing + inputs: + filePath: eng\common\enable-cross-org-publishing.ps1 + arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' + /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} + + - job: publish_assets + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.GeneralTesting_Channel_Id)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + + - task: PowerShell@2 + displayName: Enable cross-org publishing + inputs: + filePath: eng\common\enable-cross-org-publishing.ps1 + arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) + + - task: PowerShell@2 + displayName: Publish Assets + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/general-testing-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + ${{ parameters.artifactsPublishingAdditionalParameters }} + + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.GeneralTesting_Channel_Id }} diff --git a/eng/common/templates/post-build/channels/netcore-3-tools-validation.yml b/eng/common/templates/post-build/channels/netcore-3-eng-validation.yml similarity index 95% rename from eng/common/templates/post-build/channels/netcore-3-tools-validation.yml rename to eng/common/templates/post-build/channels/netcore-3-eng-validation.yml index 9c452797b7..47f7a445be 100644 --- a/eng/common/templates/post-build/channels/netcore-3-tools-validation.yml +++ b/eng/common/templates/post-build/channels/netcore-3-eng-validation.yml @@ -83,11 +83,11 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/eng/common/templates/post-build/channels/netcore-3-tools.yml b/eng/common/templates/post-build/channels/netcore-3-eng.yml similarity index 96% rename from eng/common/templates/post-build/channels/netcore-3-tools.yml rename to eng/common/templates/post-build/channels/netcore-3-eng.yml index 374eb50af9..a8ef4435dd 100644 --- a/eng/common/templates/post-build/channels/netcore-3-tools.yml +++ b/eng/common/templates/post-build/channels/netcore-3-eng.yml @@ -130,11 +130,11 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/eng/common/templates/post-build/channels/netcore-blazor-31-features.yml b/eng/common/templates/post-build/channels/netcore-blazor-31-features.yml new file mode 100644 index 0000000000..8be0506ff9 --- /dev/null +++ b/eng/common/templates/post-build/channels/netcore-blazor-31-features.yml @@ -0,0 +1,143 @@ +parameters: + artifactsPublishingAdditionalParameters: '' + dependsOn: + - Validate + publishInstallersAndChecksums: false + symbolPublishingAdditionalParameters: '' + +stages: +- stage: NetCore_Blazor31_Features_Publish + dependsOn: ${{ parameters.dependsOn }} + variables: + - template: ../common-variables.yml + displayName: .NET Core 3.1 Blazor Features Publishing + jobs: + - template: ../setup-maestro-vars.yml + + - job: + displayName: Symbol Publishing + dependsOn: setupMaestroVars + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_31_Blazor_Features)) + variables: + - group: DotNet-Symbol-Server-Pats + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + artifactName: 'BlobArtifacts' + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download PDB Artifacts + inputs: + artifactName: 'PDBArtifacts' + continueOnError: true + + # This is necessary whenever we want to publish/restore to an AzDO private feed + # Since sdk-task.ps1 tries to restore packages we need to do this authentication here + # otherwise it'll complain about accessing a private feed. + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + + - task: PowerShell@2 + displayName: Enable cross-org publishing + inputs: + filePath: eng\common\enable-cross-org-publishing.ps1 + arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) + + - task: PowerShell@2 + displayName: Publish + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishToSymbolServers -restore -msbuildEngine dotnet + /p:DotNetSymbolServerTokenMsdl=$(microsoft-symbol-server-pat) + /p:DotNetSymbolServerTokenSymWeb=$(symweb-symbol-server-pat) + /p:PDBArtifactsDirectory='$(Build.ArtifactStagingDirectory)/PDBArtifacts/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:SymbolPublishingExclusionsFile='$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt' + /p:Configuration=Release + ${{ parameters.symbolPublishingAdditionalParameters }} + + - job: publish_assets + displayName: Publish Assets + dependsOn: setupMaestroVars + variables: + - name: BARBuildId + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.BARBuildId'] ] + - name: IsStableBuild + value: $[ dependencies.setupMaestroVars.outputs['setReleaseVars.IsStableBuild'] ] + condition: contains(dependencies.setupMaestroVars.outputs['setReleaseVars.InitialChannels'], format('[{0}]', variables.NetCore_31_Blazor_Features)) + pool: + vmImage: 'windows-2019' + steps: + - task: DownloadBuildArtifacts@0 + displayName: Download Package Artifacts + inputs: + buildType: current + artifactName: PackageArtifacts + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download Blob Artifacts + inputs: + buildType: current + artifactName: BlobArtifacts + continueOnError: true + + - task: DownloadBuildArtifacts@0 + displayName: Download Asset Manifests + inputs: + buildType: current + artifactName: AssetManifests + + - task: NuGetToolInstaller@1 + displayName: 'Install NuGet.exe' + + # This is necessary whenever we want to publish/restore to an AzDO private feed + - task: NuGetAuthenticate@0 + displayName: 'Authenticate to AzDO Feeds' + + - task: PowerShell@2 + displayName: Enable cross-org publishing + inputs: + filePath: eng\common\enable-cross-org-publishing.ps1 + arguments: -token $(dn-bot-dnceng-artifact-feeds-rw) + + - task: PowerShell@2 + displayName: Publish Assets + inputs: + filePath: eng\common\sdk-task.ps1 + arguments: -task PublishArtifactsInManifest -restore -msbuildEngine dotnet + /p:ArtifactsCategory=$(_DotNetArtifactsCategory) + /p:IsStableBuild=$(IsStableBuild) + /p:IsInternalBuild=$(IsInternalBuild) + /p:RepositoryName=$(Build.Repository.Name) + /p:CommitSha=$(Build.SourceVersion) + /p:NugetPath=$(NuGetExeToolPath) + /p:AzdoTargetFeedPAT='$(dn-bot-dnceng-universal-packages-rw)' + /p:AzureStorageTargetFeedPAT='$(dotnetfeed-storage-access-key-1)' + /p:BARBuildId=$(BARBuildId) + /p:MaestroApiEndpoint='$(MaestroApiEndPoint)' + /p:BuildAssetRegistryToken='$(MaestroApiAccessToken)' + /p:ManifestsBasePath='$(Build.ArtifactStagingDirectory)/AssetManifests/' + /p:BlobBasePath='$(Build.ArtifactStagingDirectory)/BlobArtifacts/' + /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts/' + /p:Configuration=Release + /p:PublishInstallersAndChecksums=${{ parameters.publishInstallersAndChecksums }} + /p:InstallersTargetStaticFeed=$(InstallersBlobFeedUrl) + /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) + /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) + /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet3.1-blazor-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' + ${{ parameters.artifactsPublishingAdditionalParameters }} + + - template: ../../steps/promote-build.yml + parameters: + ChannelId: ${{ variables.NetCore_31_Blazor_Features }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-latest.yml b/eng/common/templates/post-build/channels/netcore-eng-latest.yml similarity index 96% rename from eng/common/templates/post-build/channels/netcore-tools-latest.yml rename to eng/common/templates/post-build/channels/netcore-eng-latest.yml index 15360c976f..4bf6cdbde1 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-latest.yml +++ b/eng/common/templates/post-build/channels/netcore-eng-latest.yml @@ -146,11 +146,11 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/eng/common/templates/post-build/channels/netcore-tools-validation.yml b/eng/common/templates/post-build/channels/netcore-eng-validation.yml similarity index 95% rename from eng/common/templates/post-build/channels/netcore-tools-validation.yml rename to eng/common/templates/post-build/channels/netcore-eng-validation.yml index ed80ff29d3..36991ed020 100644 --- a/eng/common/templates/post-build/channels/netcore-tools-validation.yml +++ b/eng/common/templates/post-build/channels/netcore-eng-validation.yml @@ -85,11 +85,11 @@ stages: /p:InstallersAzureAccountKey=$(dotnetcli-storage-key) /p:ChecksumsTargetStaticFeed=$(ChecksumsBlobFeedUrl) /p:ChecksumsAzureAccountKey=$(dotnetclichecksums-storage-key) - /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticShippingFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticShippingFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json' + /p:AzureDevOpsStaticTransportFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json' /p:AzureDevOpsStaticTransportFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' - /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools-symbols/nuget/v3/index.json' + /p:AzureDevOpsStaticSymbolsFeed='https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng-symbols/nuget/v3/index.json' /p:AzureDevOpsStaticSymbolsFeedKey='$(dn-bot-dnceng-artifact-feeds-rw)' ${{ parameters.artifactsPublishingAdditionalParameters }} diff --git a/eng/common/templates/post-build/channels/netcore-internal-30.yml b/eng/common/templates/post-build/channels/netcore-internal-30.yml index 523bcfa320..75b1bfaaad 100644 --- a/eng/common/templates/post-build/channels/netcore-internal-30.yml +++ b/eng/common/templates/post-build/channels/netcore-internal-30.yml @@ -10,6 +10,7 @@ stages: artifactsPublishingAdditionalParameters: '' dependsOn: - Validate + publishInstallersAndChecksums: false symbolPublishingAdditionalParameters: '' stages: diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml index c835e16a64..ad4e0004f2 100644 --- a/eng/common/templates/post-build/common-variables.yml +++ b/eng/common/templates/post-build/common-variables.yml @@ -49,6 +49,14 @@ variables: - name: PublicRelease_31_Channel_Id value: 129 + # General Testing + - name: GeneralTesting_Channel_Id + value: 529 + + # .NET Core 3.1 Blazor Features + - name: NetCore_31_Blazor_Features + value: 531 + # Whether the build is internal or not - name: IsInternalBuild value: ${{ and(ne(variables['System.TeamProject'], 'public'), contains(variables['Build.SourceBranch'], 'internal')) }} diff --git a/eng/common/templates/post-build/post-build.yml b/eng/common/templates/post-build/post-build.yml index 3a56860822..f5755590cd 100644 --- a/eng/common/templates/post-build/post-build.yml +++ b/eng/common/templates/post-build/post-build.yml @@ -117,7 +117,8 @@ stages: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + - template: \eng\common\templates\post-build\channels\netcore-dev-31.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} @@ -125,27 +126,26 @@ stages: publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} -- template: \eng\common\templates\post-build\channels\netcore-tools-latest.yml +- template: \eng\common\templates\post-build\channels\netcore-eng-latest.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} -- template: \eng\common\templates\post-build\channels\netcore-tools-validation.yml +- template: \eng\common\templates\post-build\channels\netcore-eng-validation.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} - symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} -- template: \eng\common\templates\post-build\channels\netcore-3-tools-validation.yml +- template: \eng\common\templates\post-build\channels\netcore-3-eng-validation.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} dependsOn: ${{ parameters.publishDependsOn }} publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} -- template: \eng\common\templates\post-build\channels\netcore-3-tools.yml +- template: \eng\common\templates\post-build\channels\netcore-3-eng.yml parameters: dependsOn: ${{ parameters.publishDependsOn }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} @@ -166,8 +166,23 @@ stages: publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} +- template: \eng\common\templates\post-build\channels\netcore-blazor-31-features.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + - template: \eng\common\templates\post-build\channels\netcore-internal-30.yml parameters: artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} + symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} + +- template: \eng\common\templates\post-build\channels\general-testing.yml + parameters: + artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} + dependsOn: ${{ parameters.publishDependsOn }} + publishInstallersAndChecksums: ${{ parameters.publishInstallersAndChecksums }} symbolPublishingAdditionalParameters: ${{ parameters.symbolPublishingAdditionalParameters }} diff --git a/global.json b/global.json index 3cf3055ecc..964bb5e247 100644 --- a/global.json +++ b/global.json @@ -10,7 +10,7 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19556.10", + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.19557.20", "Microsoft.DotNet.Helix.Sdk": "2.0.0-beta.19069.2" } } From f1b356e09d4b67188038225733b242fdc8f31e01 Mon Sep 17 00:00:00 2001 From: "Brett V. Forsgren" Date: Thu, 7 Nov 2019 16:22:06 -0800 Subject: [PATCH 145/146] set insertion payload name (#7830) --- eng/release/insert-into-vs.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/release/insert-into-vs.yml b/eng/release/insert-into-vs.yml index 89650f190d..98c3ee790d 100644 --- a/eng/release/insert-into-vs.yml +++ b/eng/release/insert-into-vs.yml @@ -26,6 +26,8 @@ stages: value: ${{ parameters.insertTeamEmail }} - name: InsertTeamName value: ${{ parameters.insertTeamName }} + - name: InsertPayloadName + value: 'F# $(Build.SourceBranchName) $(Build.BuildNumber)' steps: - task: DownloadBuildArtifacts@0 displayName: Download Insertion Artifacts From 2f87d5f92fd95152500ec2a45e39e8b80ec7b69f Mon Sep 17 00:00:00 2001 From: Eugene Auduchinok Date: Fri, 8 Nov 2019 06:28:14 +0200 Subject: [PATCH 146/146] Fix SynExpr.ImplicitZero doc comment (#7831) ImplicitZero is also used in error recovery during parsing, and the current comment contradicts it. --- src/fsharp/ast.fs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index 3ec5b54691..f5a8382505 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -748,7 +748,7 @@ and /// Computation expressions only, based on JOIN_IN token from lex filter | JoinIn of SynExpr * range * SynExpr * range: range - /// Used internally during type checking for translating computation expressions. + /// Used in parser error recovery and internally during type checking for translating computation expressions. | ImplicitZero of range: range /// Used internally during type checking for translating computation expressions.