From 5271447501b9d64979ad7a75f0a36fbb96a1b788 Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 6 Aug 2026 14:06:22 +0200 Subject: [PATCH 1/2] Collapse ImplicitYield enforcement gates to the always-on path LanguageFeature.ImplicitYield is permanently enabled for every accepted langversion (min --langversion is 8.0), so the flag guard is always true. Keep only the enabled paths and delete the dead legacy branches: - CheckExpressionsOps.fs: collapse YieldFree to its enabled body and drop the now-dead cenv parameter from YieldFree, IsSimpleSemicolonSequenceElement, TryGetSimpleSemicolonSequenceOfComprehension and (|SimpleSemicolonSequence|_|). - CheckSequenceExpressions.fs: drop the constant conjunct in enableImplicitYield, delete the dead SynExpr.Paren guard arm, and delete the dead validateObjectSequenceOrRecordExpression block. - CheckArrayOrListComputedExpressions.fs: collapse the implicitYieldEnabled block and its nested match to the single reachable arm. - CheckComputationExpressions.fs: drop the constant conjunct in enableImplicitYield (field and its branches retained) and update the YieldFree call. The LanguageFeature.ImplicitYield definition is intentionally left in place; a later change removes it. No behavioural change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../CheckArrayOrListComputedExpressions.fs | 15 +--- .../CheckComputationExpressions.fs | 9 +- .../Expressions/CheckExpressionsOps.fs | 88 ++++++------------- .../Expressions/CheckSequenceExpressions.fs | 17 +--- 4 files changed, 33 insertions(+), 96 deletions(-) diff --git a/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs b/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs index f8a2abd7d73..a993b0a1490 100644 --- a/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs @@ -53,21 +53,8 @@ let TcArrayOrListComputedExpression (cenv: TcFileState) env (overallTy: OverallT | None -> - // LanguageFeatures.ImplicitYield do not require this validation - let implicitYieldEnabled = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - - let validateExpressionWithIfRequiresParenthesis = not implicitYieldEnabled - let acceptDeprecatedIfThenExpression = not implicitYieldEnabled - match comp with - | SimpleSemicolonSequence cenv acceptDeprecatedIfThenExpression elems -> - match comp with - | SimpleSemicolonSequence cenv false _ -> () - | _ when validateExpressionWithIfRequiresParenthesis -> - errorR (Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis (), m)) - | _ -> () - + | SimpleSemicolonSequence false elems -> let replacementExpr = if isArray then // This are to improve parsing/processing speed for parser tables by converting to an array blob ASAP diff --git a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs index 040b61f9a89..d468b3f6609 100644 --- a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs @@ -3037,11 +3037,10 @@ let TcComputationExpression (cenv: TcFileState) env (overallTy: OverallTy) tpenv // then allow the type-directed rule interpreting non-unit-typed expressions in statement // positions as 'yield'. 'yield!' may be present in the computation expression. let enableImplicitYield = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - && (hasMethInfo "Yield" cenv env mBuilderVal ad builderTy - && hasMethInfo "Combine" cenv env mBuilderVal ad builderTy - && hasMethInfo "Delay" cenv env mBuilderVal ad builderTy - && YieldFree cenv comp) + hasMethInfo "Yield" cenv env mBuilderVal ad builderTy + && hasMethInfo "Combine" cenv env mBuilderVal ad builderTy + && hasMethInfo "Delay" cenv env mBuilderVal ad builderTy + && YieldFree comp let origComp = comp diff --git a/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs b/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs index 0fe8e296b81..85f2a7a79b5 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs +++ b/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs @@ -180,69 +180,35 @@ let RewriteRangeExpr synExpr = | _ -> None /// Check if a computation or sequence expression is syntactically free of 'yield' (though not yield!) -let YieldFree (cenv: TcFileState) expr = - if cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield then +let YieldFree expr = + let rec YieldFree expr = + match expr with + | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 - // Implement yield free logic for F# Language including the LanguageFeature.ImplicitYield - let rec YieldFree expr = - match expr with - | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 + | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt - | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt + | SynExpr.TryWith(tryExpr = body; withCases = clauses) -> + YieldFree body + && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - | SynExpr.TryWith(tryExpr = body; withCases = clauses) -> - YieldFree body - && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) + | SynExpr.Match(clauses = clauses) + | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - | SynExpr.Match(clauses = clauses) - | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) + | SynExpr.For(doBody = body) + | SynExpr.TryFinally(tryExpr = body) + | SynExpr.LetOrUse({ Body = body }) + | SynExpr.While(doExpr = body) + | SynExpr.WhileBang(doExpr = body) + | SynExpr.ForEach(bodyExpr = body) -> YieldFree body + | SynExpr.YieldOrReturn(flags = (true, _)) -> false - | SynExpr.For(doBody = body) - | SynExpr.TryFinally(tryExpr = body) - | SynExpr.LetOrUse({ Body = body }) - | SynExpr.While(doExpr = body) - | SynExpr.WhileBang(doExpr = body) - | SynExpr.ForEach(bodyExpr = body) -> YieldFree body - | SynExpr.YieldOrReturn(flags = (true, _)) -> false + | _ -> true - | _ -> true + YieldFree expr - YieldFree expr - else - // Implement yield free logic for F# Language without the LanguageFeature.ImplicitYield - let rec YieldFree expr = - match expr with - | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 - - | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt - - | SynExpr.TryWith(tryExpr = e1; withCases = clauses) -> - YieldFree e1 - && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - - | SynExpr.Match(clauses = clauses) - | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - - | SynExpr.For(doBody = body) - | SynExpr.TryFinally(tryExpr = body) - | SynExpr.LetOrUse({ Body = body }) - | SynExpr.While(doExpr = body) - | SynExpr.WhileBang(doExpr = body) - | SynExpr.ForEach(bodyExpr = body) -> YieldFree body - - | LetOrUse(_, true, _) - | SynExpr.YieldOrReturnFrom _ - | SynExpr.YieldOrReturn _ - | SynExpr.ImplicitZero _ - | SynExpr.Do _ -> false - - | _ -> true - - YieldFree expr - -let inline IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated = +let inline IsSimpleSemicolonSequenceElement expr acceptDeprecated = match expr with - | SynExpr.IfThenElse _ when acceptDeprecated && YieldFree cenv expr -> true + | SynExpr.IfThenElse _ when acceptDeprecated && YieldFree expr -> true | SynExpr.IfThenElse _ | SynExpr.TryWith _ | SynExpr.Match _ @@ -259,15 +225,15 @@ let inline IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated = | _ -> true [] -let rec TryGetSimpleSemicolonSequenceOfComprehension expr acc cenv acceptDeprecated = +let rec TryGetSimpleSemicolonSequenceOfComprehension expr acc acceptDeprecated = match expr with | SynExpr.Sequential(isTrueSeq = true; expr1 = e1; expr2 = e2) -> - if IsSimpleSemicolonSequenceElement e1 cenv acceptDeprecated then - TryGetSimpleSemicolonSequenceOfComprehension e2 (e1 :: acc) cenv acceptDeprecated + if IsSimpleSemicolonSequenceElement e1 acceptDeprecated then + TryGetSimpleSemicolonSequenceOfComprehension e2 (e1 :: acc) acceptDeprecated else ValueNone | _ -> - if IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated then + if IsSimpleSemicolonSequenceElement expr acceptDeprecated then ValueSome(List.rev (expr :: acc)) else ValueNone @@ -276,8 +242,8 @@ let rec TryGetSimpleSemicolonSequenceOfComprehension expr acc cenv acceptDepreca /// of semicolon separated values". For example [1;2;3]. /// 'acceptDeprecated' is true for the '[ ... ]' case, where we allow the syntax '[ if g then t else e ]' but ask it to be parenthesized [] -let (|SimpleSemicolonSequence|_|) cenv acceptDeprecated cexpr = - TryGetSimpleSemicolonSequenceOfComprehension cexpr [] cenv acceptDeprecated +let (|SimpleSemicolonSequence|_|) acceptDeprecated cexpr = + TryGetSimpleSemicolonSequenceOfComprehension cexpr [] acceptDeprecated let elimFastIntegerForLoop (spFor, spTo, id, start: SynExpr, dir, finish: SynExpr, innerExpr, m: range) = let mOp = (unionRanges start.Range finish.Range).MakeSynthetic() diff --git a/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs b/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs index c3f740cf458..aec732896e5 100644 --- a/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs @@ -35,9 +35,7 @@ let TcSequenceExpression (cenv: TcFileState) env tpenv comp (overallTy: OverallT // If there are no 'yield' in the computation expression then allow the type-directed rule // interpreting non-unit-typed expressions in statement positions as 'yield'. 'yield!' may be // present in the computation expression. - let enableImplicitYield = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - && (YieldFree cenv comp) + let enableImplicitYield = YieldFree comp let mkSeqDelayedExpr m (coreExpr: Expr) = let overallTy = tyOfExpr cenv.g coreExpr @@ -162,9 +160,6 @@ let TcSequenceExpression (cenv: TcFileState) env tpenv comp (overallTy: OverallT Some(mkSeqFinally cenv env mTryToLast genOuterTy innerExpr unwindExpr, tpenv) - | SynExpr.Paren(range = m) when not (cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield) -> - error (Error(FSComp.SR.tcConstructIsAmbiguousInSequenceExpression (), m)) - | SynExpr.ImplicitZero m -> Some(mkSeqEmpty cenv env m genOuterTy, tpenv) | SynExpr.DoBang(trivia = { DoBangKeyword = m }) -> error (Error(FSComp.SR.tcDoBangIllegalInSequenceExpression (), m)) @@ -469,16 +464,6 @@ let TcSequenceExpressionEntry (cenv: TcFileState) env (overallTy: OverallTy) tpe match RewriteRangeExpr comp with | Some replacementExpr -> TcExpr cenv overallTy env tpenv replacementExpr | None -> - let implicitYieldEnabled = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - - let validateObjectSequenceOrRecordExpression = not implicitYieldEnabled - - match comp with - | SimpleSemicolonSequence cenv false _ when validateObjectSequenceOrRecordExpression -> - errorR (Error(FSComp.SR.tcInvalidObjectSequenceOrRecordExpression (), m)) - | _ -> () - if not hasBuilder && not cenv.g.compilingFSharpCore then error (Error(FSComp.SR.tcInvalidSequenceExpressionSyntaxForm (), m)) From 0656a730b84bc3e87b0b53fe9902925b5f96c23d Mon Sep 17 00:00:00 2001 From: Copilot Date: Thu, 6 Aug 2026 14:51:51 +0200 Subject: [PATCH 2/2] Remove dead ImplicitYield language-feature flag The LanguageFeature.ImplicitYield flag shipped in F# 4.7 and is permanently enabled (minimum accepted --langversion is 8.0), so it is dead configuration. All enforcement sites were already collapsed to the always-on path, leaving the flag unreferenced. Delete the ImplicitYield union case (both .fs and .fsi), its features-map entry, its GetFeatureString arm, and the featureImplicitYield resource string. The xlf localization files were regenerated via /t:UpdateXlf. The SynExpr.SequentialOrImplicitYield syntax node and related implementation are unaffected; only the feature flag is removed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/Compiler/FSComp.txt | 1 - src/Compiler/Facilities/LanguageFeatures.fs | 3 --- src/Compiler/Facilities/LanguageFeatures.fsi | 1 - src/Compiler/xlf/FSComp.txt.cs.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.de.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.es.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.fr.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.it.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ja.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ko.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.pl.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.ru.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.tr.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 5 ----- src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 5 ----- 16 files changed, 70 deletions(-) diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 26699fa4d9b..ecdfc2f4138 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -1567,7 +1567,6 @@ featureSingleUnderscorePattern,"single underscore pattern" featureWildCardInForLoop,"wild card in for loop" featureRelaxWhitespace,"whitespace relaxation" featureNameOf,"nameof" -featureImplicitYield,"implicit yield" featureOpenTypeDeclaration,"open type declaration" featureDotlessFloat32Literal,"dotless float32 literal" featurePackageManagement,"package management" diff --git a/src/Compiler/Facilities/LanguageFeatures.fs b/src/Compiler/Facilities/LanguageFeatures.fs index ad170712e4a..acfdb7a0ba3 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fs +++ b/src/Compiler/Facilities/LanguageFeatures.fs @@ -21,7 +21,6 @@ type LanguageFeature = | RelaxWhitespace | RelaxWhitespace2 | NameOf - | ImplicitYield | OpenTypeDeclaration | DotlessFloat32Literal | PackageManagement @@ -155,7 +154,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) LanguageFeature.SingleUnderscorePattern, languageVersion47 LanguageFeature.WildCardInForLoop, languageVersion47 LanguageFeature.RelaxWhitespace, languageVersion47 - LanguageFeature.ImplicitYield, languageVersion47 // F# 5.0 LanguageFeature.FixedIndexSlice3d4d, languageVersion50 @@ -369,7 +367,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) | LanguageFeature.RelaxWhitespace -> FSComp.SR.featureRelaxWhitespace () | LanguageFeature.RelaxWhitespace2 -> FSComp.SR.featureRelaxWhitespace2 () | LanguageFeature.NameOf -> FSComp.SR.featureNameOf () - | LanguageFeature.ImplicitYield -> FSComp.SR.featureImplicitYield () | LanguageFeature.OpenTypeDeclaration -> FSComp.SR.featureOpenTypeDeclaration () | LanguageFeature.DotlessFloat32Literal -> FSComp.SR.featureDotlessFloat32Literal () | LanguageFeature.PackageManagement -> FSComp.SR.featurePackageManagement () diff --git a/src/Compiler/Facilities/LanguageFeatures.fsi b/src/Compiler/Facilities/LanguageFeatures.fsi index 8c7ebd7e3c3..44035bf3416 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fsi +++ b/src/Compiler/Facilities/LanguageFeatures.fsi @@ -11,7 +11,6 @@ type LanguageFeature = | RelaxWhitespace | RelaxWhitespace2 | NameOf - | ImplicitYield | OpenTypeDeclaration | DotlessFloat32Literal | PackageManagement diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index 8cb70b4c49e..8d0ad097c81 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - implicitní yield - - Improved implied argument names Vylepšené názvy implikovaných argumentů diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 5686312be6b..9fbe733b5d0 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - implizite yield-Anweisung - - Improved implied argument names Verbesserte implizite Argumentnamen diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index a3b4cfce50b..60c145f690d 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - elemento yield implícito - - Improved implied argument names Nombres de argumentos implícitos mejorados diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index bf46f5ee12b..4ae30734543 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - yield implicite - - Improved implied argument names Noms d’arguments implicites améliorés diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index 6d705cdc2d1..3fbf6c38c02 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - istruzione yield implicita - - Improved implied argument names Nomi di argomenti impliciti migliorati diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 0b35b8e6dac..bcefd4b1860 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 暗黙的な yield - - Improved implied argument names 暗黙的な引数名の改善 diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index b00f54bfa76..738b4b53680 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 암시적 yield - - Improved implied argument names 향상된 암시적 인수 이름 diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index b6d4b78a2d8..ad820b3eec0 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - niejawne słowo kluczowe yield - - Improved implied argument names Ulepszone nazwy dorozumianych argumentów diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index ba46752a529..5a3f72b0578 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - yield implícito - - Improved implied argument names Nomes de argumento implícitos aprimorados diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 4a13225bc33..6adfd9bf718 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - неявное использование yield - - Improved implied argument names Улучшенные имена подразумеваемых аргументов diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 0d880a3f23a..382b5a58b0b 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - örtük yield - - Improved implied argument names Geliştirilmiş örtük bağımsız değişken adları diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index ce2c173e893..4bbfa6f78ac 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 隐式 yield - - Improved implied argument names 改进了默示的参数名称 diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index 09d5f37bea9..6f796ad859b 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 隱含 yield - - Improved implied argument names 改良的隱含引數名稱